Docs
Open-Source Observability Stack Example
Open-Source Observability Stack Example
const platformEngineer: User = { name: "Platform Engineer", description: "Owns monitoring" };
const contributor: User = { name: "Community Dev", description: "Extends plugins" };
const skyline: ComputerSystem = { name: "Skyline Observability" };
const controlPlane: Container = { name: "Control Plane", system: skyline };
const dataLake: Container = { name: "Data Lake", system: skyline };
const dashboards: Container = { name: "Dashboards", system: skyline };
const edgeAgents: Container = { name: "Cluster Agents", system: skyline };
const kubeAgent: BackgroundJob = {
name: "Kube Agent",
description: "Collects metrics + logs",
belongsTo: edgeAgents,
};
const serviceMap: RestApi = {
name: "Service Map API",
description: "Topology + traces",
belongsTo: controlPlane,
};
const alertManager: RestApi = {
name: "Alert Manager",
description: "Rules, paging, webhooks",
belongsTo: controlPlane,
};
const ingestGateway: RestApi = {
name: "Ingest Gateway",
description: "OpenTelemetry collector",
belongsTo: controlPlane,
};
const timeseriesDb: Postgres = {
name: "TSDB",
description: "PromQL-compatible store",
belongsTo: dataLake,
};
const logStore: Postgres = {
name: "Log Store",
description: "Columnar logs",
belongsTo: dataLake,
};
const eventsTopic: KafkaTopic = {
name: "Events Bus",
description: "Alerts, deploy hooks",
belongsTo: controlPlane,
};
const pluginRegistry: RestApi = {
name: "Plugin Registry",
description: "Hosts visualization plugins",
belongsTo: dashboards,
};
const explorerUi: ReactApp = {
name: "Explorer UI",
description: "Dashboards + alerts",
belongsTo: dashboards,
};
platformEngineer.sendsRequestTo(explorerUi, "inspect cluster")
.then(explorerUi).sendsRequestTo(serviceMap, "fetch topology")
.sendsRequestTo(alertManager, "list alerts")
.sendsRequestTo(pluginRegistry, "load plugin")
.sendsRequestTo(eventsTopic, "audit view", { kind: 'event' });
kubeAgent.sendsRequestTo(ingestGateway, "ship metrics", { kind: 'async' })
.sendsRequestTo(timeseriesDb, "store metrics", { kind: 'dependency' })
.sendsRequestTo(logStore, "store logs", { kind: 'dependency' })
.sendsRequestTo(eventsTopic, "emit anomalies", { kind: 'event' });
serviceMap.getDataFrom(timeseriesDb, "metrics")
.getDataFrom(logStore, "logs")
.sendsRequestTo(alertManager, "fire alerts", { kind: 'event' });
contributor.sendsRequestTo(pluginRegistry, "publish plugin")
.sendsRequestTo(eventsTopic, "announce release", { kind: 'event' });Try it in Playground