Lab 8.4 - Thiết lập Alerting - Cấu hình Alertmanager gửi cảnh báo Email và Slack
Ở phần trước, chúng ta đã hoàn thành việc:
- Tạo Alert Rule.
- Đưa Alert Rule vào Prometheus.
- Kiểm tra Prometheus đã nhận Rule.
- Hiểu vòng đời của Alert từ
Inactive → Pending → Firing.
Tuy nhiên, hiện tại Alert mới chỉ xuất hiện trong giao diện Prometheus.
Ví dụ:
Prometheus
↓
Alerts
TodoApiDown
FIRING
Nếu không có ai mở Prometheus hoặc Grafana, đội vận hành vẫn không biết hệ thống đang gặp sự cố.
Để giải quyết vấn đề này, chúng ta cần cấu hình Alertmanager Receiver.
1. Alertmanager Receiver là gì?
Alertmanager nhận Alert từ Prometheus.
Sau đó nó quyết định:
- Gửi Alert tới đâu.
- Gửi cho ai.
- Khi nào gửi.
- Gom nhóm Alert như thế nào.
Ví dụ:
Prometheus
↓
Alertmanager
|
├───────→ Email
|
├───────→ Slack
|
└───────→ PagerDuty
2. Alertmanager Configuration
Cấu trúc cơ bản:
global:
...
route:
...
receivers:
...
Trong đó:
| Thành phần | Chức năng |
|---|---|
| global | Cấu hình chung |
| route | Quyết định Alert đi đâu |
| receivers | Nơi nhận Alert |
3. Kiểm tra Alertmanager hiện tại
Trong môi trường của bạn:
kubectl get pods -n monitoring
Có:
NAME READY STATUS RESTARTS AGE
...
prometheus-alertmanager-0 1/1 Running 4 (21h ago) 7d
Kiểm tra Service:
kubectl get svc -n monitoring
Ví dụ:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
prometheus-alertmanager ClusterIP 10.99.184.223 <none> 9093/TCP 7d
4. Cấu hình Alertmanager Receiver và test cảnh báo gửi tới gmail
Bước 1. Xem cấu hình Alertmanager hiện tại
Với Helm chart:
prometheus-community/prometheus
Alertmanager được quản lý bằng Helm Values.
Kiểm tra:
helm get values prometheus -n monitoring
Hiện tại có thể chưa có:
alertmanager:
Điều đó có nghĩa Alertmanager đang chạy với cấu hình mặc định.
Bước 2. Thêm cấu hình Alertmanager vào prometheus-values.yaml
Nội dung:
alertmanager:
config:
global:
resolve_timeout: 5m
route:
group_by:
- alertname
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: email
receivers:
- name: email
Giải thích Route
group_by
group_by:
- alertname
Alertmanager sẽ gom các Alert cùng loại thành một nhóm.
Ví dụ:
Thay vì gửi:
Pod A Restart
Pod B Restart
Pod C Restart
thành 3 email.
Nó sẽ gom:
Pod Restart Alert
3 instances affected
group_wait
group_wait: 30s
Khi Alert mới xuất hiện, Alertmanager chờ 30 giây trước khi gửi.
Mục đích:
Nếu có nhiều Alert xảy ra cùng lúc, có thể gom chúng thành một thông báo.
group_interval
group_interval: 5m
Khoảng thời gian giữa các lần gửi nhóm Alert.
repeat_interval
repeat_interval: 1h
Nếu sự cố chưa được xử lý sau 1 giờ, gửi lại cảnh báo.
Bước 3. Cấu hình Email Receiver
Để gửi Email, Alertmanager cần SMTP Server.
Ví dụ sử dụng Gmail SMTP:
alertmanager:
config:
global:
smtp_smarthost: smtp.gmail.com:587
smtp_from: your-email@gmail.com
smtp_auth_username: your-email@gmail.com
smtp_auth_password: your-app-password
route:
receiver: email
receivers:
- name: email
email_configs:
- to: devops-team@gmail.com
send_resolved: true
Giải thích Email Config
smtp_smarthost
- SMTP Server:
smtp_smarthost: smtp.gmail.com:587
smtp_from
- Email gửi:
smtp_from: your-email@gmail.com
smtp_auth_username
- Tài khoản SMTP:
smtp_auth_username:
smtp_auth_password
- Mật khẩu SMTP.
- Với Gmail hiện nay:
- Không sử dụng password thông thường.
Cần tạo:
- Tạo password tại Website này. Sau đó sử dụng App Password.
send_resolved
send_resolved: true
Cho phép gửi thông báo khi sự cố được xử lý.
Ví dụ:
Email 1:
🔥 Todo API Down
Email 2:
✅ Todo API Recovered
Bước 4. Cấu hình Slack (Tùy chọn)
Trong môi trường Production, Slack thường được sử dụng nhiều hơn Email.
Tạo:
Slack Workspace
↓
Incoming Webhook
↓
Webhook URL
Ví dụ:
receivers:
- name: slack
slack_configs:
- api_url: https://hooks.slack.com/services/xxxxx
channel: "#alerts"
send_resolved: true
Bước 5. Route Alert theo Severity
Trong thực tế, không phải Alert nào cũng quan trọng như nhau.
Ví dụ:
- Warning
Memory 80%và CriticalAPI Down
Có thể cấu hình:
route:
receiver: slack
routes:
- match:
severity: critical
receiver: email
Kết quả:
severity=critical
↓
Email + Slack
severity=warning
↓
Slack
Bước 6. Cập nhật Helm Release
Chạy:
helm upgrade prometheus \
prometheus-community/prometheus \
-f monitoring/prometheus-values.yaml \
-n monitoring
Helm sẽ:
- Update ConfigMap.
- Restart Alertmanager.
- Load cấu hình mới.
Kết quả:
Release "prometheus" has been upgraded. Happy Helming!
NAME: prometheus
LAST DEPLOYED: Fri Aug 7 14:28:52 2026
NAMESPACE: monitoring
STATUS: deployed
REVISION: 7
DESCRIPTION: Upgrade complete
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.monitoring.svc.cluster.local
Kiểm tra Pod Alertmanager sau upgrade:
kubectl get pods -n monitoring
Bạn sẽ thấy:
prometheus-alertmanager-0
restart.
Sau đó:
kubectl exec -it \
prometheus-alertmanager-0 \
-n monitoring \
-- cat /etc/alertmanager/alertmanager.yml
Kết quả mong muốn:
global:
smtp_smarthost: smtp.gmail.com:587
smtp_from: example_from@gmail.com
route:
receiver: email
receivers:
- name: email
email_configs:
- to: example_receivers@gmail.com
Mở config ở UI Alertmanager:

