目前官方内置的第三方通知集成包括:邮件、 即时通讯软件(如Slack、Hipchat)、移动应用消息推送(如Pushover)和自动化运维工具(例如:Pagerduty、Opsgenie、Victorops)。Alertmanager的通知方式中还可以支持Webhook,通过这种方式开发者可以实现更多个性化的扩展支持。
1.Alertmanager 集成 Slack 告警
Slack 作为 IM 办公软件,简单好用,在国外用的特别多,那如何用它来接收 Prometheus 的告警信息。
1.注册slack账号,并创建一个#test频道
地址:https://slack.com/intl/en-cn/
Slack作为一款即时通讯工具,协作沟通主要通过Channel(平台)来完成,用户可以在企业中根据用途添加多个Channel,并且通过Channel来集成各种第三方工具。Slack的强大之处在于在Channel中添加各种第三方服务的集成,用户也可以基于Slack开发自己的聊天机器人来实现一些更高级的能力,例如自动化运维,提高开发效率等。
2.为 #test 频道创建一个 incomming webhooks 应用。
添加成功后Slack会显示Incoming WebHooks配置和使用方式,拷贝 app webhook 地址,后面会用到。
https://hooks.slack.com/services/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
用户只需要使用Post方式向Channel发送需要通知的消息即可,例如,我们可以在命令行中通过curl模拟一次消息通知:
curl -d "payload={'text': 'Channel test.'}" https://hooks.slack.com/services/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
3.在Alertmanager中使用Slack
相关文档:https://api.slack.com/messaging/webhooks 全局申明:在Alertmanager的全局配置中
global:
slack_api_url: https://hooks.slack.com/services/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
这里我们使用在每个receiver中单独钉子自己的slack_configs,方便后面业务的扩展
route:
group_by: ["alertname"]
group_wait: 1m
group_interval: 5m
repeat_interval: 1h
receiver: "test-alert"
routes:
- match:
channel: "slack-test" #这个channel号在prometheus告警规则进行设置用作匹配
severity: "warning" #这个也是在prometheus告警规则中设置的用作匹配
receiver: "slack-alert-test"
repeat_interval: 2h
receivers:
- name: 'slack-alert-test'
slack_configs:
- channel: '#alert-test' #这个是slack的channel名称
api_url: https://hooks.slack.com/services/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
send_resolved: true
title: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }}'
text: |-
{{ range .Alerts }}
*Graph:* <http://xxxx.xxx.xxx.xxx/d/Bkl9bBYik/testr?orgId=1&var-job=testApplicationInstance-6&var-node=192.168.1.2:9100&var-maxmount=%2Fx02&var-nic=eth0|:chart_with_upwards_trend:>
*Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}`
*Description:* {{ .Annotations.description }}
*Details:*
{{ range .Labels.SortedPairs }}{{ if eq .Value "192.168.1.2:10255" }}• *abc:* `test_name`{{ else }} • *{{ .Name }}:* `{{ .Value }}`{{ end }}
{{ end }}
{{ end }}
short_fields: true
评论区