prometheus 告警
prometheus 通過alertmanager進行告警
實現監控告警的步驟:
- 在prometheus中定義告警規則
rule_files
- alertmanager配置告警告警動作,分組,抑制,靜默等功能
- alertmanager安裝route定義的規則向終端:郵箱,企業微信等發生告警信息
監控服務端主機下載安裝alertmanager
alertmanager可以和prometheus主機安裝在一起,也可以獨立部署在一台主機。這里部署在一台主機
[root@localhost ~]# tar zxf alertmanager-0.19.0.linux-amd64.tar.gz
[root@localhost ~]# mv alertmanager-0.19.0.linux-amd64 /usr/local/alertmanager
alertmanager主配置文件: alertmanager.yml內容標注
global: # 全局配置
resolve_timeout: 5m #解析超時時間
route: # 配置告警發送,接受規則
group_by: ['alertname'] # 根據標簽分組
group_wait: 10s # 發送告警等待時間,為了合並相同告警一起發送
group_interval: 10s # 發送告警間隔時間
repeat_interval: 10m # 重復告警時間,控制發送告警頻率,根據情況設置
receiver: 'web.hook' # 定義接收者類型:mail,wechat等
receivers: # 定義告警發給誰
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
inhibit_rules: # 告警抑制規則
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
配置163郵箱接收告警
- alertmanager服務中配置,修改alertmanager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.163.com:25' # 定義163郵箱服務器端
smtp_from: 'gudaoyufu@163.com' #來自哪個郵箱發的
smtp_auth_username: 'gudaoyufu@163.com' 郵箱驗證
smtp_auth_password: 'XXXXXXXX' # 郵箱授權碼,不是登錄密碼
smtp_require_tls: false # 是否啟用tls
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 3m # 發送告警后間隔多久再次發送,減少發送郵件頻率
receiver: 'mail' #發送的告警媒體
receivers:
- name: 'mail' # 接收者配置,這里要與接收媒體一致
email_configs:
- to: 'gudaoyufu@163.com' #發送給誰的郵箱,多個人多行列出
#inhibit_rules:
# - source_match:
# severity: 'critical'
# target_match:
# severity: 'warning'
# equal: ['alertname', 'dev', 'instance']
- 檢查配置:
[root@localhost alertmanager]# ./amtool check-config alertmanager.yml
Checking 'alertmanager.yml' SUCCESS
Found:
- global config
- route
- 0 inhibit rules
- 1 receivers
- 0 templates
- 啟動alertmanager
[root@localhost alertmanager]# ./alertmanager --config.file=./alertmanager.yml &
配置prometheus與alertmanager通信
上面的配置只是配置alertmanagerr服務,接下來配置prometheus與alertmanager通信
- 配置prometheus告警規則
官方配置文檔參考:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
[root@localhost ~]# cd /usr/local/prome/
[root@localhost prome]# vim prometheus.yml
#啟用如需配置段
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
# 配置告警規則
rule_files:
- "rules.yml" # 默認路徑在配置文件同級目錄下
- 編輯rules.yml
vim rules.yml
groups: # 報警組
- name: Node
rules:
# Alert for any instance that is unreachable for >5 minutes.
- alert: InstanceDown
expr: up == 0 # 監控狀態的值為 0時,說明服務異常,1為正常
for: 5m # 保持時間,上面的狀態持續時間內都為 0 ,則觸發告警
labels:
severity: error
annotations:
summary: "Instance {{ $labels.instance }} 停止工作"
description: "{{ $labels.instance }} of job {{ $labels.job }} 已經停止1分鍾以上."
- 檢查配置
[root@localhost prome]# ./promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: 1 rule files found
Checking rules.yml
SUCCESS: 1 rules found
- 重啟prometheus
systemctl start prometheus
重啟prometheus后在prometheus服務端頁面中的alters中可以看到rules
測試停掉其他節點的監控agent
#停掉cadvisor
[root@localhost ~]# docker stop e9e9499bcf2b
e9e9499bcf2b
一會后http://192.168.235.130:9090/alerts
中的狀態為Firing
,此時郵件已經發出去了,登錄郵箱已經看到告警郵件了
告警狀態
-
Inactive : 正常狀態
-
Pending : 已經觸發閾值,但還未滿足告警持續時間
-
Firing : 已經觸發閾值並且滿足告警持續時間,警報發送給了接收者
-
分組: 將類似性質的告警分類成單個通知
route: # 配置告警發送,接受規則
group_by: ['alertname'] # 根據標簽分組
group_wait: 10s # 發送告警等待時間,為了合並相同告警一起發送
group_interval: 10s # 發送告警間隔時間
repeat_interval: 10m # 重復告警時間,控制發送告警頻率,根據情況設置
- 抑制: 當告警發出后,將停止重復發送由此報警引發的其他告警,消除冗余的告警
inhibit_rules:
- source_match: # 高級別告警源
severity: 'critical'
target_match: # 低級別的告警被抑制不會發送
severity: 'warning'
equal: ['alertname', 'dev', 'instance'] #抑制匹配
- 靜默: 是一種簡單的特定時間靜音提醒的機制
配置靜默通過alertmanager服務的9093端口服務,界面創建靜默規則
http://192.168.235.130:9093/#/silences