SRE Incident Response Ký Sự Đêm Khuya 02/06/2026 ~7 phút đọc

Ký Sự Đêm Giao Thừa:
Khi Tâm Ma Thức Giấc Lúc 2 Giờ Sáng

Khi pháo hoa vừa dứt, vạn vật chìm vào tĩnh mịch — chiếc "truyền tin thạch" bỗng rung lên bần bật. Một thông điệp đỏ rực hiện lên: "Hộ Tông Trận Pháp sụp đổ — Production is Down!"

02:03 — Tiếng Chuông Xé Màn Đêm
ALERT — CRITICAL — PRODUCTION DOWN
[02:03:17] 🔴 CRITICAL — Service "linh-bao-app" health check FAILED (5/5)
[02:03:18] 🔴 ERROR — Database connection pool exhausted (max: 100/100)
[02:03:19] 🟡 WARN — Response time P99: 32,481ms (threshold: 2,000ms)
[02:03:20] 🔴 DOWN — Load balancer returning HTTP 503 to all users
// Pagerduty escalated → On-call Engineer notified
Cảnh Giới 1 — Định Thần: Đạo Tâm Bất Biến Giữa Biến Cố

2 giờ sáng. Trí não còn đang nửa tỉnh nửa mê — phản ứng đầu tiên của đa số tu sĩ là hoảng loạn. Nhưng một đại lão SRE hiểu rằng: Hoảng loạn là liều thuốc độc. Mỗi nhát kiếm (câu lệnh gõ xuống) khi tâm không tĩnh sẽ chỉ khiến vết thương của hệ thống thêm trầm trọng.

"

Sự cố đã xảy ra — việc của chúng ta không phải là hối tiếc, mà là cứu vãn sinh linh (User) và khôi phục tông môn. Hít một hơi thật sâu. Định thần. Rồi mới xuất kiếm.

Cảnh Giới 2 — Truy Vết: Phóng Thần Thức Soi Xét Vạn Vật

Khi trận pháp sụp đổ, hiện trường là đống đổ nát hỗn độn. Kỹ sư cần dùng Thần thức Observability để nhìn thấu bản chất — không đoán mò, chỉ theo dấu vết.

// GRAFANA DASHBOARD — 02:04 UTC+7 — PRODUCTION CLUSTER
CPU Usage              94% ↑ (threshold: 80%)
Memory Usage            98% ↑↑ OOM imminent
DB Connections              100/100 — POOL EXHAUSTED
HTTP 200 Rate    3% ↓↓ (normal: 99.9%)
Active Users          47,832 — Pháo hoa spike (+820%)

Lật lại từng trang nhật ký (Logs) qua ELK/Loki — giữa hàng triệu dòng thông báo vô thưởng vô phạt, một dòng chữ đỏ hiện lên như quỷ khí:

// ELK Stack — Kibana query: level:ERROR AND timestamp:[now-1h TO now]
ERROR [02:01:47] HikariPool-1 - Connection is not available, request timed out after 30000ms
ERROR [02:01:48] java.lang.OutOfMemoryError: Java heap space
WARN [02:01:49] Slow query detected (47,382ms): SELECT * FROM orders WHERE user_id=? ← ĐÂY RỒI!
// Missing index on orders.user_id → Full table scan → 12M rows → DB lock

Dấu vết đã rõ: Một Tâm Ma ẩn mình trong câu truy vấn SQL không có index. Sau nhiều ngày tích tụ silent, nó bộc phát ngay khi lượng truy cập tăng đột biến lúc xem pháo hoa — khiến Database bị phong tỏa hoàn toàn.

Cảnh Giới 3 — Trảm Ma: Nhất Kiếm Định Giang Sơn (Hotfix)

Trong tình thế ngàn cân treo sợi tóc, không có thời gian để rèn lại thanh kiếm mới. Phải dùng đến Thuật Vá Trận (Hotfix) — nhanh, chính xác, không để lại tác dụng phụ:

Incident Response Playbook — 02:07 to 02:21
1
Cô lập vùng ảnh hưởng — tắt tạm các non-critical service (report, analytics) để giải phóng DB connection cho core flow
2
Kill long-running queries — dùng pg_terminate_backend() để giết các query đang treo, giải phóng connection pool ngay lập tức
3
Scale up tài nguyên tạm thời — tăng DB connection pool limit + thêm read replica để hệ thống có hơi thở tạm thời
4
Hotfix deploy — thêm CREATE INDEX CONCURRENTLY idx_orders_user_id ON orders(user_id); — index tạo không lock table, thực hiện được online
5
Monitor recovery — theo dõi Grafana, xác nhận query time giảm từ 47,000ms về 12ms trước khi declare incident resolved
Grafana Loki PostgreSQL kubectl PagerDuty
Dòng Thời Gian Trận Chiến
🔴
02:03 — BÁNG ĐỘNG ĐỎ
Truyền Tin Thạch Rung Lên
PagerDuty kích hoạt. Production down 100%. 47,000+ user không truy cập được. Tâm ma tỉnh giấc.
🔍
02:07 — PHÓNG THẦN THỨC
Grafana + Loki Lên Tiếng
DB connection pool exhausted. Tìm thấy slow query 47 giây trên bảng orders — thiếu index user_id. Root cause confirmed.
⚔️
02:11 — TRẢM MA
Kill Queries + Scale Up
pg_terminate_backend() giải phóng 100 connection đang treo. Scale DB pool lên 200. Hệ thống bắt đầu thở lại.
02:21 — PHỤC HỒI
Linh Lực Xanh Trở Lại
Index tạo online thành công. Response time P99: 18ms. HTTP 200 rate: 99.97%. Incident resolved. Tổng thời gian: 18 phút.
Hậu Chiến — Đúc Lại Kiếm Phổ (Post-mortem)

Khi ánh mặt trời đầu tiên của năm mới hiện lên, trận chiến kết thúc. Nhưng sai lầm lớn nhất là sửa xong rồi quên. Phải viết "Hậu chiến ký sự" — không để truy cứu lỗi lầm, mà để cả tông môn học và trưởng thành:

Post-Mortem — "Incident Pháo Hoa Giao Thừa 2026"
1
Tại sao Tâm Ma này qua mặt được Unit Test? — Query SELECT * không có test với volume lớn. Cần thêm load test với realistic data size vào pipeline.
2
Tại sao Trận Nhãn không cảnh báo sớm hơn? — Alert threshold cho slow query là 5 giây, query này tích lũy dần từ 2s → 47s trong 3 ngày. Cần alert theo trend, không chỉ threshold tuyệt đối.
3
Làm sao để rèn thêm lớp giáp (Circuit Breaker)? — Nếu DB quá tải, cần tự động trả về cached response thay vì để toàn bộ hệ thống sập. Implement Circuit Breaker pattern với Resilience4j.
4
Action Items: Thêm DB index review vào checklist code review. Set up query performance baseline. Implement connection pool monitoring alert. Chaos engineering test trước các ngày lễ lớn.
Circuit Breaker Load Testing Runbook Chaos Engineering

Mỗi lần bị dựng dậy lúc 2 giờ sáng là một lần bạn được "tặng" thêm vài năm công lực thực chiến.
Thanh bản mệnh kiếm sứt mẻ sau những đêm như thế — nhưng ngày càng sắc bén và đáng tin cậy hơn.

Chúc các đồng đạo một năm Uptime 99.99% và quan trọng nhất là… được ngủ ngon giấc!

[ SRE · Incident Response · Post-mortem · On-call ]
Xem tất cả bài viết // 02/06/2026 — z3r0w3!