Part 8 · Observability

Monitoring, Alerting & Blameless Postmortems

Sixty alerts a week, fifty-five that don't matter — so the real one gets snoozed and customers can't pay for two hours. How to build dashboards and alerts people trust, run incidents with clear roles, and write blameless postmortems that actually make the system better.

Lesson 488 min readintermediate#sre#monitoring

On this page

  1. The Problem
  2. The Core Idea
  3. How It Works
  4. Trade-offs
  5. In the Real World
  6. Interview Questions
  7. Key Takeaways
  8. Further Reading

The Problem

It is 3:12 AM. The on-call engineer's phone buzzes. (On-call means it is this person's turn to respond to problems outside work hours.) The alert says: "CPU > 80% on db-3." They wake up, log in, and find… nothing wrong. Users are fine. It was only a nightly batch job (a task that runs by itself at night). An alert is an automatic message that tells people something may be wrong. At 3:40 AM: "Disk 75% on worker-12." Also fine. By the end of the week they've had 60 alerts, and 55 of them didn't matter.

So on Friday night, when a real alert fires ("checkout errors 12%"), it gets snoozed (ignored for a while) with all the others. Customers can't pay for two hours.

Afterwards, a manager asks, "Whose fault was this?" The engineer who snoozed the alert gets blamed. From then on, people start hiding their mistakes instead of reporting them.

Three things turn observability data (posts 46–47) into a system that really gets more reliable over time: good monitoring, good alerts and a healthy way to learn from incidents. An incident is any unplanned event that hurts users.

The Core Idea

Alerting is like a smoke alarm.

  • A good smoke alarm goes off when there's real danger and you need to act now.
  • A smoke alarm that goes off every time you make toast gets its battery removed, and then it's silent during a real fire.

Postmortems are like how aviation handles incidents. When something goes wrong with a plane, investigators don't just ask "which pilot messed up?". They ask: what in the system allowed this to happen, and how do we stop it happening to anyone again? Pilots are encouraged to report near-misses (events that almost caused harm) without fear of punishment. This culture is a big reason why flying is so safe.

How It Works

Part 1: Monitoring and dashboards

Monitoring means you keep collecting and watching signals (metrics, logs and traces, post 46) to know how healthy your system is. A dashboard is one screen of graphs that shows these signals.

Useful dashboards, from the top down (start with the user, end with the machines):

  1. User-journey / SLO dashboard: are users OK? SLIs, error budgets and burn rates for login, search, checkout and so on (post 47).
  2. Service overview: for each service, the golden signals (latency as the median and p99, traffic, errors, saturation), plus deploy markers. A deploy marker is a line on the graph that shows when a new version went out.
  3. Dependency dashboards: databases, caches, queues and third-party APIs. For a queue, lag means how far behind the readers are. Depth means how many messages are waiting.
  4. Infrastructure: nodes, containers, CPU, memory, disks and networks (the USE method).

Design dashboards so an on-call engineer can go from "users are affected" to "it's this service" to "it's this dependency" in a few clicks.

Other monitoring types:

  • Synthetic monitoring: scripted "robot users" that log in, search and check out every minute from several places. They find problems even when real traffic is low, like at night.
  • Real User Monitoring (RUM): measures what real users' browsers and apps experience. It collects page load times, JavaScript errors and crash rates, split by device, country and network.
  • Heartbeat / "dead man's switch" monitoring: you get an alert when an expected signal stops. For example, a nightly backup job did not report success (post 45). Here, silence is the warning.

Part 2: Alerting that people trust

  1. 1
    Urgent?
    it needs action now, not tomorrow morning
  2. 2
    Actionable?
    there is something a human can actually do (and a runbook says what)
  3. 3
    User-impacting?
    real or imminent pain for users
  4. 4
    Passes all three
    page, with a runbook link
  5. 5
    Otherwise
    a ticket, a dashboard panel — or delete it
Three tests for every page. Fail any one and it isn't a page. · flow

