- Alert: Something triggered (Alertmanager, PagerDuty, Slack, or a custom report). It tells you which metric crossed a threshold and when.

- Assess: Before you touch anything, spend a short, focused time (aim ~60 seconds) to understand the scope: how bad it is, who is affected, and whether it’s partial or total.

Spend a minute to assess before you act. Skipping assess is the most common cause of wasted time and harmful changes.
- Investigate: Dig into the root cause in a focused, methodical order: metrics first, then traces, then logs. Follow a triage workflow to narrow scope gradually.

- Fix: Apply the minimum-change necessary to restore service: rollback, scale up, adjust configuration, or restart. Prefer a reversible, conservative change that buys time to investigate further.

- Validate: Don’t close the incident until you confirm the fix worked. Watch dashboards and verify stability for a few minutes.
- Alertmanager, PagerDuty, Slack — alerts and notification (Alert, Validate)
- Grafana — dashboards and runbooks (Assess, Validate)
- Prometheus — metrics and PromQL (Investigate)
- Jaeger — distributed traces (Investigate)
- Loki / kubectl logs — logs and pod-level details (Investigate)
- kubectl, GitOps, Helm — apply safe, reversible fixes (Fix)
- What’s broken? Read the alert and identify the affected service, endpoint, or pod.
- How bad is it? Is the outage partial (a single endpoint or region) or total?
- Who’s affected? One customer, a region, or everyone?
- What changed recently? A deployment or config change within the alert window is a prime suspect.
- Metrics first: Inspect the alert’s PromQL expression and open Grafana. Confirm the alert timestamps, pattern (sudden vs gradual), and compare to baseline (same time yesterday, same weekday).
- Traces next: Search Jaeger for slow or error traces. Use minimal-duration filters, inspect the waterfall, and find the longest-duration span or failing service.
- Logs last: Query logs by service and timestamp, or by trace ID to pinpoint the exact error message.


- Rollback
- When to use: a recent deployment caused the incident and assessment/investigation confirm it.
- Why: fastest, lowest-risk path to restore service.
- Example:
- Scale up
- When to use: load exceeds capacity (CPU/memory/requests throttled) and you need breathing room.
- Why: buys time to investigate whether load is legitimate or anomalous.
- Example:
- Config fixes
- When to use: misconfigured DB URL, expired secret, or bad environment variable.
- How: update ConfigMap/Secret and trigger a restart or rolling update.
- Example:
- Resource adjustments (scheduling failures)
- When to use: pods Pending because nodes lack allocatable resources.
- How: free resources, tune requests/limits, or adjust quotas for targeted workloads.
- Note: avoid broad, cluster-wide changes during an active incident; prefer targeted, minimal changes.
During an incident prefer reversible, minimal changes. Large, unreviewed edits or cluster-wide operations increase risk and can create cascading failures.
Key takeaways
- Follow the playbook every time: Alert → Assess → Investigate → Fix → Validate.
- Never skip the Assess phase; the 60-second check prevents wasted effort.
- Use the three observability pillars as a funnel: metrics detect, traces locate, logs explain.
- Prefer minimal, reversible fixes that restore service quickly and enable deeper post-incident investigation.
- Track DORA metrics to measure platform health and quantify improvements to MTTR.