Home › DevOps › CDN Incident Management Runbook
DevOps

CDN Incident Management Runbook: Detection, Triage, and Resolution

By Emma Rodriguez, Cloud Infrastructure Specialist September 10, 2026 9 min read

A CDN failure is never just a performance dip — it is a global user-facing outage. When edge nodes serve stale content, TLS handshakes fail, or cache poisoning spreads in seconds, every second of confusion adds to MTTR. This runbook gives DevOps and SRE teams a prescriptive, battle-tested workflow for detection, triage, and resolution.

Runbook Principle: Mitigate first, diagnose second. Your primary goal during an incident is to restore service via the safest, fastest path — not to find the perfect root cause. Investigation follows stabilization.

1. Detection: Know Before Your Users Do

Effective detection relies on layered observability. Relying on a single uptime check from one region guarantees blind spots. A mature CDN monitoring stack correlates four signal types: synthetic monitoring, Real User Monitoring (RUM), edge logs, and origin health.

Your alerting should be tied to Service Level Indicators (SLIs) that reflect user experience, not just infrastructure health. For a deeper dive into which metrics matter, review our guide to CDN monitoring and observability and the core CDN performance metrics every team should track.

Key SLIs and Alert Thresholds

Configure alerts on burn rate, not absolute values, to avoid alert fatigue. Example thresholds for a 99.9% availability SLO:

Instrument both edge and origin independently. A synthetic check that bypasses the CDN (direct-to-origin via hosts override) is critical for isolation.

# Prometheus alerting rule for CDN edge errors
groups:
  - name: cdn.slo
    rules:
      - alert: CDNHigh5xxBurnRate
        expr: |
          sum(rate(cdn_edge_responses_total{status=~"5.."}[5m]))
          /
          sum(rate(cdn_edge_responses_total[5m])) > 0.005
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "CDN 5xx burn rate exceeded 0.5% for 5m"
          runbook: "https://flyfishnwa.com/cdn-incident-management-runbook#triage"

Detection Checklist (First 3 Minutes)

  1. Acknowledge alert in PagerDuty/Opsgenie — stop escalation.
  2. Open incident channel (#inc-cdn-YYYY-MM-DD) and create status page draft.
  3. Validate alert: check 2+ PoPs, RUM, and curl -I from external vantage point.
  4. Assign roles: Incident Commander (IC), Communications Lead, and Ops Lead.

2. Triage: Classify, Isolate, and Communicate

Triage is about answering three questions fast: How bad is it? How wide is it? Is it CDN or origin? Use a severity matrix to force consistent decisions under pressure.

Performance Comparison: Edge vs Origin Processing
Metric Edge Processing Origin Processing Improvement
Latency (p50)8–15 ms120–300 ms15–20x faster
Cache Hit Ratio85–95%N/AReduces origin load
TLS Handshake1–5 ms (nearby PoP)50–150 ms10–30x faster
Bandwidth Cost$0.01–0.04/GB$0.05–0.12/GB3–5x cheaper
Availability99.99% (multi-PoP)99.9% (single DC)10x fewer outages
Severity Definition Example Response Target
SEV1 Critical Global outage, >30% error rate or complete cache failure TLS cert expired globally, poisoned cache serving 500s MTTA <5 min, all-hands, exec notification
SEV2 Major Regional degradation, 5-30% errors or 2x latency Single PoP outage (e.g., Ashburn), WAF false positive blocking checkout MTTA <15 min, on-call + CDN vendor support
SEV3 Minor Limited impact, <5% errors, workaround available Image optimization failure, stale content for non-critical asset MTTA <30 min, ticketed response
SEV4 Low No user impact, risk or early warning Hit ratio drift, certificate expiring in 14 days Next business day

Isolation Framework

Run these three tests in parallel to isolate the layer:

During triage, freeze non-emergency deploys and config changes. Post initial status update within 10 minutes for SEV1/SEV2: “Investigating elevated 5xx in NA-East, 12% error rate, mitigation in progress. Next update in 15 min.”

3. Resolution: Mitigation Playbooks

Have pre-approved, reversible mitigations. The IC should be able to execute without waiting for change approval. Document the exact command, expected impact, and rollback for each.

Playbook A: Bad Cache / Poisoned Object

Symptoms: HITs return 500/502, MISSes succeed, hit ratio normal but error ratio high. Often caused by origin briefly sending bad headers (e.g., Cache-Control: max-age=86400 on an error page).

# Fastly / Cloudflare / Akamai purge examples - choose one
# Cloudflare: purge by URL (preferred over purge-all)
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"files":["https://www.example.com/checkout/*"]}'

