Home > Blog > tech

Incident Management คืออะไร? สอนจัดการ Incident และ On-Call สำหรับ DevOps/SRE 2026

incident management oncall guide
Incident Management On-Call Guide 2026
2026-04-11 | tech | 3500 words

ไม่ว่าระบบจะถูกออกแบบมาดีแค่ไหน สักวันมันต้องล่ม ไม่มีระบบไหนที่ uptime 100% ได้ตลอดไป สิ่งที่แยกทีม engineering ที่ดีออกจากทีมธรรมดาคือวิธีที่พวกเขารับมือกับ incident เมื่อมันเกิดขึ้น ไม่ใช่แค่ว่าจะป้องกันมันได้อย่างไร

บทความนี้จะสอนทุกอย่างเกี่ยวกับ Incident Management ตั้งแต่พื้นฐานจนถึงการสร้างวัฒนธรรม Incident Response ในองค์กร ครอบคลุม Severity Levels, Incident Lifecycle, On-Call Rotation, Postmortem, Incident Metrics และเครื่องมือที่ใช้จริงในบริษัท tech ชั้นนำ เนื้อหาเหมาะสำหรับ DevOps, SRE, Backend Developer และ Engineering Manager ที่ต้องการสร้างระบบจัดการ incident ที่มีประสิทธิภาพ

Incident Management คืออะไร?

Incident Management คือกระบวนการตรวจจับ ตอบสนอง แก้ไข และเรียนรู้จากเหตุการณ์ที่ส่งผลกระทบต่อ service หรือระบบ โดยมีเป้าหมายหลักคือ:

Incident Management ไม่ใช่แค่เรื่องเทคนิค แต่เป็นทั้งกระบวนการ (process) วัฒนธรรม (culture) และเครื่องมือ (tooling) รวมกัน ทีมที่มีระบบ incident management ที่ดีจะสามารถรับมือกับปัญหาได้อย่างสงบ มีระบบ และมีประสิทธิภาพ แม้ในสถานการณ์ที่กดดันที่สุด

Severity Levels (SEV1-SEV4)

การแบ่งระดับความรุนแรงของ incident เป็นสิ่งแรกที่ต้องกำหนด เพราะจะส่งผลต่อวิธีการตอบสนองทั้งหมด:

Levelคำอธิบายตัวอย่างResponse Timeการตอบสนอง
SEV1 (Critical)ระบบล่มทั้งหมด ผู้ใช้ทุกคนได้รับผลกระทบDatabase ล่ม, Payment ใช้ไม่ได้< 5 นาทีทุกคนต้องมา, War Room
SEV2 (High)ฟีเจอร์หลักใช้ไม่ได้ ผู้ใช้จำนวนมากได้รับผลกระทบLogin ไม่ได้, Search ล่ม< 15 นาทีOn-call + escalation
SEV3 (Medium)ฟีเจอร์รองมีปัญหา ผู้ใช้บางส่วนได้รับผลกระทบExport ช้ามาก, Notification delay< 1 ชั่วโมงOn-call จัดการ
SEV4 (Low)ปัญหาเล็กน้อย ไม่กระทบผู้ใช้Log error เพิ่มขึ้น, Minor UI bug< 4 ชั่วโมงสร้าง ticket ติดตาม
หลักการ: ให้คนที่ตรวจพบ incident เป็นคนประกาศ severity เบื้องต้น อย่ากลัวที่จะประกาศ SEV1 ถ้าไม่แน่ใจ เพราะเราสามารถ downgrade ได้ทีหลัง แต่ถ้าไม่ประกาศเลยอาจเสียเวลาอันมีค่าไป

Incident Lifecycle — วงจรชีวิตของ Incident

ทุก incident ผ่าน lifecycle 5 ขั้นตอนหลัก:

1. Detect (ตรวจจับ)

วิธีตรวจจับ incident มีหลายช่องทาง:

2. Triage (ประเมินความรุนแรง)

เมื่อตรวจพบ incident ต้องประเมินทันที:

3. Mitigate (บรรเทา)

เป้าหมายคือหยุดผลกระทบให้เร็วที่สุด ไม่ใช่หา root cause:

4. Resolve (แก้ไข)

หลังบรรเทาแล้ว จึงหา root cause และแก้ไขอย่างถาวร:

5. Learn (เรียนรู้)

ขั้นตอนที่สำคัญที่สุดแต่มักถูกข้าม:

Incident Commander — ผู้นำในสถานการณ์วิกฤต

Incident Commander (IC) คือบุคคลที่รับผิดชอบในการประสานงานทั้งหมดระหว่าง incident มีหน้าที่หลักดังนี้:

# ตัวอย่าง Incident Commander Checklist

## เมื่อได้รับแจ้ง Incident
- [ ] ยืนยัน Severity Level
- [ ] เปิด War Room (Slack channel / Video call)
- [ ] ประกาศใน #incidents channel
- [ ] แต่งตั้งผู้รับผิดชอบ: Technical Lead, Communications Lead
- [ ] เริ่มบันทึก timeline

## ระหว่าง Incident
- [ ] อัปเดตทุก 15-30 นาที
- [ ] อัปเดต Status Page
- [ ] ตัดสินใจ: rollback? scale? failover?
- [ ] ป้องกันคนทำงานซ้ำซ้อน

## หลัง Incident
- [ ] ประกาศ Resolved
- [ ] กำหนดวันทำ Postmortem (ภายใน 48 ชม.)
- [ ] ขอบคุณทุกคนที่ช่วย
เทคนิค: IC ที่ดีไม่จำเป็นต้องเป็นคนเก่งที่สุดในทีม แต่ต้องเป็นคนที่สื่อสารชัดเจน ตัดสินใจเร็ว และอยู่สงบภายใต้ความกดดัน ทุกคนในทีมควรฝึกเป็น IC ผลัดกัน

การสื่อสารระหว่าง Incident

การสื่อสารที่ดีระหว่าง incident สำคัญพอๆ กับการแก้ไขปัญหาเอง:

ช่องทางการสื่อสาร

ตัวอย่าง Status Page Update

# Investigating (เริ่มต้น)
"เราตรวจพบปัญหาที่ส่งผลกระทบต่อ [ชื่อ service]
ทีมกำลังตรวจสอบสาเหตุ จะอัปเดตภายใน 30 นาที"

# Identified (ระบุสาเหตุ)
"สาเหตุคือ [อธิบายสั้นๆ] ทีมกำลังดำเนินการแก้ไข
ผลกระทบ: [อธิบายสิ่งที่ผู้ใช้เจอ]
เวลาที่คาดว่าจะแก้ไขเสร็จ: [เวลา]"

# Monitoring (แก้ไขแล้ว กำลังดู)
"เราได้ deploy fix แล้ว ขณะนี้กำลัง monitor ผล
service ควรกลับมาใช้งานได้ปกติ"

# Resolved (จบ)
"ปัญหาได้รับการแก้ไขเรียบร้อยแล้ว
สาเหตุ: [สรุป] ระยะเวลาที่ได้รับผลกระทบ: [X ชม.]
เราจะเผยแพร่ postmortem ภายใน 48 ชม."

On-Call Rotation — ระบบเวรรับแจ้งปัญหา

On-Call คือระบบที่มีคนรับผิดชอบตอบสนองต่อ alert ตลอด 24/7 โดยผลัดเปลี่ยนกัน:

โครงสร้าง On-Call

ออกแบบ On-Call Rotation

# ตัวอย่าง On-Call Schedule

## Week 1: (Mon 09:00 - Mon 09:00)
Primary:    Alice
Secondary:  Bob
Escalation: Charlie (EM)

## Week 2:
Primary:    Bob
Secondary:  Carol
Escalation: Charlie (EM)

## Week 3:
Primary:    Carol
Secondary:  Dave
Escalation: Charlie (EM)

## Week 4:
Primary:    Dave
Secondary:  Alice
Escalation: Charlie (EM)

## Rules:
- Rotation: Weekly (handoff วันจันทร์ 09:00)
- Response time: 5 min (SEV1), 15 min (SEV2), 1 hr (SEV3)
- Auto-escalate: หลัง 10 นาทีถ้า Primary ไม่ respond
- Override: สามารถ swap shift ได้ใน PagerDuty
- Business hours: SEV3/4 รอจัดการตอน office hours ได้

