Sự cố
Triage và playbook cố định cho các outage thường gặp. Mỗi playbook là triệu chứng → chẩn đoán → giảm thiểu → escalate. Mức độ ở tổng quan runbook.
Luồng triage
- Xác định phạm vi - một merchant, một service, hay tất cả? Xem dashboard và alert đã bắn.
- Đặt mức (S0-S3) và, với S0/S1, khai báo sự cố + page Incident Commander.
- Giảm thiểu trước, root-cause sau - khôi phục service (rollback, restart, scale) trước khi debug.
- Communicate - cập nhật kênh sự cố mỗi 30 phút tới khi xong.
- Sau đó - viết post-mortem cho mọi S0/S1.
Playbook
S0 · API chết (service trả 5xx / không truy cập được)
- Chẩn đoán:
kubectl get pods -n nx-backend- pod CrashLooping / không Ready? Xem log (Vận hành). - Giảm thiểu: nếu do deploy mới → rollback; nếu không, restart deployment (
kubectl rollout restart deploy/<svc>). - Kiểm tra deps: xác nhận DB, Redis, gateway khỏe (lỗi downstream trông như outage API).
- Escalate chủ service nếu 15 phút chưa phục hồi.
S0 · Mất kết nối DB / Postgres chết
- Chẩn đoán: service tới được Postgres? Kiểm tra pooler (data-layer) và pod DB.
- Giảm thiểu: restart pooler (PgBouncer / PgCat) trước - nhiều alert "DB chết" là do cạn pooler. Nếu DB thật sự chết, fail over / restore từ backup.
- Mất dữ liệu? nếu cần restore, theo SOP restore (Vận hành); mục tiêu RPO ≤ 15 phút.
- Escalate Eng lead ngay (S0).
S0/S1 · Redis chết
- Ảnh hưởng: cache miss (chậm nhưng vẫn chạy) + worker BullMQ đứng + WebSocket pub/sub rớt.
- Giảm thiểu: restart Redis; worker tự kết nối lại. Theo dõi backlog queue rút sau đó.
- Verify: xác nhận job confirmation thanh toán chạy lại (chạy trên Redis) - xem Lỗi thanh toán dưới.
S1 · Lỗi thanh toán (MQ-Pay / VNPAY)
- Chẩn đoán: IPN có về không? Xem log service payment ở endpoint
/payments/vnpay/{provider}/ipnvà lỗi verify checksum (Hợp đồng IPN VNPAY). - Nguyên nhân thường gặp: Redis chết (job confirmation đứng) · credential merchant sai / đã xoay · không tới được
/webhooks/paymentnội bộ. - Giảm thiểu: confirmation đứng do Redis → fix Redis; credential sai → xoay lại; giao dịch không mất (IPN có thể gửi lại / query lại).
- Không bao giờ đánh dấu đơn đã thanh toán thủ công khi chưa có IPN verify.
S1 · Lỗi hóa đơn (T-VAN / IIAPI)
- Chẩn đoán: lỗi ở nhà cung cấp hay ở khâu ký? Xem log service invoice (invoice/integration).
- Giảm thiểu: phát hành lỗi nhìn thấy và thử lại được - retry từ màn hóa đơn. Không phát lại hóa đơn đã phát thành công (trùng với cơ quan thuế).
- Escalate chủ thuế / tuân thủ nếu nhà cung cấp / CQT từ chối hóa đơn hợp lệ.
Mẫu post-mortem
# Post-mortem - <sự cố> (<ngày>)
- Mức / thời lượng:
- Ảnh hưởng (ai, bao nhiêu):
- Timeline (phát hiện → giảm thiểu → giải quyết):
- Nguyên nhân gốc:
- Điều tốt / chưa tốt:
- Action item (owner, hạn):Blameless. Mọi S0/S1 có một bản trong 48 giờ.