# Verify purge propagation
for pop in iad ord lhr nrt; do
  curl -sI -H "CF-IPCountry: US" https://www.example.com/checkout/ | grep -i "cf-cache-status"
done

Mitigation: Purge by surrogate key or URL prefix, not full purge-all unless global poisoning confirmed. Set Cache-Control: no-store at origin temporarily to prevent re-caching bad response. For image or asset issues, also consider purging the CDN image optimization tier separately.

Playbook B: Configuration / WAF / TLS Failure

Symptoms: All PoPs return 403/503, WAF challenge loop, or TLS handshake failures after a recent rule or cert deployment. Check vendor status page and recent audit log.

Playbook C: Origin Overload After Cache Bypass

Symptoms: Origin latency spikes, 502 Bad Gateway from edge, autoscaling lag. Often triggered by a purge-all or failover.

Playbook D: PoP or Vendor Outage

Symptoms: Single region latency/errors, vendor status page confirms incident. Mitigation: Drain PoP via DNS or load balancer weighting, or fail over to secondary CDN if multi-CDN is configured. For multi-CDN, shift traffic via 20% increments with health checks.

Verification: After any mitigation, validate with 3 signals: synthetic checks green for 5 minutes, RUM p95 recovered to baseline, and edge error rate <0.1%. Keep incident open for 30 minutes of stable metrics before declaring resolved.

4. Communication and Post-Incident Learning

Incident communication is not optional. Assign a Communications Lead who is not the IC. Update internal stakeholders every 15 minutes for SEV1, every 30 minutes for SEV2, and customers via status page every 30 minutes. Use a consistent template: Impact, Scope, Mitigation, ETA.

Once resolved, schedule a blameless postmortem within 48 hours. The goal is not to assign fault but to identify systemic fixes. A strong postmortem answers:

Convert every action item into a ticket with an owner and SLO (e.g., “Add canary deployment for CDN config — Owner: Platform Team — Due: 14 days”). Track completion in your incident review meeting. Update this runbook with learnings — a runbook that never changes is a runbook that is not being used.

Finally, run game days. Simulate a poisoned cache or PoP failure quarterly. Test your purge scripts, rollback permissions, and multi-CDN failover when no customers are impacted, so they work when they are.

Frequently Asked Questions

What is the first step when a CDN incident is detected?

Acknowledge the alert, validate it against synthetic checks, RUM, and origin health, and declare the incident with an initial severity. Create an incident channel and assign an Incident Commander immediately to avoid uncoordinated fixes.

How do you differentiate a CDN issue from an origin failure?

Compare edge vs origin metrics. If hit ratio drops and origin 5xx spikes, the origin is failing. If HITs return errors while direct-to-origin succeeds and origin metrics are healthy, the fault is at the CDN layer — often a config, certificate, or PoP issue.

When should you fail over or bypass the CDN?

Only for SEV1 global errors exceeding 10-15% or widespread poisoned cache. Prefer targeted fixes like purge, config rollback, or PoP drain first. Bypassing removes DDoS protection and surges origin load, so coordinate autoscaling before failing over.

What should a CDN postmortem include?

Timeline, quantified impact, root cause via 5 Whys, detection and response gaps, MTTA/MTTR, and prioritized action items with owners and due dates. Share it org-wide within 5 business days and link it to dashboards and runbook updates.

Last updated: September 10, 2026 · Reviewed by FlyFish NWA SRE Team · Next review: December 10, 2026

References & Standards: Cloudflare documentation · HTTP/2 specification