An alert that wakes someone up is called a page. Every page should pass three tests:

  1. Urgent: it needs action now, not tomorrow morning.
  2. Actionable: there's something a human can actually do.
  3. User-impacting (or about to be): it reflects real or imminent pain for users.

If an alert fails any test, it should be a ticket (a task handled during work hours), a dashboard item, or it should be deleted.

Alert on symptoms, investigate causes. A symptom is what users feel (errors, slowness). A cause is the reason inside the system (high CPU, a full disk).

❌ Cause-based page✅ Symptom-based page
"CPU > 80% on db-3""Checkout error budget burning at 14× (1h/5m)"
"Pod restarted""Login success rate below SLO"
"Disk 75% on worker-12""Search p99 latency > 1 s for 10 minutes"
"Queue has 1,000 messages""OTP messages older than 2 minutes"

High CPU is only a problem if it hurts users. Put causes on dashboards for investigation, and page on symptoms, ideally SLO burn rates (post 47).

Some cause-based alerts are still worth having, especially predictive ones. A predictive alert looks ahead, for example "disk will be full in 4 hours at the current rate" or "certificate expires in 7 days". These should usually be tickets, not 3 AM pages, unless the deadline is very close.

Every alert needs a runbook. A runbook is a short written guide that tells the on-call person what to do. It explains what the alert means, how to check the impact, the common causes, and the steps to reduce the harm (mitigation). Mitigation steps include rollback, failover, scale up and a kill switch. These are explained in Part 3. With a runbook, anyone on call can respond, not only the expert.

Fighting alert fatigue. Alert fatigue means people get so many alerts that they stop paying attention to them. Here is how to fight it:

  • Review alerts regularly: "Which alerts fired? Were they useful? Did anyone act?" Delete or fix noisy ones.
  • Group and de-duplicate: one incident shouldn't produce 200 separate pages. Tools like Prometheus Alertmanager or PagerDuty group related alerts. (PagerDuty is a service that sends alerts to the on-call person's phone.)
  • Use sensible durations: alert only when the problem lasts "for 5 minutes", not on a single data point.
  • Route to the right team, based on service ownership.
  • Track pages per on-call shift. A common goal is no more than a couple of pages per shift, so each one gets full attention.

On-call practices:

  • Rotations (weekly is common) with a primary and a secondary engineer.
  • Escalation policies: these are rules for who gets paged next. For example, if the primary does not acknowledge (reply to) the page within 5 minutes, page the secondary, then the manager.
  • Handoffs between shifts: the outgoing person tells the next person about ongoing issues and recent changes.
  • A sustainable load: compensate on-call time, and make fixing noisy alerts part of the job.

Part 3: Incident response

An incident is any unplanned event that hurts (or threatens) users or the business. A clear process keeps people calm and organised.

The lifecycle:

  1. 1
    Detect
    an SLO alert, a synthetic check, or a user report
  2. 2
    Triage
    how bad (SEV1–3)? who's needed? declare an Incident Commander
  3. 3
    Mitigate
    roll back, fail over, scale, shed load, flip a kill switch — fast
  4. 4
    Resolve
    fix the underlying cause
  5. 5
    Learn
    blameless postmortem with owned, tracked action items
The incident lifecycle. Reduce the harm first; understand the cause second. · flow

Severity levels (SEV) say how serious an incident is, so people know how fast to act. For example:

  • SEV1: major outage. Many users cannot use a core feature (like payments). Everyone helps, and you tell the public.
  • SEV2: significant degradation or a partial outage.
  • SEV3: minor impact, with a workaround available.

Clear roles help in larger incidents. They come from the way emergency services run their incidents:

  • Incident Commander (IC): leads the response, makes decisions and keeps the big picture. The IC does not debug (look for the bug).
  • Operations / subject-matter experts: investigate and apply fixes.
  • Communications lead: updates the status page, customer support and leadership at regular intervals.
  • Scribe: writes a timeline of what was seen, tried and decided. This is very useful for the postmortem.