เครื่องมือ On-Call

เครื่องมือที่ช่วยจัดการ On-Call และ Alert:

เครื่องมือจุดเด่นราคาเหมาะกับ
PagerDutyมาตรฐานอุตสาหกรรม ครบทุกฟีเจอร์$21-41/user/moEnterprise, ทีมใหญ่
OpsGenie (Atlassian)เชื่อมต่อ Jira ได้ดี ราคาถูกกว่า$9-35/user/moทีมที่ใช้ Atlassian
Grafana OnCallOpen-source, เชื่อมต่อ Grafana ได้ดีFree (OSS)ทีมที่ใช้ Grafana Stack
incident.ioIncident lifecycle ครบ, Slack-nativeCustom pricingทีมที่ใช้ Slack เยอะ
RootlyAutomation ดีมาก, Slack-nativeCustom pricingทีมที่ต้องการ automation
Better StackUptime + On-call + Logging รวม$25/mo+Startup, ทีมเล็ก

ตัวอย่าง PagerDuty Integration

# Prometheus AlertManager → PagerDuty
# alertmanager.yml
route:
  receiver: 'pagerduty-critical'
  routes:
    - match:
        severity: critical
      receiver: 'pagerduty-critical'
    - match:
        severity: warning
      receiver: 'slack-warnings'

receivers:
  - name: 'pagerduty-critical'
    pagerduty_configs:
      - service_key: 'YOUR_PAGERDUTY_SERVICE_KEY'
        severity: critical
        description: '{{ .GroupLabels.alertname }}: {{ .CommonAnnotations.summary }}'

  - name: 'slack-warnings'
    slack_configs:
      - api_url: 'https://hooks.slack.com/services/xxx'
        channel: '#alerts-warning'
        title: '{{ .GroupLabels.alertname }}'
        text: '{{ .CommonAnnotations.description }}'

Runbooks และ Playbooks

Runbook คือเอกสารที่บอกขั้นตอนการแก้ไขปัญหาเฉพาะเรื่อง ช่วยให้คนที่ไม่คุ้นเคยกับระบบสามารถแก้ไขปัญหาได้:

# Runbook: Database Connection Pool Exhausted

## Symptoms
- Error: "too many connections" ใน application log
- Response time สูงขึ้นอย่างรวดเร็ว
- Alert: db_connection_pool_usage > 90%

## Impact
- ผู้ใช้ไม่สามารถใช้งาน feature ที่ต้อง query database
- Severity: SEV2

## Diagnosis
1. ตรวจสอบ connection count:
   SELECT count(*) FROM pg_stat_activity;

2. ดูว่ามี query ค้างหรือไม่:
   SELECT pid, now() - pg_stat_activity.query_start AS duration,
   query, state FROM pg_stat_activity
   WHERE state != 'idle' ORDER BY duration DESC;

3. ตรวจสอบ application logs:
   kubectl logs -f deployment/api-server | grep "connection"

## Mitigation
1. Kill long-running queries (ถ้ามี):
   SELECT pg_terminate_backend(pid)
   FROM pg_stat_activity
   WHERE duration > interval '5 minutes' AND state = 'active';

2. Restart application pods (ถ้ายังไม่หาย):
   kubectl rollout restart deployment/api-server

3. เพิ่ม connection pool size ชั่วคราว:
   kubectl set env deployment/api-server DB_POOL_SIZE=50

## Root Cause Investigation
- ตรวจสอบว่ามี deploy ใหม่หรือไม่
- มี traffic spike หรือไม่
- มี N+1 query ใหม่หรือไม่
- Connection leak จาก code ใหม่หรือไม่

## Prevention
- ตั้ง connection pool timeout ให้เหมาะสม
- ใช้ connection pooler เช่น PgBouncer
- Review query ทุก PR
Runbook ที่ดี: ต้องเขียนให้คนที่ไม่เคยเจอปัญหานี้สามารถทำตามได้ ไม่ต้องถามใคร ลองให้คนนอกทีมอ่านแล้ว feedback ว่าเข้าใจหรือไม่

Alerting Best Practices — Signal vs Noise

