Grafana Alerting (unified alerting) tách việc phát hiện sự cố khỏi việc gửi thông báo. Alert rule chỉ sinh ra alert instance có label; việc gửi đi đâu, gom thế nào, nhắc lại bao lâu do notification policy quyết định dựa trên label đó. Nhờ vậy đổi kênh nhận (Slack, email, webhook) không cần sửa rule.
Luồng cảnh báo
flowchart LR Q["Query (Prometheus, InfluxDB, ClickHouse)"] --> E["Expression: Reduce, Threshold"] E --> R["Alert rule (pending period)"] R -->|"instance + labels"| AM[Alertmanager của Grafana] S[Silence / mute timing] -.->|chặn| AM AM --> NP["Notification policy tree (matchers)"] NP --> CP1["Contact point: Slack #noc"] NP --> CP2["Contact point: email oncall"]
Thành phần
| Thành phần | Vai trò | Ví dụ |
|---|---|---|
| Alert rule | Query + điều kiện + pending period + label + annotation | bps > 90% speed trong 5 phút |
| Evaluation group | Nhóm rule trong một folder, cùng chu kỳ đánh giá | interfaces, mỗi 1m |
| Alert instance | Một series vi phạm điều kiện, mang label riêng | source=pe1-hni, name=Hu0/0/0/0 |
| Label | Cặp key/value dùng để định tuyến và gom nhóm | severity=critical, team=noc |
| Annotation | Nội dung mô tả, không dùng để định tuyến | summary, description, runbook_url |
| Contact point | Kênh nhận + template tin nhắn | Slack, email, webhook, PagerDuty, Telegram |
| Notification policy | Cây định tuyến theo label matcher | team=noc → Slack #noc |
| Silence | Tắt tiếng tạm thời theo matcher, có thời hạn | Bảo trì pe1 từ 01:00 tới 03:00 |
| Mute timing | Khung giờ lặp lại không gửi thông báo | Cuối tuần cho cảnh báo severity=info |
Trạng thái của rule
| Trạng thái | Ý nghĩa |
|---|---|
| Normal | Không vi phạm điều kiện |
| Pending | Đang vi phạm nhưng chưa đủ pending period |
| Alerting (Firing) | Vi phạm liên tục quá pending period, gửi thông báo |
| No Data | Query không trả dữ liệu, hành vi tuỳ chỉnh được (No Data, Alerting, OK) |
| Error | Query hoặc datasource lỗi, hành vi tuỳ chỉnh được |
Với telemetry, mất dữ liệu thường quan trọng như vượt ngưỡng. Đặt No Data → Alerting cho rule kiểm tra thiết bị còn gửi metric, hoặc dùng absent_over_time (PromQL cheatsheet).
Notification policy và label routing
Policy là một cây. Gốc là default policy, các policy con có matcher (=, !=, =~, !~). Alert đi từ trên xuống, dừng ở policy con đầu tiên khớp, trừ khi bật Continue matching.
| Thiết lập | Ý nghĩa | Mặc định |
|---|---|---|
| Group by | Gom các instance cùng giá trị label thành một thông báo | grafana_folder, alertname |
| Group wait | Chờ trước khi gửi thông báo đầu tiên của nhóm mới | 30s |
| Group interval | Chờ trước khi gửi cập nhật khi nhóm có alert mới | 5m |
| Repeat interval | Nhắc lại khi alert vẫn firing | 4h |
Ví dụ cây cho NOC:
| Matcher | Contact point | Group by |
|---|---|---|
| (default) | email noc@example.com |
alertname |
severity = critical |
PagerDuty / Slack #noc-critical |
alertname, source |
team = core, severity =~ warning|info |
Slack #core |
source |
Khi nào dùng
| Tình huống | Gợi ý |
|---|---|
| Đã có dashboard trên Grafana, nhiều datasource (Influx, ClickHouse, Prometheus) | Grafana Alerting |
| Chỉ dùng Prometheus, muốn rule nằm cạnh metric | Prometheus rule + Alertmanager |
| Quản lý rule bằng Git | Provisioning alerting (YAML) hoặc Terraform provider, tương tự Grafana provisioning |
| Bảo trì có lịch cố định | Mute timing; bảo trì đột xuất dùng silence |
Không đặt giá trị thay đổi liên tục (bps hiện tại, timestamp) vào label của rule: mỗi giá trị mới thành một instance mới và gây spam. Đặt chúng vào annotation.