alertmanager 報(bào)警工具

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ù)階段使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Prometheus Alertmanager 概述 Alertmanager與Prometheus是相互分離的兩...
    YichenWong閱讀 29,215評論 1 9
  • 主機(jī)數(shù)據(jù)收集 主機(jī)數(shù)據(jù)的采集是集群監(jiān)控的基礎(chǔ);外部模塊收集各個(gè)主機(jī)采集到的數(shù)據(jù)分析就能對整個(gè)集群完成監(jiān)控和告警等功...
    梅_梅閱讀 6,783評論 0 7
  • 轉(zhuǎn)載自公眾號【工匠小豬豬的技術(shù)世界】原文地址https://mp.weixin.qq.com/s/Tnx60stl...
    一帥閱讀 4,743評論 0 2
  • 背景目前階段,我司主要監(jiān)控告警系統(tǒng)使用的是 Zabbix,對于基礎(chǔ)設(shè)施及應(yīng)用服務(wù)狀態(tài)監(jiān)控,Zabbix 內(nèi)建或由社...
    dennyhong閱讀 12,025評論 5 21
  • ①百度網(wǎng)盤的會(huì)員可以提供免費(fèi)解壓,快速下載的問題,所以,我們愿意付費(fèi)給它。當(dāng)然了,也有圖免費(fèi)的不愿意買的,但百度網(wǎng)...
    李小妹mei閱讀 250評論 1 0

友情鏈接更多精彩內(nèi)容