ปัญหาที่พบบ่อยที่สุดในระบบ alerting คือ alert fatigue ซึ่งเกิดจากการมี alert มากเกินไปจนคนเริ่มเพิกเฉย ต่อไปนี้คือหลักการออกแบบ alert ที่ดี:

หลักการ Alert ที่ดี

ตัวอย่าง Alert Hierarchy

# Alert ที่ควรส่ง PagerDuty (ปลุกคนกลางดึก)
- Service down (health check fail > 2 min)
- Error rate > 5% ต่อเนื่อง 5 นาที
- P99 latency > 5s ต่อเนื่อง 10 นาที
- Database replication lag > 30s
- Disk usage > 95%

# Alert ที่ควรส่ง Slack (ดูตอน office hours)
- Error rate > 1% ต่อเนื่อง 15 นาที
- Memory usage > 80%
- Certificate หมดอายุภายใน 7 วัน
- Deployment failed
- Backup failed

# Alert ที่ควรเป็น Dashboard เท่านั้น
- CPU usage (ดูเป็น trend)
- Request rate changes
- Cache hit ratio
- Queue depth (ถ้าไม่ผิดปกติมาก)

กฎง่ายๆ คือ ถ้า on-call ได้รับ alert แล้วไม่ต้องทำอะไร 3 ครั้งติดกัน ให้ลบ alert นั้นทิ้งหรือเปลี่ยนเป็น warning ที่ส่ง Slack แทน เป้าหมายคือ on-call ไม่ควรได้รับ alert เกิน 2-3 ครั้งต่อ shift ที่ต้องลุกมาทำจริง

Postmortem / Retrospective — เรียนรู้จาก Incident

Postmortem (หรือ Retrospective) คือเอกสารที่บันทึกสิ่งที่เกิดขึ้น สาเหตุ และแนวทางป้องกันไม่ให้เกิดซ้ำ โดยยึดหลัก Blameless Culture ซึ่งหมายความว่าเราโฟกัสที่ระบบและกระบวนการ ไม่ใช่ตำหนิตัวบุคคล

Blameless Culture

5 Whys Analysis

# ตัวอย่าง 5 Whys

ปัญหา: Website ล่ม 2 ชั่วโมง

Why 1: ทำไม website ล่ม?
→ เพราะ database server หยุดทำงาน

Why 2: ทำไม database หยุดทำงาน?
→ เพราะ disk เต็ม

Why 3: ทำไม disk เต็ม?
→ เพราะ log file โตขึ้นเรื่อยๆ ไม่มีการ rotate

Why 4: ทำไมไม่มี log rotation?
→ เพราะเมื่อ migrate database ไป server ใหม่ ลืม setup logrotate

Why 5: ทำไมลืม setup logrotate?
→ เพราะไม่มี checklist สำหรับ server provisioning

Root Cause: ขาด standard checklist สำหรับการ provision server ใหม่
Action Item: สร้าง automated provisioning script ที่รวม logrotate

Postmortem Template

# Postmortem: [ชื่อ Incident]
Date: [วันที่เกิด]
Duration: [ระยะเวลา]
Severity: [SEV level]
Authors: [คนเขียน]
Status: [Draft / Reviewed / Published]

## Summary
[สรุป 2-3 ประโยค ว่าเกิดอะไรขึ้น กระทบใคร นานเท่าไหร่]

## Impact
- Users affected: [จำนวน/เปอร์เซ็นต์]
- Revenue impact: [ถ้าวัดได้]
- Duration: [เวลาเริ่ม - เวลาจบ]
- Services affected: [list]

## Timeline (UTC+7)
- 14:00 — Alert: API error rate > 5%
- 14:03 — On-call (Alice) acknowledge alert
- 14:05 — ตรวจสอบ dashboard พบว่า DB connection สูงผิดปกติ
- 14:10 — เปิด War Room, ประกาศ SEV2
- 14:15 — พบว่า deploy ล่าสุดมี connection leak
- 14:20 — Rollback deployment
- 14:25 — Error rate กลับมาปกติ
- 14:30 — Monitor 15 นาที
- 14:45 — ประกาศ Resolved

## Root Cause
[อธิบายสาเหตุที่แท้จริง]

## What Went Well
- [สิ่งที่ทำได้ดี]
- [สิ่งที่ทำได้ดี]

## What Went Wrong
- [สิ่งที่ควรปรับปรุง]
- [สิ่งที่ควรปรับปรุง]

## Action Items
| Action | Owner | Priority | Due Date |
|--------|-------|----------|----------|
| เพิ่ม connection leak detection ใน CI | Alice | P1 | 2026-04-18 |
| เพิ่ม alert สำหรับ DB connection count | Bob | P2 | 2026-04-25 |
| Review deployment checklist | Carol | P2 | 2026-04-20 |

## Lessons Learned
[สิ่งที่ทีมเรียนรู้จาก incident นี้]

Incident Metrics — วัดผลการจัดการ Incident

ตัวชี้วัดที่สำคัญสำหรับการประเมินประสิทธิภาพของ incident management:

Metricชื่อเต็มคำอธิบายเป้าหมายที่ดี
MTTDMean Time To Detectเวลาเฉลี่ยตั้งแต่ปัญหาเกิด จนตรวจพบ< 5 นาที
MTTAMean Time To Acknowledgeเวลาเฉลี่ยตั้งแต่ alert จนมีคน acknowledge< 5 นาที
MTTRMean Time To Resolveเวลาเฉลี่ยตั้งแต่ตรวจพบ จนแก้ไขเสร็จ< 1 ชั่วโมง
MTTFMean Time To Failureเวลาเฉลี่ยระหว่าง incident แต่ละครั้งยิ่งนานยิ่งดี

การติดตาม metrics เหล่านี้ตลอดเวลาจะช่วยให้ทีมเห็นแนวโน้มว่าระบบ incident management กำลังดีขึ้นหรือแย่ลง ถ้า MTTR ลดลงเรื่อยๆ แสดงว่าทีมกำลังเก่งขึ้น ถ้า MTTF สั้นลง แสดงว่าระบบมีปัญหาซ่อนอยู่ที่ต้องจัดการ

# ตัวอย่างการคำนวณ
# MTTR = (เวลาที่ใช้แก้ incident ทั้งหมด) / (จำนวน incident)
# เช่น 3 incidents ใช้เวลา 30 min, 45 min, 15 min
# MTTR = (30 + 45 + 15) / 3 = 30 minutes

# สร้าง Dashboard ใน Grafana
# Track: incidents_total, incident_duration_seconds
# แยกตาม severity, team, service

Incident Automation — Auto-Remediation

ระบบ automation สามารถจัดการ incident บางประเภทได้โดยไม่ต้องมีคนมาดู:

# ตัวอย่าง Auto-remediation script

#!/bin/bash
# auto_restart_service.sh
# ถูกเรียกโดย PagerDuty webhook เมื่อ service health check fail

SERVICE_NAME=$1
MAX_RESTARTS=3
RESTART_COUNT=$(redis-cli GET "restart_count:$SERVICE_NAME" 2>/dev/null || echo 0)

if [ "$RESTART_COUNT" -lt "$MAX_RESTARTS" ]; then
    echo "Auto-restarting $SERVICE_NAME (attempt $((RESTART_COUNT + 1))/$MAX_RESTARTS)"
    kubectl rollout restart deployment/$SERVICE_NAME
    redis-cli INCR "restart_count:$SERVICE_NAME"
    redis-cli EXPIRE "restart_count:$SERVICE_NAME" 3600

    # รอ 60 วินาทีแล้วตรวจสอบ
    sleep 60
    if kubectl get deployment/$SERVICE_NAME -o jsonpath='{.status.readyReplicas}' | grep -q '[1-9]'; then
        echo "Service recovered automatically"
        # Resolve PagerDuty incident
        curl -X POST "https://events.pagerduty.com/v2/enqueue" \
          -H "Content-Type: application/json" \
          -d '{"routing_key":"SERVICE_KEY","event_action":"resolve","dedup_key":"'$SERVICE_NAME'"}'
    else
        echo "Auto-restart failed, escalating to human"
    fi
else
    echo "Max auto-restarts reached, escalating to human"
fi

สิ่งที่ควรทำ auto-remediation:

