Post

Belajar SRE #4: Incident Management

Pelajari framework incident management untuk SRE: roles, war room procedures, escalation policies, dan koordinasi tim saat outage.

Belajar SRE #4: Incident Management

Incident management terstruktur adalah evolusi natural dari incident response dasar. Jika di level Foundation kita belajar “apa itu incident dan bagaimana merespons secara basic,” sekarang kita membangun sistem yang memastikan setiap incident ditangani dengan koordinasi yang jelas, roles yang terdefinisi, dan proses yang repeatable. Artikel ini membahas bagaimana membangun incident management framework, mulai dari mendefinisikan roles, merancang workflow, melakukan post-incident review, hingga setup war room yang produktif.

Jika Anda belum membaca artikel sebelumnya, mulai dari Foundation SRE: Pengantar Incident Response.

Prerequisites

Mengapa Incident Management Terstruktur?

Ketika organisasi bertumbuh dari satu monolith menjadi belasan microservices, incident response ad-hoc yang “cukup” di fase awal menjadi bottleneck yang berbahaya. Masalah yang dulunya bisa di-debug oleh satu orang di satu server sekarang melibatkan multiple services, multiple teams, dan multiple failure modes yang saling berkaitan.

Incident management terstruktur terdiri dari empat komponen utama:

KomponenDeskripsiMengapa Penting
Roles & ResponsibilitiesSiapa melakukan apa saat incidentMenghilangkan ambiguitas dan duplikasi effort
Incident WorkflowLangkah-langkah dari deteksi hingga resolusiMemastikan tidak ada step yang terlewat
Post-Incident ReviewProses belajar setelah incident selesaiMencegah incident yang sama terulang
War Room & CommunicationTempat dan cara koordinasi selama incidentMemastikan informasi mengalir dengan benar

Catatan: Tools seperti Rootly, incident.io, dan Grafana OnCall menyediakan incident management platform yang mengintegrasikan keempat komponen ini. PagerDuty dengan fitur AIOps-nya bisa meng-cluster related alerts dan menyarankan responders berdasarkan historical data.

Incident Commander & Roles

Incident Commander (IC)

Incident Commander adalah orang yang bertanggung jawab atas keseluruhan respons incident. IC bukan orang yang paling senior atau paling teknis, IC adalah orang yang mengkoordinasi semua aktivitas, membuat keputusan, dan memastikan incident bergerak menuju resolusi.

Tanggung jawab IC:

  • Memimpin war room dan menjaga fokus diskusi
  • Mendelegasikan tugas ke responders
  • Memastikan Comms Lead mengirim update regular
  • Menentukan severity level (dan upgrade/downgrade)
  • Memutuskan strategi mitigasi (rollback vs hotfix)
  • Menentukan kapan incident dinyatakan resolved

Yang BUKAN tugas IC:

  • Debugging code secara langsung
  • Menulis fix atau hotfix
  • Menjawab pertanyaan customer secara langsung

Incident Response Team Structure

flowchart TD
    IC[Incident Commander<br/>Koordinasi & Keputusan] --> CL[Comms Lead<br/>Stakeholder updates<br/>Status page<br/>Exec comms]
    IC --> OL[Operations Lead<br/>Eksekusi mitigasi<br/>Run runbooks<br/>Monitor recovery]
    IC --> SME[Subject Matter Experts<br/>Database<br/>Network<br/>App code<br/>Security]

Role Assignment Matrix

SME = Subject Matter Expert — engineer yang punya keahlian spesifik di area tertentu. Saat incident, IC memanggil SME yang relevan untuk bantu diagnosa masalah.

RoleSiapaKapan DibutuhkanBackup
Incident CommanderOn-call senior engineer atau rotationSemua SEV-1 dan SEV-2Secondary on-call
Communications LeadDesignated comms person atau rotationSEV-1 dan SEV-2IC doubles as Comms
Operations LeadOn-call engineer untuk service terdampakSemua severityPeer engineer
SME — DatabaseDBA atau database-savvy engineerJika database terlibatSenior backend engineer
SME — NetworkNetwork/infra engineerJika network terlibatCloud platform engineer
ScribeJunior engineer atau volunteerSEV-1 (recommended)IC atau Comms Lead

IC bukan role permanen — ini adalah rotation yang harus dilatih. Requirements untuk menjadi IC:

  • Completed incident response training module
  • Shadowed minimal 2 real incidents sebagai observer
  • Led minimal 1 incident drill/game day
  • Familiar dengan semua critical service runbooks

Incident Workflow

End-to-End Structured Workflow

flowchart LR
    A[DETECT<br/>Alert/Report] --> B[DECLARE<br/>Create incident<br/>Open channel]
    B --> C[TRIAGE<br/>Assess severity<br/>Scope impact]
    C --> D[MOBILIZE<br/>Assign IC<br/>Page team]
    D --> E[MITIGATE<br/>Stop bleeding<br/>Apply fix]
    E --> F[RESOLVE<br/>Verify fix<br/>Monitor 30min]
    F --> G[REVIEW<br/>Postmortem<br/>Action items]

Timeline targets:

PhaseTargetNotes
Detect → Declare< 5 minAutomated
Declare → Triage< 5 minIC assesses
Triage → Mobilize< 10 minPage responders
Mobilize → Mitigate< 30 min (SEV-1)Varies by complexity
Mitigate → Resolve< 30 minMonitoring period
Resolve → Review24-48 hoursSchedule postmortem

Automated Alert Routing

Deteksi harus se-otomatis mungkin. Dengan tools modern, alert bisa langsung di-route ke on-call engineer yang tepat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# grafana-oncall-integration.yml
routes:
  - name: "critical-alerts"
    filter:
      severity: "critical"
    escalation_chain: "sev1-chain"
    notify:
      - type: "slack"
        channel: "#incidents-critical"
      - type: "phone_call"
        to: "on-call-primary"

  - name: "warning-alerts"
    filter:
      severity: "warning"
    escalation_chain: "sev2-chain"
    notify:
      - type: "slack"
        channel: "#incidents-warning"
      - type: "sms"
        to: "on-call-primary"

escalation_chains:
  sev1-chain:
    - step: 1
      action: "notify"
      target: "on-call-primary"
      wait: "5m"
    - step: 2
      action: "notify"
      target: "on-call-secondary"
      wait: "10m"
    - step: 3
      action: "notify"
      target: "engineering-manager"
      wait: "15m"
    - step: 4
      action: "notify"
      target: "vp-engineering"

  sev2-chain:
    - step: 1
      action: "notify"
      target: "on-call-primary"
      wait: "15m"
    - step: 2
      action: "notify"
      target: "on-call-secondary"
      wait: "30m"
    - step: 3
      action: "notify"
      target: "engineering-manager"

Microservices Triage dengan Dependency Correlation

Di environment microservices, triage harus mempertimbangkan dependency chain. Ketika satu alert fire, periksa upstream dependencies, downstream dependencies, dan shared infrastructure untuk menemukan root cause yang sebenarnya.

flowchart TD
    A[Alert: payment-service error rate > 5%] --> B[Check Upstream]
    B --> C{api-gateway OK?<br/>auth-service OK?<br/>order-service?}
    C -->|order-service DEGRADED| D[Possible Root Cause]
    A --> E[Check Downstream]
    E --> F[notification-service QUEUED<br/>inventory-service SLOW]
    A --> G[Check Shared Infra]
    G --> H{Database HIGH LOAD<br/>Redis OK<br/>SQS OK}
    H --> I[Contributing Factor]
    D --> J[Assessment:<br/>Root cause = order-service slow queries<br/>Blast radius = payment, notification, inventory<br/>Severity = SEV-1]
    I --> J

Tip: OpenTelemetry (OTel) traces sangat membantu dalam triage microservices incidents. Dengan distributed tracing, Anda bisa melihat seluruh request path dan mengidentifikasi service mana yang menjadi bottleneck.

Mitigate, Resolve, Review

Setelah triage, IC mengarahkan tim untuk mitigasi. Prinsip utama: stop the bleeding first, debug later.

PhaseActionsTools
MitigateRollback, scale up, circuit break, redirect traffickubectl, Istio, Envoy, feature flags
ResolveVerify fix, monitor 30 min, confirm stableGrafana dashboards, OTel traces, synthetic checks
ReviewSchedule postmortem, collect timeline, assign action itemsincident.io, Rootly, Google Docs

Post-Incident Review

Post-incident review (PIR) — sering disebut postmortem — adalah proses terstruktur untuk belajar dari incident. Tujuannya bukan mencari siapa yang salah, tapi memahami apa yang terjadi dan bagaimana mencegah kejadian serupa.

Prinsip Blameless

Fokus pada sistem, bukan individu:

Blame (salah)Blameless (benar)
“X deploy tanpa testing”“Deployment pipeline tidak memiliki automated tests”
“Y tidak monitor dashboard”“Alert tidak ter-configure untuk scenario ini”
“Tim lambat merespons”“Escalation path tidak jelas, on-call tidak paged”

PIR Timeline

WaktuAktivitas
Incident resolved + 24 jamIC draft timeline
24-48 jamPIR meeting (30-60 menit)
48-72 jamPIR document finalized
1 mingguAction items assigned dan tracked
2-4 mingguAction items completed dan verified

5 Whys Analysis

Teknik 5 Whys membantu menemukan root cause yang sebenarnya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
INCIDENT: Payment service down selama 2 jam

Why 1: Mengapa payment service down?
→ Database connection pool exhausted

Why 2: Mengapa connection pool exhausted?
→ Slow query pada order-service menghold connections

Why 3: Mengapa ada slow query di order-service?
→ New feature deploy menambah query tanpa index

Why 4: Mengapa query tanpa index lolos ke production?
→ Tidak ada query performance review di CI/CD pipeline

Why 5: Mengapa tidak ada query performance review?
→ Belum ada automated database migration testing

ROOT CAUSE: Tidak ada automated testing untuk database
query performance di CI/CD pipeline

ACTION ITEMS:
1. Add query explain plan check di CI/CD (Owner: X)
2. Set connection pool monitoring alert (Owner: Y)
3. Add database load testing ke staging (Owner: Z)

PIR Meeting Agenda

WaktuAgendaFacilitator
0-5 minOpening: ground rules (blameless, fokus pada sistem)IC
5-15 minTimeline review: apa yang terjadi, kapanIC + Scribe
15-25 minRoot cause analysis: 5 WhysIC + SMEs
25-35 minWhat went well / what went wrongSemua peserta
35-50 minAction items: apa yang harus dilakukan, siapa, kapanIC
50-60 minWrap-up: review action items, next stepsIC

War Room Setup

Di era remote work, war room hampir selalu virtual. Tapi prinsipnya tetap sama: satu tempat terpusat untuk koordinasi incident.

Virtual War Room Structure

1
2
3
4
5
6
7
8
9
10
11
12
13
#incident-2025-01-15-payment-down
├── Pinned: Incident summary, severity, IC
├── Thread: Technical debugging
├── Thread: Communication updates
├── Thread: Timeline/scribe notes
└── Bot: Auto-updates dari monitoring

#incident-updates (public, read-mostly)
├── Status updates setiap 30 menit
└── Resolution notification

#incidents-log (archive)
└── Historical record semua incidents

War Room Etiquette

RuleMengapa
IC memimpin diskusiMenghindari chaos dan multiple conversations
Satu orang bicara pada satu waktuMenghindari informasi yang terlewat
Gunakan threads untuk detail teknisMenjaga main channel tetap clean
Update status setiap 15-30 menitStakeholders tahu progress tanpa bertanya
Semua keputusan di-announce di main channelSingle source of truth
Scribe mencatat semua keputusanUntuk postmortem dan audit trail

Hands-on: Incident Role Configuration

Contoh konfigurasi roles untuk incident management:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# incident-roles-config.yaml
organization:
  name: "Your Company"
  timezone: "Asia/Jakarta"

roles:
  incident_commander:
    description: "Koordinasi keseluruhan incident response"
    rotation: "weekly"
    roster:
      - name: "Engineer A"
        slack: "@engineer-a"
        phone: "+62-xxx-xxx-001"
      - name: "Engineer B"
        slack: "@engineer-b"
        phone: "+62-xxx-xxx-002"
      - name: "Engineer C"
        slack: "@engineer-c"
        phone: "+62-xxx-xxx-003"
    requirements:
      - "Completed IC training module"
      - "Shadowed 2+ real incidents"
      - "Led 1+ incident drill"
      - "Familiar with critical service runbooks"

  communications_lead:
    description: "Mengelola komunikasi ke stakeholders"
    rotation: "weekly"
    roster:
      - name: "Engineer D"
        slack: "@engineer-d"
      - name: "Engineer E"
        slack: "@engineer-e"

  operations_lead:
    description: "Eksekusi teknis mitigasi dan fix"
    assignment: "per-service-on-call"
    services:
      - service: "api-gateway"
        primary: "Engineer F"
        secondary: "Engineer G"
      - service: "payment-service"
        primary: "Engineer H"
        secondary: "Engineer I"

escalation_policy:
  sev1:
    - step: "IC + Ops Lead + Comms Lead"
      timeout: "immediate"
    - step: "Engineering Manager"
      timeout: "15 minutes"
    - step: "VP Engineering"
      timeout: "30 minutes"
    - step: "CTO"
      timeout: "1 hour"
  sev2:
    - step: "IC + Ops Lead"
      timeout: "immediate"
    - step: "Engineering Manager"
      timeout: "30 minutes"

Communication Templates

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
TEMPLATE 1: INCIDENT DECLARATION
INCIDENT DECLARED — [SEV-1/SEV-2/SEV-3]

ID: INC-YYYYMMDD-XXX
What: [Deskripsi singkat — 1 kalimat]
Impact: [Siapa terdampak, berapa banyak]
Status: Investigating
IC: [Nama] (@slack-handle)
War Room: #incident-YYYY-MM-DD-desc
Next Update: [Waktu]

TEMPLATE 2: STATUS UPDATE
INCIDENT UPDATE — [SEV-X] — [INC-ID]

