TL;DR

Disclaimer: Personally I dislike DingTalk(a.k.a DingDing) at all 😜.

Project Repo: https://github.com/timonwong/prometheus-webhook-dingtalk

Why

在敝人的「忽悠」下,敝厂在 2016 年中就全面使用了 Prometheus 作为监控系统,这个系统现在已经比较火了,这里就不再多加口舌阐述。后来,敝厂使用了钉钉作为公司内部的指定通(dă)讯(kă)软件,取代了 Slack。不得不说,比起 Slack 来,显示报警通知,钉钉不美观。

按照我个人的看法,一个合格的报警通知,应该包含如下内容:

  • 报警级别
  • 简短的报警名称
  • 简要说明
  • 详细说明
  • 附加上下文信息
  • 一个链接,点击后进入指标的 Graph

幸运的是,Prometheus 已经包含了一个做得比较好的 Slack 报警模板,只需要从这里开始就可以了。

Routes

prometheus-webhook-dingtalk 默认监听在8060端口(可配置)上,提供了以下路由供 AlertManagerwebhook_configs 使用:

  • /dingtalk/<profile>/send

注意这里的 <profile> 需要在 -ding.profile 中指定相应的名称(<profile>)以及钉钉的自定义机器人 WebHook URL(<dingtalk-webhook-url>)。

Usage

首先,我个人不喜欢随处都是配置文件的现象,因此 prometheus-webhook-dingtalk 的所有配置通过命令行参数完成:

1
2
3
4
5
6
7
8
9
10
11
usage: prometheus-webhook-dingtalk --ding.profile=DING.PROFILE [<flags>]
Flags:
-h, --help Show context-sensitive help (also try --help-long and --help-man).
--web.listen-address=":8060"
The address to listen on for web interface.
--ding.profile=DING.PROFILE ...
Custom DingTalk profile (can specify multiple times, <profile>=<dingtalk-url>).
--ding.timeout=5s Timeout for invoking DingTalk webhook.
--log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]
--version Show application version.

关于这里的 -ding.profile 参数:为了支持同时往多个钉钉自定义机器人发送报警消息,因此 -ding.profile 可以在命令行中指定多次,比如:

1
2
3
prometheus-webhook-dingtalk \
--ding.profile="webhook1=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx" \
--ding.profile="webhook2=https://oapi.dingtalk.com/robot/send?access_token=yyyyyyyyyyy"

这里就定义了两个 WebHook,一个 webhook1,一个 webhook2,用来往不同的钉钉组发送报警消息。

然后在 AlertManager 的配置里面,加入相应的 receiver(注意下面的 url)即可:

1
2
3
4
5
6
7
8
9
receivers:
- name: send_to_dingding_webhook1
webhook_configs:
- send_resolved: false
url: http://localhost:8060/dingtalk/webhook1/send
- name: send_to_dingding_webhook2
webhook_configs:
- send_resolved: false
url: http://localhost:8060/dingtalk/webhook2/send

In Action

参见官方文章:https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1,然后将 webhook 地址拷贝下来,传给 prometheus-webhook-dingtalk

最后,来个截图看看效果吧: