一、前言
要實現Prometheus的告警發送需要通過alertmanager組件,當prometheus觸發告警策略時,會將告警信息發送給alertmanager,然后alertmanager根據配置的策略發送到郵件或者釘釘中,發送到釘釘需要安裝額外的prometheus-webhook-dingtalk組件,用于發送告警信息到釘釘中,如果是用郵件的話直接在alertmanager配置即可,不用安裝額外組件
二、部署
這里就主要講解發送告警信息到釘釘中的配置
2.1部署alertmanager
下載altermanager安裝包,我這邊下載的是0.25.0版本
下載路徑:Releases · prometheus/alertmanager · GitHub
?mkdir /opt/alertmanager && cd?/opt/alertmanager
tar -zxvf?alertmanager-0.25.0.linux-amd64.tar.gz
mv?alertmanager-0.25.0.linux-amd64?alertmanager
cd?alertmanager && ls
配置系統管理啟動alertmanager服務
vi /usr/lib/systemd/system/alertmanager.serivce
[Unit]
Description=alertmanager
After=network.target[Service]
ExecStart=/opt/alertmanager/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager/alertmanager.yml #配置啟動服務命令,指定配置文件
User=root[Install]
WantedBy=multi-user.target
2.2部署prometheus-webhook-dingtalk
在部署前先配置好釘釘機器人,啟用加簽功能,復制webhook地址和加簽密鑰
下載prometheus-webhook-dingtalk安裝包,我這邊下載的是2.1.0版本
?下載路徑:Releases · timonwong/prometheus-webhook-dingtalk · GitHub
mkdir /opt/dingtalk && cd?/opt/dingtalk
tar -zxvf?prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
mv?prometheus-webhook-dingtalk-2.1.0.linux-amd64?dingtalk
cd?dingtalk && ls
復制重命名配置文件
cp??config.example.yml?config.yml
編輯配置文件
vi config.yml
templates:- /opt/dingtalk/dingtalk/template.tmpl #配置告警信息模板targets:webhook1:url: https://oapi.dingtalk.com/robot/send?access_token=cfe1e0d1cfb457a31b20d6005785f5c7367542d5bd82725eb1b2f6738d0be418 #配置上面記錄的釘釘機器人的webhook# secret for signaturesecret: SEC60b0e5076407b1d1d97c26afa2acb54edf7270b9e23826a65c3f085e48c5dcfd #配置上面記錄的釘釘機器人加簽的密鑰,下面的內容按照默認配置即可webhook2:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxwebhook_legacy:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx# Customize template contentmessage:# Use legacy templatetitle: '{{ template "legacy.title" . }}'text: '{{ template "legacy.content" . }}'webhook_mention_all:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxmention:all: truewebhook_mention_users:url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxmention:mobiles: ['156xxxx8827', '189xxxx8325']
編輯告警模板
vi??/opt/dingtalk/dingtalk/template.tmpl
{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}{{ define "__alert_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}**告警主題**: {{ .Annotations.summary }}**告警類型**: {{ .Labels.alertname }}**告警級別**: {{ .Labels.severity }} **告警主機**: {{ .Labels.instance }} **告警信息**: {{ index .Annotations "description" }}**告警時間**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}{{ define "__resolved_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}**告警主題**: {{ .Annotations.summary }}**告警類型**: {{ .Labels.alertname }} **告警級別**: {{ .Labels.severity }}**告警主機**: {{ .Labels.instance }}**告警信息**: {{ index .Annotations "description" }}**告警時間**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}**恢復時間**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**====偵測到{{ .Alerts.Firing | len }}個故障====**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}{{ if gt (len .Alerts.Resolved) 0 }}
**====恢復{{ .Alerts.Resolved | len }}個故障====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}
?配置系統管理啟動prometheus-webhook-dingtalk服務
vi /usr/lib/systemd/system/dingtalk.service
[Unit]
Description=prometheus-webhook-dingtalk
After=network.target[Service]
ExecStart=/opt/dingtalk/dingtalk/prometheus-webhook-dingtalk --config.file=/opt/dingtalk/dingtalk/config.yml
User=root[Install]
WantedBy=multi-user.target
配置開機啟動dingtalk服務
systemctl enable dingtalk &&?systemctl start dingtalk
查看釘釘服務端口
?netstat -tlpn
前面還沒有配置和啟動alertmanager服務,現在來編輯alertmanager配置文件
vi?/opt/alertmanager/alertmanager/alertmanager.yml
route:group_by: ['dingding'] #配置告警分組的標簽group_wait: 30s #配置項定義分組等待時間,當一組告警被觸發后,在這個時間段內,其他屬于同一組的告警也會被等待。這可以用于在一定時間內收集同一組告警,以便一次性發送通知group_interval: 5m #配置項定義分組間隔時間,一旦一個告警組的首個告警觸發了通知,等待指定的間隔時間后,即使組內有其他告警,也會重新觸發通知。這可以避免過于頻繁地發送通知repeat_interval: 1h #配置項定義重復通知的間隔時間,在一組告警已經觸發過一次通知后,過了指定的間隔時間,如果該組內的告警仍然處于觸發狀態,會再次觸發通知。這可以用于周期性地提醒用戶receiver: 'web.hook' #配置默認的接收者名稱,用于定義接收告警通知的目標routes:- receiver: 'web.hook' #定義一個路由規則,將告警發送到名為 'web.hook' 的接收者match_re: #使用正則表達式來匹配告警標簽,該配置是匹配所有告警alertname: ".*"
receivers:- name: 'web.hook' #定義名為 'web.hook' 的接收者webhook_configs: #指定接收者的配置- url: 'http://10.1.60.118:8060/dingtalk/webhook1/send' #指定啟用的釘釘組件服務為接收者,webhook1也是剛剛dingtalk配置文件的指定項send_resolved: true #表示也會發送已解決的告警通知
inhibit_rules: #- source_match: 和 - target_match: 定義了一條抑制規則,這條規則表示當源告警的標簽中 severity 是 'critical' 時,會抑制目標告警中 severity 是 'warning' 的告警- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance'] #指定了需要相等的標簽列表,只有這些標簽相同的告警才會進行抑制
alertmanager服務開機啟動
systemctl enable?alertmanager &&?systemctl start alertmanager
查看altermanager服務
netstat -tlpn
9094是alertmanager集群服務的通信端口,9093是alertmanager的服務端口
?訪問alertmanager服務
http://10.1.60.118:9093
?在Prometheus的配置文件中配置alertmanager服務地址并配置告警規則就可以使用alertmanager服務實現釘釘告警了