Skip to content
Novus Examples
md2 KB

Incident Runbook — Checkout Latency SLO Burn (md)

The runbook the alerting rules link to, written as a real one would be: confirm, localise, mitigate, close out, with a symptom table pointing at the trace and profile fixtures in this category. A realistic document for testing runbook linting, link checking and documentation pipelines.

Preview — first 46 linesmd
# Runbook — CheckoutLatencySLOBurn

> Fixture runbook for the alerting rules in this category. Every host, dashboard
> and endpoint named here is invented; nothing in this document resolves.

**Alert:** `CheckoutLatencySLOBurn`
**Severity:** critical · **Team:** shop · **SLO:** `checkout-latency`
**Fires when:** p99 latency for `checkout-api` exceeds 1 s for 15 minutes.

## 1. Confirm the alert is real

1. Open the *Shop — Service Overview* dashboard (`shop-service-overview`) and check
   the **p99 latency** panel over the last 6 hours.
2. Confirm `up{job="shop-services"}` is 1 for every target. A partially scraped
   target produces a p99 computed from a fraction of the traffic.
3. Check the exemplars on the latency histogram. Each one carries a `trace_id`
   that opens the exact slow request.

## 2. Localise the latency

| Symptom | Likely cause | Next step |
|---|---|---|
| `payments-api` spans dominate the trace | Upstream PSP timeout | Check the payment provider status |
| `sql.(*DB).QueryContext` dominates the CPU profile | Query plan regression | Compare against the baseline profile |
| Latency rises with `service:http_requests:rate5m` | Capacity, not a defect | Scale out before investigating code |
| Only one instance is slow | Node problem | Cordon the node and drain |

## 3. Mitigate

- If a deploy correlates with the onset (see the **Deployments** annotation),
  roll back first and diagnose afterwards.
- If the payment provider is the cause, the circuit breaker should already be
  open; confirm `breaker.state` in the logs before manually disabling checkout.

## 4. Close out

- Record the burn against the 28-day budget from the error-budget export.
- If the budget is exhausted, feature work stops until it recovers.
- Add a regression test if the cause was a code change.

## Related fixtures

- `otlp-trace-error-exception-event` — a trace of the failure mode in step 2.
- `cpu-folded-stacks-before` / `cpu-folded-stacks-after` — the profile comparison.
- `slo-error-budget-burndown-csv` — the budget figures used in step 4.

Specifications

Headings
6
Table Rows
4
Ordered Steps
3
Linked Fixtures
3
Referenced Alert
CheckoutLatencySLOBurn
Everything Fictional
true

Testing contract

Reference control
Scenario
Run a documentation link checker and heading-structure linter over the file.
Expected result
Six headings nest correctly under one H1, the four-row symptom table parses as GFM, and every referenced fixture slug exists in this category.

What is a .md file?

Markdown (MD) is a lightweight plain-text markup language that uses simple punctuation conventions to denote headings, lists, links, emphasis, and code. It is designed to be readable as-is and to convert cleanly to HTML. It is widely used for documentation, READMEs, and content authoring.

How to use this file

Use an example Markdown file to test parsers and renderers, verify GitHub-Flavored Markdown extensions like tables and fenced code, and exercise HTML-conversion pipelines.

How to use this file for testing

“Incident Runbook — Checkout Latency SLO Burn (md)” is a deterministic Novus Examples fixture for Observability, Config testing, Templates. Structured and plain-text telemetry with known timestamps, levels, request identifiers, and error states for testing log ingestion, correlation, dashboards, and alert pipelines.

Documented properties for this file: MD · 2,077 bytes. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.

Telemetry fixtures use fixed trace IDs, span IDs, and timestamps so ingestion is reproducible run to run. Point your collector, parser, or query layer at the file and assert the documented span tree, metric families, or severity mix; service and host names are invented.

Code examples

import markdown  # pip install markdown

html = markdown.markdown(open("incident-runbook-checkout-latency.md").read())
print(html[:200])

Generated by generation/observability.py. Free for any use, no attribution required — license.