Mitigate first, investigate later. The first goal is to stop user pain, even before you know the root cause. Common quick mitigations:

  • roll back the latest deploy. This means going back to the previous version. It is the most common fix, because most incidents follow a change,
  • fail over to another zone or region. This means switching traffic to a healthy copy of the system (post 40),
  • scale up (add more servers), or shed load (refuse some requests on purpose so the rest still work) (post 44),
  • flip a feature flag / kill switch. A feature flag is a setting that turns a feature on or off without a new release. A kill switch is a flag for turning a feature off fast (post 44),
  • block abusive traffic (post 43).

Root-cause analysis can happen once users are safe.

Part 4: Blameless postmortems

After a serious incident, write a postmortem. A postmortem is a written review of what happened, why, and what to change. It is also called an incident review or retrospective. The goal is learning, not punishment.

Why blameless? Almost every incident involves a human action. Someone deployed, someone ran a command, or someone missed an alert. But if people are punished for mistakes:

  • they hide mistakes and near-misses,
  • the real system problems (missing safeguards, confusing tools, noisy alerts, time pressure) never get fixed,
  • the same incident happens again with a different person.

A blameless postmortem assumes people acted reasonably with the information and tools they had, and asks how the system made the mistake easy and the impact large.

❌ Blame
  • −“Ravi ran the wrong command and deleted the table.”
  • −Lesson learned: be more careful (nothing changes)
  • −Next time, people hide mistakes
✅ Blameless
  • +Prod (the live system) accepted a destructive command from a manual session with no confirmation
  • +The script targeted prod by default
  • +Backups hadn't been restore-tested in 6 months
  • +Each becomes an action item with an owner
The same incident, written two ways. · compare

A postmortem usually has a timeline like this:

  1. 19:02
    deploy v2027.03.12-3 starts — canary stage (a small first release) skipped
  2. 19:04
    checkout error rate rises to 18%
  3. 19:06
    SLO burn-rate alert pages on-call
  4. 19:15
    alert acknowledged — on-call was busy with a noisy disk alert
  5. 19:40
    SEV1 declared, Incident Commander assigned
  6. 20:55
    rollback completed
  7. 21:10
    error rate back to normal
The postmortem's timeline, reconstructed from the scribe's notes. · timeline

Good postmortem habits:

  • Look for contributing factors, in the plural. Complex failures rarely have one "root cause" (the single main reason). Safety engineers often use the "Swiss cheese" model. Each layer of defence is a slice of cheese with holes. An incident happens when the holes in several slices line up.
  • "5 whys" means asking "why?" again and again. It helps you dig deeper. Do not stop at "human error". Keep asking why the system allowed it.
  • Include what went well, so you keep doing it.
  • Action items must be specific, owned and tracked until done. A postmortem whose actions nobody tracks is just a story.
  • Share widely, internally and sometimes publicly. Other teams learn too.
  • Review near-misses as well. They are free lessons.

Trade-offs

  • More alerts: you catch more problems, but alert fatigue means you miss the important ones. Fewer, symptom-based alerts give higher trust, though some early warning signs may only appear on dashboards.
  • Page vs ticket: paging gets a fast response but costs people's sleep and health. Reserve pages for urgent, user-impacting issues.
  • Formal incident process: clear coordination for big incidents, but overhead for small ones. Scale the process to the severity.
  • Detailed postmortems: deep learning, but they take time. Write them for significant incidents and useful near-misses, not every blip.
  • Public postmortems: build customer trust and share industry knowledge, but need care with sensitive details.

In the Real World

Etsy and blameless culture. John Allspaw's 2012 post "Blameless PostMortems and a Just Culture", written while he was at Etsy, helped spread the idea through the tech industry. Engineers were encouraged to give detailed accounts of their actions without fear of punishment, so the company could fix the underlying systems.

Google's postmortem culture. Google's SRE book has a full chapter on postmortem culture. It describes blameless write-ups, shared postmortem repositories, and even "postmortem of the month" reading clubs, so lessons spread across teams.

Public postmortems. Companies like Cloudflare, GitHub, GitLab and AWS publish detailed public incident reports. Cloudflare's 2019 write-up is about a single regular expression (a text-matching pattern) that pushed CPU to 100% across its global network for about half an hour. It explained exactly what happened and what changed afterwards. These reports are some of the best free learning material in the industry. (The GitHub collection "danluu/post-mortems" gathers hundreds of them.)

Knight Capital (2012). A trading firm deployed new software to its servers, but one of eight servers was missed. A reused configuration flag then switched on old, unused code on that server. In about 45 minutes, automated trading caused losses of about $440 million (the company's own figure). The company never recovered as an independent firm. It later merged with another firm. It's often studied as a lesson in deployment safety, monitoring, runbooks and incident response, far more than as one person's error.

Incident command in tech. PagerDuty's open incident-response documentation (based on the incident command used by emergency services) is widely used by companies to define roles like Incident Commander, scribe and communications lead.

Interview Questions

Q1What makes a good alert?

It's urgent, actionable and tied to user impact — ideally an SLO burn-rate alert — with a runbook explaining what it means and how to mitigate. Anything that fails those tests belongs on a dashboard or in a ticket queue.

Q2Why alert on symptoms rather than causes?

Causes like high CPU or a pod restart often don't hurt users, so paging on them creates noise and alert fatigue. Symptoms like error rate, latency and burned error budget describe what users feel. Keep causes on dashboards for investigation, plus a few predictive tickets (disk full in 4 hours, certificate expiring).

Q3What are the roles in incident response?

An Incident Commander who coordinates and decides but doesn't debug; subject-matter experts who investigate and fix; a communications lead who updates the status page, support and leadership; and a scribe who records the timeline.

Q4What's the first priority in an incident?

Mitigate user impact — roll back the last change, fail over, scale, shed load or flip a feature flag — even before the root cause is known. Investigation continues once users are safe.

Q5Why should postmortems be blameless?

Punishing individuals makes people hide mistakes and near-misses, so the system weaknesses that made the error easy and its impact large never get fixed. Blameless reviews assume people acted reasonably with what they had, and look for contributing factors and concrete, owned fixes.

Q6What belongs in a postmortem?

Impact and duration, a timeline, contributing factors (usually several), what went well, and specific action items with owners and due dates that are tracked to completion — then share it widely.

Key Takeaways

  • Monitor from the user down: SLO dashboards → service golden signals → dependencies → infrastructure, plus synthetic checks, RUM and heartbeat monitors.
  • Page only for urgent, actionable, user-impacting problems. Alert on symptoms (SLO burn rates), not causes, and give every alert a runbook.
  • Fight alert fatigue: review, delete or fix noisy alerts, group duplicates, and keep on-call sustainable.
  • In incidents: clear roles (Incident Commander, experts, comms, scribe), severity levels, and mitigate first (roll back, fail over, shed load, flip flags).
  • Run blameless postmortems that look for contributing factors, record what went well, and produce owned, tracked action items. Share them widely.

Further Reading

  • Site Reliability Engineering by Google (chapters "Monitoring Distributed Systems", "Managing Incidents" and "Postmortem Culture: Learning from Failure")
  • The Site Reliability Workbook by Google (chapter "Monitoring")
  • Rob Ewaschuk's document "My Philosophy on Alerting" (a widely shared Google SRE essay)
  • PagerDuty's open-source Incident Response and Postmortem guides
  • Atlassian's incident management and postmortem guides
  • John Allspaw's article "Blameless PostMortems and a Just Culture"
  • The "post-mortems" collection on GitHub by Dan Luu

This wraps up Part 8. Next up, Part 9: Security for System Designers, starting with "Authentication vs Authorization: Sessions, Cookies & JWT".

Published by Jainik · Last updated · How these lessons are made

Keep learning

Related series