สิ่งที่ไม่ควรทำ auto-remediation:

Chaos Engineering — เตรียมพร้อมรับ Incident

Chaos Engineering คือการจงใจทำให้ระบบเกิดปัญหาในสภาพแวดล้อมที่ควบคุมได้ เพื่อทดสอบว่าระบบและทีมพร้อมรับมือหรือไม่:

Game Day — ซ้อมรับมือ Incident

Game Day คือการจำลอง incident เพื่อฝึกซ้อม เหมือนการซ้อมหนีไฟของอาคาร:

# ตัวอย่าง Game Day Scenario

## Scenario: Database Primary ล่ม
วัตถุประสงค์: ทดสอบว่าทีมสามารถ failover database ได้ภายใน 15 นาที

## ขั้นตอน
1. ประกาศว่าจะทำ Game Day (ทุกคนรู้ว่าเป็นการซ้อม)
2. จำลอง: ปิด database primary
3. ดูว่า:
   - Alert ส่งถูกคนหรือไม่
   - On-call respond เร็วแค่ไหน
   - ทีมหา runbook เจอหรือไม่
   - Failover สำเร็จหรือไม่
   - Communication ชัดเจนหรือไม่
4. Debrief: สรุปสิ่งที่เรียนรู้

## ผลลัพธ์ที่หวัง
- ทีมรู้ขั้นตอน failover
- Runbook ถูกต้องและเป็นปัจจุบัน
- Alert ทำงานถูกต้อง
- ทีมสามารถสื่อสารได้อย่างมีประสิทธิภาพ

On-Call Compensation และ Well-being

การทำ on-call เป็นภาระที่ส่งผลต่อคุณภาพชีวิตของวิศวกร องค์กรที่ดีควรดูแลคน on-call อย่างเหมาะสม:

การชดเชย

ดูแล Well-being

สัญญาณเตือน: ถ้าคน on-call ถูกปลุกกลางดึกมากกว่า 2 ครั้งต่อ shift หรือเริ่มมีคนไม่อยากอยู่ในทีมเพราะ on-call แสดงว่าต้องปรับปรุงระบบ alerting และ reliability ของ service อย่างเร่งด่วน

สร้างวัฒนธรรม Incident Response

การมีเครื่องมือและ process ที่ดีเป็นแค่ส่วนหนึ่ง สิ่งที่สำคัญที่สุดคือวัฒนธรรมของทีมและองค์กร:

องค์กรอย่าง Google, Netflix, Amazon ไม่ได้ประสบความสำเร็จเพราะไม่มี incident แต่เพราะพวกเขามีระบบจัดการ incident ที่เป็นเลิศ พวกเขาเรียนรู้จากทุก incident และทำให้ระบบแข็งแกร่งขึ้นเรื่อยๆ นี่คือสิ่งที่เรียกว่า antifragile คือยิ่งเจอปัญหา ยิ่งแข็งแกร่ง

สรุป

Incident Management ไม่ใช่แค่เรื่องเทคนิค แต่เป็นทักษะขององค์กรที่ต้องสร้างอย่างตั้งใจ เริ่มต้นจากการกำหนด severity levels ที่ชัดเจน สร้าง on-call rotation ที่ยุติธรรม เขียน runbook ที่ครบถ้วน ลด alert noise ให้เหลือเฉพาะสิ่งที่สำคัญ และที่สำคัญที่สุดคือสร้างวัฒนธรรม blameless ที่ทำให้ทีมกล้าเรียนรู้จากความผิดพลาด

ทุก incident คือโอกาสในการเรียนรู้ ระบบที่ดีที่สุดไม่ใช่ระบบที่ไม่มี incident แต่เป็นระบบที่จัดการ incident ได้รวดเร็ว เรียนรู้จากทุกครั้ง และไม่ทำผิดพลาดซ้ำ การลงทุนสร้างระบบ incident management ที่ดีจะคืนทุนหลายเท่าในระยะยาว ทั้งในแง่ความน่าเชื่อถือของ service ความพึงพอใจของผู้ใช้ และความสุขของทีมที่ทำ on-call


Back to Blog | iCafe Forex | SiamLanCard | Siam2R