Alertmanager結合Slack使用


Slack作為一款即時通訊工具,協作溝通主要通過Channel(平台)來完成,用戶可以在企業中根據用途添加多個Channel,並且通過Channel來集成各種第三方工具。
例如,我們可以為監控建立一個單獨的Channel用於接收各種監控信息:

通過一個獨立的Channle可以減少信息對用戶工作的干擾,並且將相關信息聚合在一起:

Slack的強大之處在於在Channel中添加各種第三方服務的集成,用戶也可以基於Slack開發自己的聊天機器人來實現一些更高級的能力,例如自動化運維,提高開發效率等。

添加應用:Incomming Webhooks

為了能夠在Monitoring中接收來自Alertmanager的消息,在Channel的設置選項中使用"Add an App"為Monitoring channel添加一個名為Incoming WebHooks的應用:



添加成功后Slack會顯示Incoming WebHooks配置和使用方式:

Incomming Webhook的工作方式很簡單,Slack為當前Channel創建了一個用於接收消息的API地址:

用戶只需要使用Post方式向Channel發送需要通知的消息即可.,例如,我們可以在命令行中通過curl模擬一次消息通知:

curl -X POST --data-urlencode "payload={\"channel\": \"#monitoring\", \"username\": \"webhookbot\", \"text\": \"This is posted to #monitoring and comes from a bot named webhookbot.\", \"icon_emoji\": \":ghost:\"}" https://hooks.slack.com/services/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

除了發送純文本以外,slack還支持在文本內容中添加鏈接,例如:

payload={"text": "A very important thing has occurred! <https://alert-system.com/alerts/1234|Click here> for details!"}

此時接收到的消息中還包含一個可點擊的超鏈接地址。除了payload以外,Incomming Webhhook還支持一些其他的參數:

例如,使用以上參數發送一條更有趣的消息:

curl -X POST --data-urlencode "payload={'channel': '#monitoring', 'username': 'webhookbot', 'text': 'This is posted to #monitoring and comes from a bot named webhookbot.', 'icon_emoji': ':ghost:'}" https://hooks.slack.com/services/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

在網絡正常的情況下,在Channel中會顯示新的通知信息,如下所示:

結合AlertManager使用

在Alertmanager的全局配置中,將Incomming Webhhook地址作為slack_api_url添加到全局配置中即可:

global:
  slack_api_url: https://hooks.slack.com/services/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

也可以在每個receiver中單獨定義自己的slack_configs即可:

receivers:
- name: slack
  slack_configs:
    - channel: '#monitoring'
      send_resolved: true

收到的告警示例:

對於Incomming Webhhook支持的其它自定義參數,也可以在slack_config中進行定義,slack_config的主要配置如下:

channel: <tmpl_string>
[ send_resolved: <boolean> | default = false ]
[ api_url: <secret> | default = global.slack_api_url ]
[ icon_emoji: <tmpl_string> ]
[ icon_url: <tmpl_string> ]
[ link_names: <boolean> | default = false ]
[ username: <tmpl_string> | default = '{{ template "slack.default.username" . }}' ]
[ color: <tmpl_string> | default = '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}' ]
[ footer: <tmpl_string> | default = '{{ template "slack.default.footer" . }}' ]
[ pretext: <tmpl_string> | default = '{{ template "slack.default.pretext" . }}' ]
[ text: <tmpl_string> | default = '{{ template "slack.default.text" . }}' ]
[ title: <tmpl_string> | default = '{{ template "slack.default.title" . }}' ]
[ title_link: <tmpl_string> | default = '{{ template "slack.default.titlelink" . }}' ]
[ image_url: <tmpl_string> ]
[ thumb_url: <tmpl_string> ]

如果要覆蓋默認的告警內容,直接使用Go Template即可。例如:

color: '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM