[Monitoring 6] Prometheus-Grafana-Exporter – Alert Manager

Tác giả: 21/09/2024

Alertmanager là một thành phần quan trọng trong bộ công cụ giám sát Prometheus, giúp quản lý các cảnh báo (alerts) được tạo ra từ Prometheus. Dưới đây là một số điểm chính về Alertmanager:

Chức Năng Chính

  • Nhóm Cảnh Báo: Alertmanager có khả năng nhóm các cảnh báo tương tự lại với nhau để giảm thiểu số lượng thông báo được gửi đi. Điều này giúp quản lý thông báo hiệu quả hơn.
  • Xử Lý Cảnh Báo: Nó có thể nhận các cảnh báo từ Prometheus và xử lý chúng theo các quy tắc đã định trước, như gửi thông báo khi có cảnh báo hoặc tắt cảnh báo sau khi sự cố đã được khắc phục.
  • Gửi Thông Báo: Alertmanager hỗ trợ gửi cảnh báo đến nhiều kênh khác nhau như email, Slack, PagerDuty, hoặc các hệ thống thông báo khác thông qua webhook.

Không dài dòng nữa, chúng ta sẽ đi cài đặt dịch vụ này, và ở bài viết này,mình sẽ demo cảnh báo qua Telegram

Bước 1 – Khởi tạo user:

useradd --no-create-home --shell /bin/false alertmanager

Bước 2 – Cài đặt bộ cài alertmanager

Chúng ta sẽ vào đây xem bản cập nhật mới nhất, thời điểm này mình thấy bản mới nhất là 0.27.0 phát hành 28/2/2024.

+ Link releases

https://github.com/prometheus/alertmanager/releases

Tiến hành tải về

cd /mnt

wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz

tar xzf alertmanager-0.27.0.linux-amd64.tar.gz

mv alertmanager-0.27.0.linux-amd64/alertmanager /usr/local/bin/

mv alertmanager-0.27.0.linux-amd64/amtool /usr/local/bin/

chown alertmanager:alertmanager /usr/local/bin/alertmanager

chown alertmanager:alertmanager /usr/local/bin/amtool

mkdir /etc/alertmanager

chown alertmanager:alertmanager /etc/alertmanager

Bước 3 – Cấu hình Alertmanager

vi /etc/alertmanager/alertmanager.yml

Thêm vào:

global:

  resolve_timeout: 5m

route:

  group_by: ['alertname']

  group_interval: 5m

  repeat_interval: 60m

  receiver: 'telegram'

receivers:

  - name: 'telegram'

    telegram_configs:
      - chat_id: -7732xxx35

        bot_token: '5625825246:AxxxPgtDTh_p6OgXVcMRTE6OOAKPqGuc'

Giải thích:

global:

  resolve_timeout: 5m
  • resolve_timeout: Đây là thời gian tối đa mà Alertmanager sẽ đợi trước khi coi một cảnh báo là đã được giải quyết. Nếu cảnh báo không được kích hoạt lại trong khoảng thời gian này, nó sẽ được đánh dấu là đã được giải quyết.
route:

  group_by: ['alertname']

  group_interval: 5m

  repeat_interval: 60m

  receiver: 'telegram'
  • group_by: Đây là danh sách các nhãn mà Alertmanager sẽ sử dụng để nhóm các cảnh báo. Trong trường hợp này, các cảnh báo sẽ được nhóm lại với nhau dựa trên tên cảnh báo (alertname).
  • group_interval: Thời gian giữa các thông báo cảnh báo trong cùng một nhóm. Nếu có nhiều cảnh báo trong cùng một nhóm, Alertmanager sẽ không gửi thông báo mới cho đến khi hết thời gian 5 phút này.
  • repeat_interval: Thời gian tối đa giữa các thông báo lặp lại cho cùng một cảnh báo. Nếu cảnh báo vẫn còn kích hoạt sau 60 phút, Alertmanager sẽ gửi thông báo lại.
  • receiver: Đây là tên của receiver mà cảnh báo sẽ được gửi đến. Trong trường hợp này, tất cả các cảnh báo sẽ được gửi đến receiver có tên là telegram.
receivers:

  - name: 'telegram'

    telegram_configs:

      - chat_id: -773xxxx235

        bot_token: '5625825246:AAF0yZSPgtxxxxXVcMRTE6OOAKPqGuc'
  • receivers: Đây là danh sách các receiver mà Alertmanager có thể sử dụng để gửi thông báo. Mỗi receiver có thể có nhiều cấu hình khác nhau.
  • name: Tên của receiver, ở đây là telegram.
  • telegram_configs: Cấu hình cụ thể cho việc gửi thông báo qua Telegram.
    • chat_id: Đây là ID của chat (hoặc nhóm chat) mà thông báo sẽ được gửi đến. Giá trị -7732xxxx235 cho biết đây là một nhóm chat.
    • bot_token: Đây là token của bot Telegram mà bạn đã tạo để gửi thông báo. Token này cần được bảo mật, vì nó cho phép bot gửi tin nhắn đến chat được chỉ định.

Bước 4 – Tạo file systemd

mkdir /var/lib/alertmanager

chown -R alertmanager:alertmanager /var/lib/alertmanager

Tạo file systemd

[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target

[Service]
User=alertmanager
Group=alertmanager
Restart=always
Type=simple
WorkingDirectory=/etc/alertmanager/
ExecStart=/usr/local/bin/alertmanager \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/var/lib/alertmanager \
--cluster.listen-address=0.0.0.0:9094 \
--cluster.advertise-address=$YOUR_IP:9095
[Install]
WantedBy=multi-user.target

Kiểm tra config Alert-manager

amtool check-config /etc/alertmanager/alertmanager.yml

Bước 5 – Khởi tạo dịch vụ

systemctl daemon-reload

systemctl start alertmanager.service

systemctl enable alertmanager.service

systemctl status alertmanager.service

Kiểm tra log Alert manager

journalctl -u alertmanager -f

Bước 6 – Cấu hình trên Prometheus Server

Tạo tệp

vi /etc/prometheus/alert_rules.yml

Ở đây mình chỉ tạo demo về thông báo ổ đĩa, bạn có thể thêm các alert khác như DISCONNECT , CPU, RAM, NETWORK…

Hình ảnh chỉ mang tính chất minh họa

Ví dụ:

groups:
  - name: NodeExporterLINUX Alerts
    rules:
      - alert: LowDiskSpace
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) < 0.3
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Low Disk Space on /"
          description: "Available space on / is less than 30%."

Sau đó chỉnh lại tệp prometheus.yml, trước tiên phân lại quyền sử dụng file alert_rules.yml

chown prometheus:prometheus /etc/prometheus/alert_rules.yml

Bên trên bạn có thể thêm nhiều rules, ở đây mình chỉ có 1 file rules cho Node Exporter Linux

Khởi động lại prometheus

systemctl restart prometheus

Truy cập vào http://YOUR_IP:9090/alerts

Xem cảnh báo tại telegram

Hẹn gặp lại các bạn tại các bài viết sau tại wiki.nhanhoa.com

Chúc các bạn thành công.