AlertManager 簡介
Prometheus將數(shù)據(jù)采集和報(bào)警分成了兩個(gè)模塊。報(bào)警規(guī)則配置在Prometheus Servers上,然后發(fā)送報(bào)警信息到AlertManger,然后我們的AlertManager就來管理這些報(bào)警信息,包括silencing、inhibition,聚合報(bào)警信息過后通過email、PagerDuty、HipChat、Slack 等方式發(fā)送消息提示。
-
讓AlertManager提供服務(wù)總的來說就下面3步:
- 安裝和配置AlertManger
- 配置Prometheus來和AlertManager通信
- 在Prometheus中創(chuàng)建報(bào)警規(guī)則
-
prometheus報(bào)警觸發(fā)流程
- prometheus采集數(shù)據(jù)
- 判斷當(dāng)前數(shù)據(jù)指標(biāo)有沒有到達(dá)閾值
- 如果觸發(fā),根據(jù)配置文件中的for字段判斷持續(xù)時(shí)間
- 是的話發(fā)送給alertmanager
- alertmanager經(jīng)過
- 分組
- 抑制
- 靜默等一些列處理流程
- 發(fā)送給指定的接收器, 如:郵件、微信等
部署AlertManager
wget https://github.com/prometheus/alertmanager/releases/download/v0.17.0/alertmanager-0.17.0.linux-amd64.tar.gz
tar xvf alertmanager-0.17.0.linux-amd64.tar.gz
mv alertmanager-0.17.0.linux-amd64 /usr/local/alertmanager
cd /usr/local/alertmanager/
配AlertManager
# 編輯主配置文件
vim /usr/local/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m #解析的超時(shí)時(shí)間
smtp_smarthost: 'smtp.163.com:25' #郵箱smtp地址
smtp_from: 'USERNAME@163.com' #來自哪個(gè)郵箱發(fā)出的
smtp_auth_username: 'USERNAME@163.com' #郵箱的用戶名
smtp_auth_password: 'PASSWORD' #這里是郵箱的授權(quán)密碼,不是登錄密碼
smtp_require_tls: false #是否啟用tls
route: #設(shè)置報(bào)警的分發(fā)策略,通過route實(shí)現(xiàn)告警的分配,所有的報(bào)警都會(huì)發(fā)送到mail這個(gè)接收器中
group_by: ['alertname'] #采用哪個(gè)標(biāo)簽進(jìn)行分組
group_wait: 60 #分組等待的時(shí)間為10秒,收到報(bào)警后并不是馬上發(fā)送出去,看看還有沒有alertname這個(gè)標(biāo)簽的報(bào)警發(fā)過來,如果有的話,一起發(fā)出報(bào)警
group_interval: 60 #上一組報(bào)警與下一組報(bào)警的間隔時(shí)間為10秒
repeat_interval: 24h #重復(fù)報(bào)警時(shí)間
receiver: 'mail'
receivers: #報(bào)警接收人
- name: 'mail' #誰來接收這個(gè)報(bào)警
email_configs: #email的配置
- to: 'misterbyj@163.com' #報(bào)警接收人的郵件地址
send_resolved: true #發(fā)送恢復(fù)通知
inhibit_rules: #抑制規(guī)則,報(bào)警抑制角色,用于報(bào)警收斂,發(fā)送關(guān)鍵報(bào)警
- source_match: #匹配我這個(gè)報(bào)警發(fā)生后,其它報(bào)警被抑制掉,
severity: 'critical' #報(bào)警級別為critical
target_match: #其它報(bào)警
severity: 'warning' #報(bào)警級別為warning
equal: ['alertname', 'dev', 'instance'] #對哪些報(bào)警進(jìn)行抑制,要匹配這里的標(biāo)簽
# 檢查alertmanager.yml配置文件是否正確
/usr/local/alertmanager/amtool check-config /usr/local/alertmanager/alertmanager.yml
# 生成服務(wù)文件
cat > /usr/lib/systemd/system/alertmanager.service << EOF
[Unit]
Description=prometheus
[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
EOF
# 啟動(dòng)服務(wù)
systemctl daemon-reload
systemctl start alertmanager
systemctl enable alertmanager
ps -ef|grep alertmanager
alertmanager與prometheus集成
- prometheus與alertmanager通信
- 在prometheus server上定義監(jiān)控規(guī)則
- 當(dāng)監(jiān)控的閾值超過定義的閾值后會(huì)發(fā)送報(bào)警
- 推送報(bào)警規(guī)則給alertmanager
- 通過alertmanager的流程處理發(fā)送給報(bào)警接收人
# 創(chuàng)建報(bào)警規(guī)則目錄
mkdir -p /usr/local/prometheus/rules
vim /usr/local/prometheus/prometheus.yml
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
rule_files:
- "rules/*.yml" #報(bào)警規(guī)則存放文件夾
配置監(jiān)控實(shí)例,監(jiān)控job的狀態(tài)
vim /usr/local/prometheus/rules/unreachable.yml
groups:
- name: general.rules #同性質(zhì)的一組報(bào)警,監(jiān)控當(dāng)前節(jié)點(diǎn)的指標(biāo)的組名稱
rules:
- alert: InstanceDown
expr: up == 0 #每一個(gè)實(shí)例都會(huì)有一個(gè)up的狀態(tài),up是默認(rèn)賦予被監(jiān)控端的一個(gè)指標(biāo),0為失敗狀態(tài),1為存活狀態(tài)
for: 1m #當(dāng)前報(bào)警的持續(xù)時(shí)間,1分鐘之內(nèi)如果都是up == 0的狀態(tài),才會(huì)發(fā)出報(bào)警
labels: #設(shè)置報(bào)警級別
severity: error #報(bào)警級別為error級別
annotations: #注釋信息
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
kill -hup `ps -ef |grep prometheus|grep -v grep|awk '{print $2}'`

image.png
報(bào)警狀態(tài)
-
報(bào)警狀態(tài)
- inactive-已收到報(bào)警
- pending-已經(jīng)觸發(fā)報(bào)警閾值,但未滿足告警持續(xù)時(shí)間 #/usr/local/prometheus/rules/unreachable.yml 中設(shè)置的for時(shí)間
- firing-已觸發(fā)閾值,且滿足報(bào)警持續(xù)時(shí)間,將報(bào)警發(fā)送給報(bào)警接收者
-
報(bào)警的觸發(fā)流程
- 第一次發(fā)現(xiàn)expr: up == 0,prometheus此時(shí)將報(bào)警狀態(tài)設(shè)置為inactive
- 第二次發(fā)現(xiàn)expr: up == 0,prothemeus不會(huì)立即通知alertmanager,要等待for: 1m的持續(xù)時(shí)間,如果1分鐘后還是expr: up == 0的狀態(tài),prometheus會(huì)將pending狀態(tài)變更為firing狀態(tài),變?yōu)閒iring狀態(tài)時(shí),prometheus將通知alertmanager發(fā)送報(bào)警
- 發(fā)送報(bào)警的時(shí)間取決于數(shù)據(jù)采集時(shí)間+報(bào)警評估時(shí)間
報(bào)警郵件
恢復(fù)郵件
報(bào)警收斂-靜默
靜默是一種簡單的特定時(shí)間的靜音提醒機(jī)制,使用標(biāo)簽來匹配這一批是不發(fā)送的
添加靜默
http://192.168.21.37:9093/#/alerts
右上角-->new silence-->start開始時(shí)間-->end結(jié)束時(shí)間-->matchers匹配
-->name匹配名稱-->填寫job-->value值-->填寫linux-node-->
creator名稱-->填寫靜默名稱-->點(diǎn)擊create
作用
阻止預(yù)期的報(bào)警,通常是在系統(tǒng)上線或維護(hù)階段使用

