近期接到工作任務,需要研究監控告警。
僅以本文記錄一下整個實作過程。不足之處,歡迎指出。
因為本公司平時辦公需要用到釘釘,是以選擇研究一下釘釘告警,以供後期項目使用。
1.下載下傳釘釘pc版,擷取釘釘機器人Webhook 位址
手機端無法進行添加機器人的操作,請自行百度下載下傳安裝釘釘pc版。
由于機器人是将消息推送到群,需要預先建立好一個群,這裡先建立了一個名為“監控報警”的群作為接收消息的群。

下面我們開始添加機器人的操作,點選左上角賬号名-設定:
找到機器人管理欄,點選“前往設定”
選擇“自定義”:
設定機器人的基本資訊,這裡注意設定好ip位址(白名單),否則無法進行消息發送。這裡的ip最初我設定的是伺服器内網位址:192.xxx.xxx.xxx。【此處有坑,請看5.錯誤排查處的處理】
記錄好下面的Webhook位址。後面修改配置資訊的時候需要這個位址。
2.釘釘插件的安裝和配置
在伺服器端安裝釘釘插件。
安裝指令如下:
(1)下載下傳安裝包
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v1.4.0/prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz
(2)解壓
tar -zxvf prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz -C /usr/local/
(3)重命名
mv prometheus-webhook-dingtalk-1.4.0.linux-amd64 /usr/local/dingtalk/
修改config.yml 檔案中的 url 後面的值資訊為複制出機器人的Webhook位址,删除消息模闆的位址處的注釋:
cp config.example.yml config.yml
vim config.yml
修改消息模闆内容:
{{ define “ding.link.title” }}{{ template “legacy.title” . }}{{ end }}
{{ define “ding.link.content” }}
{{ if gt (len .Alerts.Firing) 0 -}}
告警清單:
{{ template “__text_alert_list” .Alerts.Firing }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
恢複清單:
{{ template “__text_resolve_list” .Alerts.Resolved }}
{{- end }}
{{- end }}
啟動插件并将日志存于dingding.log中:
/usr/local/dingtalk/prometheus-webhook-dingtalk --log.level=info > dingding.log 2>&1 &
檢查日志檔案,level=info,無level=error的日志資訊即可初步判定啟動正常:
标記處http://localhost:8060/dingtalk/webhook1/send這個位址在後面alertmanager的配置中會使用。
3.alertmanager配置
vim alertmanager.yml
route:
group_by: [‘alertname’]
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: ‘ops_dingding’ #預設的接收器
#發送釘釘告警
receivers:
-
name: ‘ops_dingding’
webhook_configs:
-
url: ‘http://192.xxx.xx.xx:8060/dingtalk/webhook1/send’
send_resolved: true
-
重新開機alertmanager。
4.檢視告警
檢查釘釘消息欄。
5.錯誤排查
按以上步驟操作之後,若沒有告警資訊。
(1)檢查prometheus中的告警規則是否有告警,如沒有告警,此處不發送消息則為正常,可自己停掉某個節點,模拟一個告警。
(2)檢查alertmanager及dingtalk的啟動日志是否出現報錯。
vim dingding.log
level=error ts=2021-07-13T07:47:15.311Z caller=dingtalk.go:103 component=web target=webhook1 msg=“Failed to send notification to DingTalk” respCode=310000 respMsg=“ip 110.18x.xx.xxx not in whitelist, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq]”
翻譯一下:
msg=“向DingTalk發送通知失敗”respCode=310000 respMsg=“ip 110.18x.xxx.xxx不在白名單中。
此時很容易聯想到,釘釘設定機器人基本資訊時添加過ip位址。這時候去檢查一下:将日志中提到的ip位址加入到裡面即可。