Phần config không còn là default-receiver nữa mà thay bằng email và thông tin cấu hình email
Bước 7. Test gửi Alert
Hiện tại chúng ta có Alert:
TodoApiDown
Test bằng cách scale Backend xuống:
kubectl scale deployment todo-backend \
--replicas=0 \
-n todo-app
Chờ:
1 phút
Prometheus:

Sau đó, Alertmanager:

Email/Slack sẽ nhận:

Bước 8. Khôi phục hệ thống
Scale Backend lại:
kubectl scale deployment todo-backend \
--replicas=1 \
-n todo-app
Sau một khoảng thời gian, Alert chuyển:

Firing
↓
Resolved
Nếu bật:
send_resolved: true
Bạn sẽ nhận Email/Slack:

Kết quả đạt được
Sau phần này:
- ✅ Hiểu Alertmanager Receiver
- ✅ Cấu hình Email notification
- ✅ Cấu hình Slack notification
- ✅ Hiểu Route và Group Alert
- ✅ Phân loại Alert theo Severity
- ✅ Kiểm tra luồng:
Prometheus
↓
Alertmanager
↓
Email / Slack
↓
DevOps
Trong Lab tới, chúng ta sẽ thực hiện kiểm thử Alert trong thực tế:
- Tạo CPU cao.
- Tạo HTTP 500.
- Làm Pod Restart.
- Quan sát:
Inactive
↓
Pending
↓
Firing
↓
Resolved
và phân tích cách DevOps debug sự cố dựa trên Alert nhận được.
All rights reserved