AlertManager 簡介
Prometheus將數(shù)據(jù)采集和報警分成了兩個模塊澎媒。報警規(guī)則配置在Prometheus Servers上,然后發(fā)送報警信息到AlertManger冬三,然后我們的AlertManager就來管理這些報警信息,包括silencing、inhibition蒲每,聚合報警信息過后通過email、PagerDuty望蜡、HipChat腕侄、Slack 等方式發(fā)送消息提示微姊。
-
讓AlertManager提供服務(wù)總的來說就下面3步:
- 安裝和配置AlertManger
- 配置Prometheus來和AlertManager通信
- 在Prometheus中創(chuàng)建報警規(guī)則
-
prometheus報警觸發(fā)流程
- prometheus采集數(shù)據(jù)
- 判斷當(dāng)前數(shù)據(jù)指標(biāo)有沒有到達閾值
- 如果觸發(fā),根據(jù)配置文件中的for字段判斷持續(xù)時間
- 是的話發(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 #解析的超時時間
smtp_smarthost: 'smtp.163.com:25' #郵箱smtp地址
smtp_from: 'USERNAME@163.com' #來自哪個郵箱發(fā)出的
smtp_auth_username: 'USERNAME@163.com' #郵箱的用戶名
smtp_auth_password: 'PASSWORD' #這里是郵箱的授權(quán)密碼溉潭,不是登錄密碼
smtp_require_tls: false #是否啟用tls
route: #設(shè)置報警的分發(fā)策略,通過route實現(xiàn)告警的分配,所有的報警都會發(fā)送到mail這個接收器中
group_by: ['alertname'] #采用哪個標(biāo)簽進行分組
group_wait: 60 #分組等待的時間為10秒惠毁,收到報警后并不是馬上發(fā)送出去飒焦,看看還有沒有alertname這個標(biāo)簽的報警發(fā)過來翁巍,如果有的話蛔趴,一起發(fā)出報警
group_interval: 60 #上一組報警與下一組報警的間隔時間為10秒
repeat_interval: 24h #重復(fù)報警時間
receiver: 'mail'
receivers: #報警接收人
- name: 'mail' #誰來接收這個報警
email_configs: #email的配置
- to: 'misterbyj@163.com' #報警接收人的郵件地址
send_resolved: true #發(fā)送恢復(fù)通知
inhibit_rules: #抑制規(guī)則,報警抑制角色鱼蝉,用于報警收斂,發(fā)送關(guān)鍵報警
- source_match: #匹配我這個報警發(fā)生后间唉,其它報警被抑制掉印叁,
severity: 'critical' #報警級別為critical
target_match: #其它報警
severity: 'warning' #報警級別為warning
equal: ['alertname', 'dev', 'instance'] #對哪些報警進行抑制,要匹配這里的標(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
# 啟動服務(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)控的閾值超過定義的閾值后會發(fā)送報警
- 推送報警規(guī)則給alertmanager
- 通過alertmanager的流程處理發(fā)送給報警接收人
# 創(chuàng)建報警規(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" #報警規(guī)則存放文件夾
配置監(jiān)控實例闲延,監(jiān)控job的狀態(tài)
vim /usr/local/prometheus/rules/unreachable.yml
groups:
- name: general.rules #同性質(zhì)的一組報警找颓,監(jiān)控當(dāng)前節(jié)點的指標(biāo)的組名稱
rules:
- alert: InstanceDown
expr: up == 0 #每一個實例都會有一個up的狀態(tài)佛析,up是默認(rèn)賦予被監(jiān)控端的一個指標(biāo),0為失敗狀態(tài)桃纯,1為存活狀態(tài)
for: 1m #當(dāng)前報警的持續(xù)時間,1分鐘之內(nèi)如果都是up == 0的狀態(tài),才會發(fā)出報警
labels: #設(shè)置報警級別
severity: error #報警級別為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
報警狀態(tài)
-
報警狀態(tài)
- inactive-已收到報警
- pending-已經(jīng)觸發(fā)報警閾值猜绣,但未滿足告警持續(xù)時間 #/usr/local/prometheus/rules/unreachable.yml 中設(shè)置的for時間
- firing-已觸發(fā)閾值,且滿足報警持續(xù)時間,將報警發(fā)送給報警接收者
-
報警的觸發(fā)流程
- 第一次發(fā)現(xiàn)expr: up == 0,prometheus此時將報警狀態(tài)設(shè)置為inactive
- 第二次發(fā)現(xiàn)expr: up == 0多搀,prothemeus不會立即通知alertmanager赌髓,要等待for: 1m的持續(xù)時間,如果1分鐘后還是expr: up == 0的狀態(tài)悯搔,prometheus會將pending狀態(tài)變更為firing狀態(tài)苏揣,變?yōu)閒iring狀態(tài)時藏古,prometheus將通知alertmanager發(fā)送報警
- 發(fā)送報警的時間取決于數(shù)據(jù)采集時間+報警評估時間
報警郵件
恢復(fù)郵件
報警收斂-靜默
靜默是一種簡單的特定時間的靜音提醒機制靡馁,使用標(biāo)簽來匹配這一批是不發(fā)送的
添加靜默
http://192.168.21.37:9093/#/alerts
右上角-->new silence-->start開始時間-->end結(jié)束時間-->matchers匹配
-->name匹配名稱-->填寫job-->value值-->填寫linux-node-->
creator名稱-->填寫靜默名稱-->點擊create
作用
阻止預(yù)期的報警尤误,通常是在系統(tǒng)上線或維護階段使用