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截取了,差別不是很大