一、簡介
Alertmanager
是Prometheus
的一個報警通知組件,需要結合Prometheus
使用。Prometheus
將監測到的異常事件發送給Alertmanager
,Alertmanager
發送異常事件的通知(郵件、webhook等)。
二、安裝Alertmanager
# 解壓安裝包 tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz # 文件列表 ./ ├── alertmanager # alertmanager的啟動程序 ├── alertmanager.yml # alertmanager的配置文件 ├── amtool ├── LICENSE └── NOTICE
三、報警規則
修改prometheus
的配置文件prometheus.yml
# Alertmanager configuration # 改為alertmanager的地址 alerting: alertmanagers: - static_configs: - targets: - 192.168.1.23:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. # 指定規則文件 rule_files: - rules/*.yml
在rules
目錄中添加.yml
結尾的規則文件,prometheus
會根據這些規則配置文件進行監控報警。
模版:
# 一個配置文件里包含多個組 groups: - name: example # 組名 # 觸發規則列表 rules: - alert: HighErrorRate # 警告名 expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5 # 觸發規則 for: 10m # 規則觸發持續多長時間發送告警 # 告警附加標簽 labels: severity: page # 告警附加注釋 annotations: summary: High request latency
- node_alived.yml
groups: - name: 實例存活告警規則 rules: - alert: 實例存活告警 expr: up == 0 for: 1m labels: user: prometheus severity: warning annotations: summary: "主機宕機 !!!" description: "該實例主機已經宕機超過一分鍾了。"
- memory_over.yml
groups: - name: 內存報警規則 rules: - alert: 內存使用率告警 expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 50 for: 1m labels: severity: warning annotations: summary: "服務器可用內存不足。" description: "內存使用率已超過50%(當前值:{{ $value }}%)"
- cpu_over.yml
groups: - name: CPU報警規則 rules: - alert: CPU使用率告警 expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 50 for: 1m labels: severity: warning annotations: summary: "CPU使用率正在飆升。" description: "CPU使用率超過50%(當前值:{{ $value }}%)"
- disk_over.yml
groups: - name: 磁盤使用率報警規則 rules: - alert: 磁盤使用率告警 expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80 for: 20m labels: severity: warning annotations: summary: "硬盤分區使用率過高" description: "分區使用大於80%(當前值:{{ $value }}%)"
然后重啟prometheus服務。
登陸prometheus
的UI界面,查看Alerts
規則
- Inactive:沒有觸發閾值
- Pending:已觸發閾值但未滿足告警持續時間
- Firing:已觸發閾值且滿足告警持續時間
四、通知規則
4.1 釘釘告警
docker
安裝釘釘報警插件(prometheus-webhook-dingtalk),啟用一個名為:dingtalk
的釘釘機器人。
docker run -d \ --name dingtalk \ --restart always \ -p 8060:8060 \ timonwong/prometheus-webhook-dingtalk:master \ --ding.profile="webhook1=https://oapi.dingtalk.com/robot/send?access_token=xxxx(自己的釘釘機器人token)"
設置alertmanager.yml
的route
與receivers
。
route
屬性用來設置報警的分發策略,它是一個樹狀結構,按照深度優先從左向右的順序進行匹配。
global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - send_resolved: true url: 'http://192.168.1.23:8060/dingtalk/webhook1/send' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
啟動alertmanager
測試
4.2 企業微信告警
下載docker
解決 :下載3個依賴包網址
https://pkgs.org/download/fuse-overlayfs
https://pkgs.org/download/slirp4netns
# 1、卸載舊的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 2、需要的安裝包 yum install -y yum-utils # 3、設置鏡像的倉庫 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 推薦使用阿里雲的 #4更新yum軟件包索引 yum makecache fast #5、安裝依賴 container-selinux、 fuse-overlayfs、slirp4netns # 6、安裝docker相關內容(docker-ce 社區版;docker-ee 企業版;推薦使用ce。) yum install docker-ce docker-ce-cli containerd.io -y #7、驗證,啟動 systemctl start docker docker version systemctl enable docker
docker
安裝企業微信報警插件(webhook-adapter),啟用一個名為:wechat
的釘釘機器人。
docker run -d --name wechat \ --restart always -p 8080:80 \ guyongquan/webhook-adapter \ --adapter=/app/prometheusalert/wx.js=/wx=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx(自己的微信機器人key)
企業微信的機器人key,需要創建群聊然后再創建機器人,機器人自帶key
編輯alertmanager的alertmanager.yml文件:
global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - send_resolved: true url: 'http://192.168.1.23:8080/adapter/wx' #ip地址為安裝了webhook-adapter的機器。 inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
啟動alertmanager服務:
#/opt/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager.yml --storage.path=/opt/alertmanager/data/ &> /opt/alertmanager/access.log &
然后測試報警
參考網址:(49條消息) Prometheus學習筆記(三)Alertmanager報警模塊集成釘釘/企業微信機器人_劉李404not found的博客-CSDN博客