Status: [Investigating | Identified | Mitigating | Monitoring]
What We Know: [Findings terbaru]
What We're Doing: [Current actions]
ETA: [Estimasi resolusi atau "Assessing"]
Next Update: [Waktu]

TEMPLATE 3: RESOLUTION
INCIDENT RESOLVED — [SEV-X] — [INC-ID]

Duration: [Total waktu]
Root Cause: [1-2 kalimat]
Resolution: [Apa yang dilakukan]
Impact: [User terdampak, duration]
Postmortem: [Jadwal]

Studi Kasus: TechStartup Indonesia

Konteks

TSI di fase Growth (2021 Q1) telah bermigrasi dari monolith ke 15 microservices di Amazon EKS. Dengan 35 developers dan 5 DevOps engineers, incident response ad-hoc yang dulu “cukup” menjadi sumber chaos.

Kondisi sebelumnya:

  • Cascading failures antar services membuat debugging menjadi nightmare
  • Tanpa roles yang jelas, setiap incident menjadi “semua orang panik bersama”
  • Tidak ada formal IC rotation atau escalation policy

Titik balik — “The Cascading Monday” (15 Maret 2021):

  • Inventory-service memory leak menyebabkan cascading failure ke 5 services lain
  • 2.5 jam downtime dan Rp 85 juta revenue loss
  • 5 engineers bekerja tanpa koordinasi

Apa yang Dilakukan

TSI membangun incident management terstruktur dalam 4-6 minggu:

  1. Definisi Roles & IC Training — Melatih 8 IC candidates dari berbagai tim (bukan hanya DevOps)
  2. Alert Routing — Implementasi Grafana OnCall + PagerDuty AIOps untuk automated routing
  3. Automated Incident Declaration — Slack bot untuk declare incident tanpa ambiguity
  4. Service Dependency Map — Mempercepat triage dengan visualisasi dependency antar services

Metrics Improvement

MetricSebelumSesudahPerubahan
Incidents/month1812-33%
MTTD (detect)15 min3 min-80%
MTTR (recover)2.5 hrs45 min-70%
Cascading failures40%15%-25pp
Repeat incidents35%10%-25pp
PIR completion rate20%95%+75pp

Hasil tambahan:

  • Revenue loss dari incidents turun 65% (Rp 85jt → Rp 30jt/bulan)
  • Customer complaints during incidents turun 70%
  • Engineer burnout (self-reported) turun 40%

Lessons Learned

Yang Berhasil:

  • IC rotation across teams — melatih backend engineers sebagai IC mengurangi bottleneck di DevOps team
  • Service dependency map — mempercepat triage dari 30 menit menjadi 5 menit
  • Automated incident declaration — menghilangkan “siapa yang declare?” ambiguity
  • PIR with action item tracking — 85% action items completed, repeat incidents turun 25pp
  • Grafana OnCall + PagerDuty AIOps — alert noise reduction 60%, grouping mengurangi volume 45%

Yang Perlu Dihindari:

  • Jangan buat IC role terlalu exclusive — TSI awalnya hanya DevOps, sekarang 8 orang dari berbagai tim
  • Jangan skip PIR karena “terlalu sibuk” — tanpa PIR, masalah yang sama akan terulang
  • Jangan over-engineer workflow — mulai simple, iterate berdasarkan feedback
  • Jangan lupa latihan — incident drills sama pentingnya dengan proses tertulis

Best Practices

  • Assign IC untuk setiap SEV-1/SEV-2 — IC memastikan koordinasi dan menghindari chaos
  • Train IC dari berbagai tim — mengurangi bottleneck dan meningkatkan cross-team understanding
  • Gunakan communication templates — konsistensi mengurangi cognitive load saat incident
  • Buat service dependency map — mempercepat triage dan mengidentifikasi blast radius
  • Lakukan PIR untuk setiap SEV-1/SEV-2 — learning dari incident mencegah recurrence
  • Run incident drills minimal 1x/quarter — practice makes perfect
  • Automate incident declaration — menghilangkan ambiguity dan mempercepat response

Selanjutnya

Artikel berikutnya: Intermediate SRE: Alerting Strategy — setelah membangun incident management terstruktur, langkah selanjutnya adalah mengurangi alert noise dan membangun alerting yang actionable.

Topik terkait yang bisa dieksplorasi:

  • Service Ownership — siapa yang bertanggung jawab ketika alert berbunyi?
  • Error Budget — menyeimbangkan reliability dan feature velocity
  • On-Call Best Practices — membangun sustainable on-call rotation

References


⬅️ Sebelumnya: Foundation SRE: Pengantar Incident Response

➡️ Selanjutnya: Intermediate SRE: Alerting Strategy

This post is licensed under CC BY 4.0 by the author.