Vận hành
Quy tắc cảnh báo
Dashboard là thứ ta chủ động mở ra xem; cảnh báo là thứ tự đánh thức ta. Bài này là loại thứ hai: ngưỡng nào thì kêu, kêu với ai, và làm sao để cảnh báo không bị bỏ qua.
Nội dung bài
Chỗ đứng của bài này
Production monitoring nói về dashboard — thứ ta chủ động mở ra nhìn theo nhịp cố định. Bài này nói về cảnh báo — thứ tự tìm tới ta, kể cả lúc 3 giờ sáng.
Hai thứ này cần tách vì chúng hỏng theo hai kiểu khác nhau. Dashboard hỏng khi không ai mở. Cảnh báo hỏng khi kêu quá nhiều tới mức người ta tắt thông báo.
Thước đo duy nhất
Một hệ thống giám sát tốt được đo bằng một câu: ta biết trước hay người dùng biết trước?
Nếu sự cố đầu tiên được phát hiện qua một phiếu hỗ trợ hoặc một đánh giá 1 sao, hệ thống giám sát đang hỏng — bất kể có bao nhiêu biểu đồ đẹp trên bảng điều khiển.
Đây là shift left áp dụng cho chặng vận hành: kéo thời điểm phát hiện về trước thời điểm người dùng cảm nhận được.
Bốn tầng tín hiệu
| Tầng | Trả lời câu hỏi | Ví dụ |
|---|---|---|
| Có sống không | App có chạy được không | Tỷ lệ phiên không crash, tỷ lệ lỗi API |
| Có nhanh không | Người dùng chờ bao lâu | Thời gian khởi động, thời gian phản hồi |
| Có đúng không | Nghiệp vụ có ra kết quả đúng không | Đơn lệch, tin nhắn không tới, thông báo trùng |
| Có ai dùng không | Hành vi có bất thường không | Số tin nhắn, số task, số đơn theo giờ |
Tầng ba và tầng bốn là hai tầng hay bị bỏ. Nhưng nhiều sự cố nghiêm trọng nhất không làm app crash — app vẫn chạy mượt, chỉ là tính sai tiền hoặc không gửi được tin. Chỉ có tầng ba và bốn bắt được loại đó.
Ngưỡng phải đọc ra số người
Alliance App hướng tới 500.000 người dùng. Ở quy mô đó, một ngưỡng phần trăm che mất mức độ nghiêm trọng thật:
| Ngưỡng | Số người đứng sau nó |
|---|---|
| 1% lỗi API | 5.000 người |
| 0,5% nâng cấp thất bại | 2.500 người |
| 0,1% đơn trùng | 500 đơn sai |
Luật: mọi cảnh báo hiển thị cả tỷ lệ và số người bị ảnh hưởng. Người trực đêm cần con số tuyệt đối để quyết định gọi ai, chứ không cần tự nhân nhẩm lúc 3 giờ sáng.
Chỉ số bắt buộc theo module
Toàn app
| Chỉ số | Ngưỡng cảnh báo |
|---|---|
| Tỷ lệ phiên không crash | Dưới 99,7% |
| Tỷ lệ lỗi API (5xx) | Trên 0,5% trong 5 phút |
| Thời gian phản hồi nhóm 95% | Vượt ngân sách đã đặt 50% |
| Thời gian khởi động nguội nhóm 95% | Trên 3 giây |
| Tỷ lệ nâng cấp thất bại | Trên 0,5% |
| Ngân sách lỗi tháng đã tiêu | Trên 75% khi chưa hết tháng |
Chat
| Chỉ số | Ngưỡng cảnh báo |
|---|---|
| Độ trễ gửi tới nhận nhóm 95% | Trên 2 giây |
| Tỷ lệ tin nhắn phải gửi lại | Trên 3% |
| Tin nhắn trùng phát hiện được | Bất kỳ, cảnh báo ngay |
| Số tin nhắn gửi mỗi giờ | Giảm quá 30% so với cùng giờ tuần trước |
Task
| Chỉ số | Ngưỡng cảnh báo |
|---|---|
| Tỷ lệ lỗi khi chuyển trạng thái | Trên 1% |
| Thông báo trùng | Bất kỳ, cảnh báo ngay |
| Thông báo trễ quá 5 phút | Trên 2% |
| Lỗi phân quyền bị từ chối bất thường | Tăng đột biến |
Bán hàng
| Chỉ số | Ngưỡng cảnh báo |
|---|---|
| Tỷ lệ thanh toán thất bại | Trên 2% |
| Đơn trùng phát hiện được | Bất kỳ, báo ngay lập tức |
| Lệch giữa tổng đơn và báo cáo doanh số | Bất kỳ, báo ngay lập tức |
| Số đơn chốt mỗi giờ | Giảm quá 30% so với cùng giờ tuần trước |
| Đơn treo ở trạng thái chờ quá 15 phút | Trên 1% |
Hai dòng in đậm không có ngưỡng chịu đựng. Một đơn trùng hoặc một đồng lệch là tín hiệu mô hình đang sai, và nó sẽ lớn lên theo khối lượng.
Cảnh báo viết thế nào
Cảnh báo tốt phải trả lời đủ bốn câu ngay trong nội dung:
[NGHIÊM TRỌNG] Tỷ lệ thanh toán thất bại 7,2% (ngưỡng 2%)
Cái gì: Thanh toán thất bại tăng từ 1,1% lên 7,2% trong 10 phút qua.
Ai dính: Khoảng 340 người dùng trong 10 phút, toàn bộ trên Android.
Từ khi: 14:32, trùng thời điểm bật cờ cong-thanh-toan-moi lên 20%.
Làm gì: Tắt cờ cong-thanh-toan-moi. Hướng dẫn: <liên kết>
Bảng số liệu: <liên kết> Log liên quan: <liên kết>
Cảnh báo chỉ ghi "lỗi tăng" mà không kèm ngữ cảnh và bước xử lý là cảnh báo bắt người trực phải tự điều tra từ số không, lúc 3 giờ sáng.
Ba mức cảnh báo
| Mức | Gửi đi đâu | Yêu cầu phản hồi |
|---|---|---|
| Nghiêm trọng | Gọi điện, đánh thức người trực | Trong 15 phút, mọi lúc |
| Cảnh báo | Kênh chat của đội | Trong giờ làm việc |
| Thông tin | Bảng điều khiển, không gửi đi | Xem khi soát hằng tuần |
Chỉ được đặt mức nghiêm trọng khi có việc cụ thể phải làm ngay. Cảnh báo đánh thức người ta dậy mà câu trả lời đúng là "sáng mai xem" thì phải hạ mức.
Chống mệt mỏi vì cảnh báo
Đây là cách một hệ thống giám sát chết: quá nhiều cảnh báo nhiễu, đội quen bỏ qua, rồi bỏ qua luôn cảnh báo thật.
Luật giữ cho hệ thống sống:
- Mỗi cảnh báo phải có việc để làm. Không có việc thì đó là biểu đồ, không phải cảnh báo.
- Cảnh báo sai quá 3 lần trong tháng thì phải chỉnh ngưỡng hoặc xoá, trong tuần đó.
- Không quá 2 cảnh báo nghiêm trọng mỗi tuần ở trạng thái bình thường. Nhiều hơn nghĩa là hoặc hệ thống đang thật sự tệ, hoặc ngưỡng đang sai — cả hai đều phải xử lý.
- Soát toàn bộ danh sách cảnh báo hằng tháng: cái nào chưa bao giờ kêu, cái nào kêu suốt.
- Cảnh báo dựa trên triệu chứng người dùng cảm nhận được, không dựa trên nguyên nhân kỹ thuật. Báo "người dùng không gửi được tin nhắn" hữu ích hơn "CPU 90%" — CPU cao mà người dùng không bị gì thì không cần ai thức dậy.
Ai nhận cảnh báo
Lịch trực, quyền của người trực và cách bàn giao nằm ở Bug severity, on-call và root cause analysis. Điểm cần nhắc ở đây: mỗi cảnh báo phải trỏ tới một người cụ thể đang trực, không trỏ vào một nhóm chat. Cảnh báo gửi vào nhóm là cảnh báo không ai thấy mình có trách nhiệm.
Nhật ký và truy vết
- Mỗi yêu cầu mang một mã tương quan đi xuyên suốt từ app tới các dịch vụ, để ghép được toàn bộ hành trình khi điều tra.
- Log giữ tối thiểu 30 ngày, log liên quan tới giao dịch giữ theo yêu cầu kế toán.
- Không bao giờ log nội dung tin nhắn, dữ liệu thẻ, hay thông tin cá nhân — xem bảo mật và quyền riêng tư.
- Bảng điều khiển chính phải mở được từ điện thoại. Sự cố không chờ ai về tới bàn làm việc.

