Skip to content

Observability stack (epic) — metrics, logs, traces, profiles, cost #102

Description

@gangster

Observability stack — epic

Single pane of glass (metrics, logs, traces, profiles, cost, cloud resources) across all environments. Closes CNCF capability gap #7 (today only Hubble + ArgoCD). Delivered as the full stack in small, independently-verifiable phases — one Terragrunt unit + gated plan→apply + a runtime check each, never batched.

Full design: docs/plans/102-observability-stack.md

Progress: 2 / 14 phases live (P1, P2). Each remaining phase is now its own tracked sub-issue (links below).

Topology — hub & spoke

  • Hub = platform cluster: central Grafana + SSO + multi-tenant stores Mimir (metrics) / Loki (logs) / Tempo (traces). One UI, one set of stores.
  • Spokes = each workload cluster: lightweight collectors (Alloy / OTel) remote-write/push to the hub over Tailscale/TGW.
  • Tenancy: tenant = team = teams.hcl key, stamped as X-Scope-OrgID from the namespace label on the write path, enforced server-side (auth_enabled: true), pinned per-team on the read path. Grafana is Tailscale-only.

Locked decisions

  • Terragrunt units; hub on platform; isolation-ready from day one.
  • Absolute latest stable (GA) chart + provider pins, re-resolved per phase.
  • HA is a per-unit high_availability toggle (mirrors the ArgoCD module): off on reference clusters, on for prod/capacity-rich.
  • Cost-conscious: attack data volume (retention, trace tail-sampling, cardinality limits, S3 lifecycle) + compute (Graviton/arm64, spot for stateless tiers), not replica counts. OpenCost (P11) is the evidence.
  • OSS-default, commercial opt-in: every capability ships OSS as default; commercial (Grafana Enterprise/Cloud, AMP, SLO/Synthetics/OnCall) is a per-unit flag, never a fork.

Security invariants (load-bearing)

X-Scope-OrgID is a trust header, not auth → cross-cluster ingest is authenticated + the hub overwrites tenant from the authenticated source identity + the collector derives tenant from the verified pod namespace. Raw store endpoints are network-isolated from team-* pods. Per-tenant limits are a security control. Grafana datasource-proxy locked (SSRF). Secrets via External Secrets.

Phases

Track A — Core stores & UI

Track B — Make it actionable

  • P4 — Alerting & incident response (full)P4 — Alerting & incident response (full set) #583. Mimir ruler + curated PrometheusRules + severity routing + inhibition + runbooks; Alertmanager → SNS/Slack/PagerDuty; K8s events→Loki; deploy annotations.

Track C — Cloud-resource observability (AWS)

Track D — Developer experience / APM

Track E — Reliability

Track F — Multi-cluster reach & economics

Track G — Tenancy & self-service

Ordering

Hard ordering: A → (B,C,D,E depend on the P2/P3 stores) → P10 spoke → P11–P14. D/E can slip after P10 if capacity is tight. Next up: P3 (#582).

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicUmbrella/tracking issue spanning multiple work itemsobservabilityObservability stack (#102)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions