Skip to content
Weave templates

Observability Stack (Metrics, Logs, Traces)

The three pillars end to end: OpenTelemetry-instrumented services, a collector tier with tail sampling, Mimir / Loki / Tempo backed by object storage, and Grafana driving SLO alerts into an on-call rota.

Template previewWeave
Rendering…

Make it your own.

{
  "nodes": [
    { "id": "fa", "type": "container", "label": "Instrumented services", "x": 20,  "y": 40, "width": 240, "height": 560, "fill": "rgba(219,234,254,0.26)", "stroke": "#1d4ed8" },
    { "id": "fb", "type": "container", "label": "Collection",            "x": 310, "y": 40, "width": 250, "height": 560, "fill": "rgba(220,252,231,0.26)", "stroke": "#15803d" },
    { "id": "fc", "type": "container", "label": "Storage",               "x": 610, "y": 40, "width": 250, "height": 560, "fill": "rgba(254,243,199,0.26)", "stroke": "#b45309" },
    { "id": "fd", "type": "container", "label": "Query & response",      "x": 910, "y": 40, "width": 270, "height": 560, "fill": "rgba(237,233,254,0.26)", "stroke": "#6d28d9" },

    { "id": "s1",  "type": "microservice",     "label": "checkout-api",      "x": 45, "y": 90,  "width": 180, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
    { "id": "s2",  "type": "microservice",     "label": "search-api",        "x": 45, "y": 230, "width": 180, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
    { "id": "s3",  "type": "docker-container", "label": "worker pool",       "x": 45, "y": 370, "width": 180, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
    { "id": "sdk", "type": "package",          "label": "OTel SDK — auto-instrumented", "x": 45, "y": 480, "width": 190, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8", "bold": true },

    { "id": "col",  "type": "gear",       "label": "OTel Collector (DaemonSet)", "x": 340, "y": 90,  "width": 190, "height": 104, "fill": "#dcfce7", "stroke": "#15803d", "bold": true },
    { "id": "prom", "type": "line-chart", "label": "Prometheus scrape",         "x": 340, "y": 230, "width": 190, "height": 104, "fill": "#dcfce7", "stroke": "#15803d" },
    { "id": "flb",  "type": "conveyor",   "label": "Fluent Bit — log shipper",  "x": 340, "y": 370, "width": 190, "height": 104, "fill": "#dcfce7", "stroke": "#15803d" },
    { "id": "smp",  "type": "funnel",     "label": "Tail sampling — 5 %",       "x": 340, "y": 480, "width": 190, "height": 104, "fill": "#dcfce7", "stroke": "#15803d" },

    { "id": "tsdb", "type": "stacked-cylinder", "label": "Mimir — metrics TSDB", "x": 640, "y": 90,  "width": 190, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
    { "id": "loki", "type": "data-lake",        "label": "Loki — log store",     "x": 640, "y": 230, "width": 190, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
    { "id": "tmpo", "type": "file-stack",       "label": "Tempo — trace store",  "x": 640, "y": 370, "width": 190, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
    { "id": "obj",  "type": "aws-s3",           "label": "S3 — long-term blocks","x": 640, "y": 480, "width": 130, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },

    { "id": "graf", "type": "bar-chart",  "label": "Grafana — dashboards & SLOs", "x": 940, "y": 90,  "width": 210, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9", "bold": true },
    { "id": "am",   "type": "bell",       "label": "Alertmanager — routing",      "x": 940, "y": 230, "width": 200, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
    { "id": "page", "type": "user-group", "label": "On-call rota",                "x": 940, "y": 370, "width": 190, "height": 104, "fill": "#f1f5f9", "stroke": "#475569" },
    { "id": "slo",  "type": "target",     "label": "Error-budget policy",         "x": 940, "y": 480, "width": 190, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" }
  ],
  "edges": [
    { "id": "o1",  "source": "s1",   "target": "sdk" },
    { "id": "o2",  "source": "s2",   "target": "sdk" },
    { "id": "o3",  "source": "s3",   "target": "sdk" },
    { "id": "o4",  "source": "sdk",  "target": "col",  "label": "OTLP gRPC", "thickness": 3 },
    { "id": "o5",  "source": "s1",   "target": "prom", "label": "/metrics", "style": "dashed" },
    { "id": "o6",  "source": "s3",   "target": "flb",  "label": "stdout logs", "style": "dashed" },
    { "id": "o7",  "source": "col",  "target": "smp",  "label": "traces" },
    { "id": "o8",  "source": "col",  "target": "tsdb", "label": "metrics", "thickness": 2 },
    { "id": "o9",  "source": "prom", "target": "tsdb", "label": "remote write" },
    { "id": "o10", "source": "flb",  "target": "loki" },
    { "id": "o11", "source": "smp",  "target": "tmpo" },
    { "id": "o12", "source": "tsdb", "target": "obj",  "label": "13-month retention", "style": "dashed" },
    { "id": "o13", "source": "loki", "target": "obj",  "style": "dashed" },
    { "id": "o14", "source": "tmpo", "target": "obj",  "style": "dashed" },
    { "id": "o15", "source": "tsdb", "target": "graf" },
    { "id": "o16", "source": "loki", "target": "graf" },
    { "id": "o17", "source": "tmpo", "target": "graf" },
    { "id": "o18", "source": "graf", "target": "am",   "label": "burn-rate alert", "thickness": 2 },
    { "id": "o19", "source": "am",   "target": "page", "label": "page / ticket" },
    { "id": "o20", "source": "slo",  "target": "am",   "label": "suppression windows", "style": "dashed" },
    { "id": "o21", "source": "graf", "target": "tmpo", "label": "exemplar to trace", "style": "dashed" }
  ]
}