Cần có kiến thức cơ bản về docker như image, container docker-compose, volumes, port, service,...
OS: Centos 8
- Cài đặt Prometheus và Grafana
- Cài đặt SNMP Exporter (Prometheus) để giám sát các thiết bị mạng
- Cài đặt Alert Manager (Prometheus) để gửi mail khi có cảnh báo
1. Tổng quan
Alert trong Prometheus được chia làm 2 phần là Rule trong Prometheus Server và Alert Manager.
Rule có 3 trạng thái là inactive, pending, firing. Prometheus Server sẽ check các rule này, nếu thỏa mãn điều kiện thì sẽ đẩy sang cho Alert Manager xử lý. Alert Manager sẽ gửi quản lý các alert vừa nhận, gửi thông báo qua các kênh mail, chat,...
Vậy nên sẽ phải cấu hình các Rule ở Prometheus Server, cấu hình kết nối Prometheus Server và Alert Manager và cấu hình cho AlertManager để xử lý alert.
2. Pull Image
dockker pull prom/alertmanager
3. docker-compose.yml
Tạo 2 thư mục /etc/prometheus-docker/alertmanager/config, /etc/prometheus-docker/alertmanager/data
mkdir -p /etc/prometheus-docker/alertmanager/data
Trong file docker-compose.yml, add thêm nội dung bên dưới để start Alert Manager:
alertmanager:
image: prom/alertmanager
restart: unless-stopped
ports:
- 9093:9093
volumes:
- /etc/prometheus-docker/alertmanager/config:/config
- /etc/prometheus-docker/alertmanager/data:/data
command: --config.file=/config/alertmanager.yml --log.level=debug
4. prometheus.yml
Trong file prometheus.yml, add thêm đoạn bên dưới để cấu hình kết nối với Alert Manager và cấu hình tên file chứa rule.
alerting:
alertmanagers:
- static_configs:
- targets:
- "192.168.100.27:9093"
rule_files:
- "windows-rule.yml"
Rule sẽ tạo ở bước sau.
5. Tạo file rule
Các file rule sẽ có định dạng yml và được đặt ngang cấp với file prometheus.yml. Có thể tạo nhiều file rule (vd: windows-rule.yml, cisco-rule.yml, linux-rule.yml, fortigate.yml,...)
Prometheus Server sẽ đọc các Rule được định nghĩa ở đây. Bên dưới là 1 ví dụ định nghĩa rule cho windows:
############# Define Rule Alert ###############
# my global config
############# Define Rule Alert ###############
groups:
- name: Windows-alert
rules:
################ Memory Usage High
- alert: Memory Usage High
expr: 100*(windows_cs_physical_memory_bytes)*0 < 1
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 }}"
6. alertmanager.yml
Ở bước 3, có dòng --config.file=/config/alertmanager.yml
, tức là sẽ phải tạo file alertmanager.yml nằm ở /etc/prometheus-docker/alertmanager/config
vi /etc/prometheus-docker/alertmanager/config/alertmanager.yml
Sau đó add nội dung bên dưới
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 3600s
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'to@gmail.com'
from: 'from@gmail.com'
smarthost: 'smtp.gmail.com:587'
auth_username: 'from@gmail.com'
auth_identity: 'from@gmail.com'
auth_password: 'abcbs12123'
7. Kết quả
Nếu Prometheus đọc được Rule thì trên Web sẽ hiển thị như hình. Nếu 1 node nào đó đang giám sát mà thỏa mãn điều kiện thì rule sẽ được chuyển từ Inactive sang Pending, và sau cùng là Firing.
Nếu Firing được thì trên Alert Manager sẽ hiển thị như sau:
Đây là kết quả Alert Manager gửi về email: