Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Share Everywhere

Table of contents

Hôm nay mình chia sẻ đến các bạn cách giám cấu hình Alert trong Prometheus và sử dụng telegram để làm công cụ gửi tin nhắn cảnh báo. Mình cảm thấy alert qua email hơi phiền vì phải nhận nhiều mail spam và thấy rằng vì telegram hiện tại rất thông dụng với mọi người và hầu như ai cũng có sử dụng telegram.

Bước 01: Đầu tiên chúng ta sẽ download source cài đặt vào trong server

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

Bước 02: Giải nén và copy vào thư mục /usr/local để dễ dàng quản lý

tar -xvzf alertmanager-0.20.0.linux-amd64.tar.gz
mv alertmanager-0.20.0.linux-amd64 /usr/local/alertmanager

Bước 03: Tạo service trong systemd cho alertmanager

vi /etc/systemd/system/alertmanager.service

Nội dung file service như sau:

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

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/alertmanager/alertmanager \
--config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target

Enable và start service

systemctl daemon-reload
systemctl enable alertmanager
systemctl restart alertmanager

Bước 04: Cấu hình alert trong prometheus

vi /usr/local/prometheus/prometheus.yml

Tại targets: nhập thông tin ip, port , tại đây chính là ip của prometheus server và port 9093 (alertmanager dùng port này).

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 01: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Bước 05: Tạo các rule alert trong prometheus. Để tạo alert trong prometheus, bạn cần phải định nghĩa ra các rule. Tạo các file rule trong thư mục promethues với format sau: rulename.yml

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 02: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Nội dung file rule tùy các bạn định nghĩa.

Tại đây mình tạo 1 rule alert cho windows host:  windows-rule.yml

vi /usr/local/prometheus/windows-rules.yml

Nội dung file rule như sau:

############# Define Rule Alert ###############
# my global config
############# Define Rule Alert ###############
groups:
- name: Windows-alert
  rules:

################ Memory Usage High
  - alert: Memory Usage High
    expr: 100*(wmi_os_physical_memory_free_bytes) / wmi_cs_physical_memory_bytes > 90
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "Memory Usage (instance {{ $labels.instance }})"
      description: "Memory Usage is more than 90%\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

################ CPU Usage High
  - alert: Cpu Usage High
    expr: 100 - (avg by (instance) (irate(wmi_cpu_time_total{mode="idle"}[2m])) * 100) > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "CPU Usage (instance {{ $labels.instance }})"
      description: "CPU Usage is more than 80%\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

################ Disk Usage
  - alert: DiskSpaceUsage
    expr: 100.0 - 100 * ((wmi_logical_disk_free_bytes{} / 1024 / 1024 ) / (wmi_logical_disk_size_bytes{}  / 1024 / 1024)) > 95
    for: 1m
    labels:
      severity: error
    annotations:
      summary: "Disk Space Usage (instance {{ $labels.instance }})"
      description: "Disk Space on Drive is used more than 95%\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

################ ServiceStatus
  - alert: ServiceStatus
    expr: wmi_service_status{status="ok"} != 1
    for: 1m
    labels:
      severity: error
    annotations:
      summary: "Service Status (instance {{ $labels.instance }})"
      description: "Windows Service state is not OK\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

################ CollectorError
  - alert: CollectorError
    expr: wmi_exporter_collector_success == 0
    for: 1m
    labels:
      severity: error
    annotations:
      summary: "Collector Error (instance {{ $labels.instance }})"
      description: "Collector {{ $labels.collector }} was not successful\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

Bước 06: Tiếp tục chúng ta sẽ khai báo tên của rule đó vào cấu hình của prometheus theo như hình bên dưới.

vi /usr/local/prometheus/prometheus.yml
Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 03: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Bước 07: Kiểm tra lại rule đã tạo bằng lệnh sau

./promtool check config  prometheus.yml
Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 04: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Bước 08: Restart prometheus service và kiểm tra lại kết quả:

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 05: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Tương tự bạn sẽ tạo nhiều rule cho nhiều  nhóm thiết bị khác nhau.

Bước 09: Ở bước này mình sẽ tạo 1 con telegram_bot sau đó gửi alert qua telegram. Download source code và build file binary

cd ${GOPATH-$HOME/go}/src/github.com
go get github.com/inCaller/prometheus_bot
cd ${GOPATH-$HOME/go}/src/github.com/inCaller/prometheus_bot
make clean
make

