The full picture
- SLOs first: per service, 2–4 user-journey SLIs (availability, latency p99) with error budgets — they define what's alert-worthy and end the 'CPU is 80%!' paging culture.
- Paved road:
acme-starter-observabilitywires Micrometer + OTLP + JSON logging + MDC correlation + standard tags (service, version, region). Observability by dependency, not by per-team diligence. - Alert taxonomy: page on burn rate (fast+slow windows), ticket on trends (cert expiry, disk), dashboard the rest. Every page must be actionable — an alert nobody acts on is deleted or demoted.
- Correlation contract: trace id in every log line, exemplars linking metrics→traces, deploy markers on dashboards — the 3am path is metric alert → trace → logs in three clicks.
- Cost levers: tail-sampled traces (keep errors/slow), log retention tiers (7d hot / 90d cold), cardinality linting in CI, and per-team showback — visibility of spend changes behavior.
| Question | Signal | Owner artifact |
|---|---|---|
| Is it broken for users? | SLO burn-rate alerts | SLO definitions per service |
| Where is it broken? | RED dashboards + service map | Standard Grafana folder per service |
| Why is it broken? | Traces + logs + continuous profiling | Correlation via trace id everywhere |
| Did the deploy do it? | Deploy markers + version tag on all signals | CD pipeline annotations |