0

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à Critical API 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:

Screenshot 2026-08-07 at 15.05.42.png

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:

Screenshot 2026-08-07 at 14.52.03.png

Sau đó, Alertmanager:

Screenshot 2026-08-07 at 14.52.15.png

Email/Slack sẽ nhận:

Screenshot 2026-08-07 at 15.24.31.png


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:

Screenshot 2026-08-07 at 15.23.25.png

Firing
↓
Resolved

Nếu bật:

send_resolved: true

Bạn sẽ nhận Email/Slack:

Screenshot 2026-08-07 at 15.24.45.png


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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí