1、Alertmanager簡介
Alertmanager是一個獨立的告警模塊懊烤,接收Prometheus等客戶端發(fā)來的警報梯醒,之后通過分組、刪除重復(fù)等處理腌紧,并將它們通過路由發(fā)送給正確的接收器茸习;告警方式可以按照不同的規(guī)則發(fā)送給不同的模塊負(fù)責(zé)人,Alertmanager支持Email, Slack壁肋,等告警方式, 也可以通過webhook接入釘釘?shù)葒鴥?nèi)IM工具
2号胚、Alertmanager部署
1.下載Alertmanager
Alertmanager可以獨立部署在一臺服務(wù)器中,也可以部署在prometheus服務(wù)器浸遗。
官網(wǎng)下載地址:https://prometheus.io/download/
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz -C /data
ln -sv /data/alertmanager-0.21.0.linux-amd64 /usr/local/alertmanager
2.配置Alertmanager
cd /usr/local/alertmanager
cat > alertmanager.yml << 'EOF'
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.163.com':25'
smtp_from: 'shd_stars@163.com''
smtp_auth_username: 'xxx@163.com'' #告警發(fā)送郵箱地址
smtp_auth_password: 'xxxxx' #授權(quán)碼猫胁!不是郵箱的登陸密碼
smtp_require_tls: false
route:
group_by: ['alertname'] # 分組標(biāo)簽
group_wait: 10s # 分組等待時間,同一組內(nèi)在10秒鐘內(nèi)還有其它告警跛锌,如果有則一同發(fā)送
group_interval: 10s # 上下兩組間隔時間
repeat_interval: 300s # 重復(fù)告警間隔時間弃秆,間隔時間不要設(shè)置太短,容易出現(xiàn)告警轟炸
receiver: 'mail' # 接收者是誰
receivers: # 定義接收者,將告警發(fā)送給誰
- name: 'mail'
email_configs:
- to: 'xxx@163.com'' #接收郵箱地址
send_resolved: true #是否接收恢復(fù)信息菠赚,false|true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
#確保這個配置下的標(biāo)簽內(nèi)容相同才會抑制脑豹,也就是說警報中必須有這三個標(biāo)簽值才會被抑制。
equal: ['alertname', 'dev', 'instance']
EOF
配置文件的主要作用解釋:
- global: 全局配置衡查,包括報警解決后的超時時間瘩欺、SMTP 相關(guān)配置、各種渠道通知的 API 地址等等拌牲。
- route: 用來設(shè)置報警的分發(fā)策略俱饿,它是一個樹狀結(jié)構(gòu),按照深度優(yōu)先從左向右的順序進(jìn)行匹配塌忽。
- receivers: 配置告警消息接受者信息拍埠,例如常用的 email、wechat砚婆、slack械拍、webhook 等消息通知方式。
- inhibit_rules: 抑制規(guī)則配置装盯,當(dāng)存在與另一組匹配的警報(源)時坷虑,抑制規(guī)則將禁用與一組匹配的警報(目標(biāo))。
3.檢查Alertmanager配置文件
cd /usr/local/alertmanager
./amtool check-config alertmanager.yml
提示Checking 'alertmanager.yml' SUCCESS 即表示配置文件格式正常埂奈。
4.創(chuàng)建Alertmanager啟動文件
cat > /usr/lib/systemd/system/alertmanager.service << 'EOF'
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable alertmanager.service --now
systemctl status alertmanager.service
可以通過瀏覽器訪問:http://IP:9093
即可訪問alertmanager迄损。
3.配置Prometheus與Alertmanager告警
1、配置Prometheus
cd /usr/local/prometheus
vi prometheus.yml
...
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 #實際的alertmanager IP和端口
rule_files:
- "rules/*.yml" #告警規(guī)則文件路徑
#- "second_rules.yml"
...
2账磺、檢查Prometheus配置文件
cd /usr/local/prometheus
./promtool check config prometheus.yml
3芹敌、創(chuàng)建Prometheus rules目錄
cd /usr/local/prometheus
mkdir rules
創(chuàng)建節(jié)點狀態(tài)告警規(guī)則
cat > /usr/local/prometheus/rules/general.yml << 'EOF'
groups:
- name: general.rules
rules:
- alert: InstanceDown
expr: up == 0 # 表達(dá)式當(dāng)前被監(jiān)控實例服務(wù)(node_exporter)狀態(tài),1為正常垮抗,
for: 10s # 告警持續(xù)時間10s
labels:
severity: warning # 告警級別warning| error
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} 已經(jīng)停止工作10秒鐘氏捞。"
EOF
檢查配置文件
./promtool check rules rules/general.yml
重啟prometheus
systemctl restart prometheus
瀏覽器訪問prometheushttp://IP:9090/rules
查看告警規(guī)則
Prometheus Alert (
http://IP:9090/alerts
)告警狀態(tài)有三種狀態(tài):Inactive、Pending冒版、Firing液茎。
- Inactive:非活動狀態(tài),表示正在監(jiān)控辞嗡,但是還未有任何警報觸發(fā)捆等。
- Pending:表示這個警報必須被觸發(fā)。由于警報可以被分組续室、壓抑/抑制或靜默/靜音栋烤,所以等待驗證,一旦所- 有的驗證都通過挺狰,則將轉(zhuǎn)到 Firing 狀態(tài)明郭。
-
Firing:將警報發(fā)送到 AlertManager买窟,它將按照配置將警報的發(fā)送給所有接收者。一旦警報解除达址,則將狀態(tài)轉(zhuǎn)到 Inactive蔑祟,如此循環(huán)趁耗。
4.驗證郵件告警
驗證故障郵件告警沉唠,停止node_exporter.service
systemctl stop node_exporter.service
- 停止服務(wù)后,等待 15s 左右可以看到 Prometheus target 里面 node-exproter 狀態(tài)為 unhealthy 狀態(tài)
- 等待 15s 后苛败,alert 頁面由綠色 node-up (0 active) Inactive 狀態(tài)變成了黃色 node-up (1 active) Pending 狀態(tài)
- 繼續(xù)等待 15s 后狀態(tài)變成紅色 Firing 狀態(tài)满葛,向 AlertManager 發(fā)送報警信息,此時 AlertManager 則按照配置規(guī)則向接受者發(fā)送郵件告警罢屈。
登錄郵箱查看告警信件:
恢復(fù)故障
systemctl start node_exporter.service