Copy bỏ vào thư mục /usr/local để dễ dàng quản lý.

mv /root/go/src/github.com/inCaller/prometheus_bot /usr/local

Đăng nhập vào telegram để tạo telegram bot và group nhận alert.

Cách tạo telegram bot tham khảo tại đây https://www.teleme.io/articles/create_your_own_telegram_bot?hl=vi

Khi tạo telegram bot mình sẽ ghi lại token của con bot, dùng để điền vào file config.yaml mà chúng ta tạo sau đó.

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 06: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Tiếp tục tạo group sau đó add bot vừa tạo vào, sử dụng telegram qua web bạn sẽ lấy dc tham số -chat-id

Chat-id chính là : g364942581

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 07: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Bước 10: Tạo file cấu hình của prometheus_bot

vi /usr/local/prometheus_bot/config.yaml

Nội dung file config.yaml như sau:

telegram_token: "997872129:AAEPKYz3nPwmFsgq6ao-MdPsC5fy5z376GQ"

# ONLY IF YOU USING TEMPLATE required for test
template_path: "template.tmpl"
time_zone: "Asia/Ho_Chi_Minh"
split_token: "|"

# ONLY IF YOU USING DATA FORMATTING FUNCTION, NOTE for developer: important or test fail
time_outdata: "02/01/2006 15:04:05"
split_msg_byte: 4000

Bước 11: Tiếp tục cấu hình alert manager

vi /usr/local/alertmanager/alertmanager.yml

Thay đổi tham số url như sau: http://ipalertmanager:9087/alert/-chat_id

Bạn có thể edit lại các tham số thời gian. Tại config này mình đang để 30 phút sẽ gửi tin nhắn 1 lần nếu còn alert.

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 08: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Bước 12: Thực hiện test gửi nhận tin nhắn trên telegram với telegram_bot với cú pháp sau:

export TELEGRAM_CHATID="-364942581"
make test

Kiểm tra thấy bot đã gửi được tin nhắn

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 09: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Bước 12: Tiếp tục tạo templet gửi alert trong prometheus.

Trong thư mục testdata có nhiều templet cho bạn sử dụng, thường mình dùng templet production_example.tmpl

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 10: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Copy templet ra ngoài thư mục prometheus_bot và đổi tên thành templet.tmpl

cp production_example.tmpl /usr/local/prometheus_bot/template.tmpl

Tiếp tục edit lại tên của template trong config.yaml của prometheus_bot

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 11: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Restart lại tất cả services đã cấu hình.

service prometheus_bot restart
service alertmanager restart
service prometheus restart

Kiểm tra lại kết quả của alertmanager truy cập vào Prometheus/Alert

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 12: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Kết quả telegram_bot gửi tin nhắn alert

Chính vì thế mình muốn hướng dẫn các bạn nhận các alert của hệ thống qua telegram cho tiện.

Hình 13: [Promethues từ A đến Z] Phần 07. Cấu hình Alert trong Prometheus gửi tin nhắn qua telegram

Tài liệu tham khảo

  • https://github.com/pryorda/vmware_exporter
  • https://prometheus.io/docs/alerting/alertmanager
  • https://awesome-prometheus-alerts.grep.to
Bạn thấy bài viết này như thế nào?
0 reactions

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.

Bài viết liên quan

Khám phá FinOps

Khám phá FinOps - công nghệ đám mây

Nhiều doanh nghiệp ngày nay lựa chọn chuyển sang công nghệ đám mây với hi vọng đạt được lợi thế cạnh tranh so với đối thủ nhờ tiềm năng về hiệu quả cao và tiết kiệm chi phí hơn của công nghệ này.
Microservices Roadmap

Microservices Roadmap

- Kafka, RabbitMQ, Amazon SQS: Efficient and reliable message brokers for seamless communication between microservices.
The Data Analyst Roadmap

The Data Analyst Roadmap

**Database Knowledge**: Gain proficiency in working with databases like MySQL, PostgreSQL, or MongoDB.
Architectural patterns in software design

Architectural patterns in software design

Choose the architecture that aligns with your application's unique needs and goals. Each pattern offers a tailored approach to elevate your software system!
Exploring the Technological Marvel Behind Netflix

Exploring the Technological Marvel Behind Netflix

Ever wondered about the tech wizardry that powers your binge-watching adventures on Netflix?