近期接到工作任务,需要研究监控告警。
仅以本文记录一下整个实现过程。不足之处,欢迎指出。
因为本公司平时办公需要用到钉钉,所以选择研究一下钉钉告警,以供后期项目使用。
1.下载钉钉pc版,获取钉钉机器人Webhook 地址
手机端无法进行添加机器人的操作,请自行百度下载安装钉钉pc版。
由于机器人是将消息推送到群,需要预先建立好一个群,这里先创建了一个名为“监控报警”的群作为接收消息的群。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL6FlaNNzZ65kMNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2AjNyQjNwETM0EzNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
下面我们开始添加机器人的操作,点击左上角账号名-设置:
找到机器人管理栏,点击“前往设置”
选择“自定义”:
设置机器人的基本信息,这里注意设置好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地址加入到里面即可。