【Prometheus專題】4. Prometheus通過webhook集成Slack或Mattermost發送告警

prometheus目前支持衆多告警集成,最爲常見的就是郵件和企業微信,有些公司也會一些特殊的需求,會發送告警到自己的Chat私服的聊天頻道(其實就是個羣組),這樣就可以及時通知到相關人員。

Slack可能用的人不是很多,關於Slack的詳細情況,使用過的人可能不需要再多瞭解了,沒用過的人可能還得看看,確實是還挺好用的。Mattermost可以認爲是個Slack的內網私服版本,界面和功能上做了很大的改動,我所在的公司就在用這個,很直說,朝難用。

告警路由的配置部分我就不詳細寫了,可以關注上篇文章或者別人寫的博客,我們只需要關注的是alertmanager的配置,我們在添加配置時一定要配全配置,不然默認發出的告警格式我們都不知道發了個啥。

首先是添加我們自定義的模板,

# pwd
/srv/app/alertmanager/template
# cat slack.tmpl
{{ define "custom_title" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}{{ end }}{{ end }}
{{ define "custom_slack_message" }}
{{ if or (and (eq (len .Alerts.Firing) 1) (eq (len .Alerts.Resolved) 0)) (and (eq (len .Alerts.Firing) 0) (eq (len .Alerts.Resolved) 1)) }}
{{ range .Alerts.Firing }}- {{ .Annotations.description }}{{ end }}{{ range .Alerts.Resolved }}- {{ .Annotations.description }}{{ end }}
{{ else }}
{{ if gt (len .Alerts.Firing) 0 }}
{{ range .Alerts.Firing }}- {{ .Annotations.identifier }} {{ .Annotations.description }}
{{ end }}{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}
{{ range .Alerts.Resolved }}- {{ .Annotations.identifier }} {{ .Annotations.description }}
{{ end }}{{ end }}
{{ end }}
{{ end }}

然後我們修改alertmanager的配置,添加我們所需要的告警方式,配置正確的url與告警標題和內容模板,選好自己要發送的頻道就可以了

receivers:
 - name: 'webhook-devops-team-alert'
   slack_configs:
   - api_url: 'https://hooks.slack.com/services/XXXXXXXXXXXX/YYYYYYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZ'  #修改爲自己創建的webhook
     channel: '#devops'
     send_resolved: true
     title: '{{ template "custom_title" . }}'
     text: '{{ template "custom_slack_message" . }}'

總的講,Slack和Mattermost差別不是很大,兩邊的配置幾乎一樣,只是Mattermost不需要指定channel名,我們只需要在創建webhook時指定對的名稱就可以了。

告警的截圖我就從Mattermost截取了,差別不是很大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章