钉钉在 2 月 26 日发布的新版本中,增加了一个群机器人功能,群机器人可以聚合第三方信息到钉钉群聊,让信息同步更高效。目前支持 GitHub、GitLab、Trello、JIRA 等机器人,还支持自定义开发的机器人。

钉钉机器人上线

以下是官方的介绍,也可以查看 钉钉机器人文档

群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步;通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。不仅如此,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警提醒通过自定义机器人聚合到钉钉群。

自定义机器人

钉钉提供了一个 webhook 地址,https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx

获取到Webhook地址后,用户可以使用任何方式向这个地址发起 HTTP POST 请求,即可实现给该群组发送消息。注意,发起POST请求时,必须将字符集编码设置成 UTF-8

当前自定义机器人支持文本(text)、连接(link)、markdown(markdown)三种消息类型,大家可以根据自己的使用场景选择合适的消息类型,达到最好的展示样式。具体的消息类型参考下一节内容。

自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员,在收到该消息时,会有@消息提醒(免打扰会话仍然通知提醒,首屏出现“有人@你”)

zabbix 钉钉机器人

目前计划开发支持在群聊中报警的 zabbix 插件。

已经开发完成,您可以去下载使用了。
您也可以参考之前本站提供的 ZABBIX 钉钉报警插件,这个则是以应用的方式发送消息而不是发送到群聊。

配置钉钉机器人

请参考钉钉文档配置。

配置 zabbix

下载程序

下载 zabbix 钉钉报警机器人 - 向钉钉群聊中发送报警消息

下载完成后,您可以直接在Linux中执行该程序进行测试。

通过下面方法,可以快速验证自定义机器人是否可以正常工作:

./golang-zabbix-robot-64 -webhook=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx

部署程序

部署的目录在/etc/zabbix/zabbix_server.conf中查看。
将下载好的程序上传至服务器报警程序目录,需要注意的是不要忘记为程序增加执行权限 chmod +x golang-zabbix-robot

查看报警程序部署的路径

创建报警媒介

根据下图的描述,创建你的报警媒介。
请不要遗漏脚本参数,不然会导致收不到消息。

创建报警媒介

报警媒介配置.jpg

创建动作

创建报警动作。

默认信息

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <from>{HOSTNAME1}</from>
  <time>{EVENT.DATE} {EVENT.TIME}</time>
  <level>{TRIGGER.SEVERITY}</level>
  <name>{TRIGGER.NAME}</name>
  <key>{TRIGGER.KEY1}</key>
  <value>{ITEM.VALUE}</value>
  <now>{ITEM.LASTVALUE}</now>
  <id>{EVENT.ID}</id>
  <ip>{HOST.IP}</ip>
  <url>这里是点击报警消息可以访问的链接地址</url>
  <age>{EVENT.AGE}</age>
  <status>{EVENT.STATUS}</status>
<acknowledgement> {EVENT.ACK.STATUS} </acknowledgement>
<acknowledgementhistory> {EVENT.ACK.HISTORY}</acknowledgementhistory>
</root>

恢复信息

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <from>{HOSTNAME1}</from>
  <time>{EVENT.DATE} {EVENT.TIME}</time>
  <level>{TRIGGER.SEVERITY}</level>
  <name>{TRIGGER.NAME}</name>
  <key>{TRIGGER.KEY1}</key>
  <value>{ITEM.VALUE}</value>
  <now>{ITEM.LASTVALUE}</now>
  <id>{EVENT.ID}</id>
  <ip>{HOST.IP}</ip>
  <color>FF4A934A</color>
  <url>这里的url会替换报警媒介的url</url>
  <age>{EVENT.AGE}</age>
  <recoveryTime>{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}</recoveryTime>
  <status>OK</status>
</root>

有用户使用3.2版本时,发送消息失败,请尝试将上述xml格式的换行去掉后重新测试。

<?xml version="1.0" encoding="UTF-8" ?><root>  <from>{HOSTNAME1}</from>  <time>{EVENT.DATE} {EVENT.TIME}</time>  <level>{TRIGGER.SEVERITY}</level>  <name>{TRIGGER.NAME}</name>  <key>{TRIGGER.KEY1}</key>  <value>{ITEM.VALUE}</value>  <now>{ITEM.LASTVALUE}</now>  <id>{EVENT.ID}</id>  <ip>{HOST.IP}</ip>  <url>这里是点击报警消息可以访问的链接地址</url>  <age>{EVENT.AGE}</age>  <status>{EVENT.STATUS}</status><acknowledgement> {EVENT.ACK.STATUS} </acknowledgement><acknowledgementhistory> {EVENT.ACK.HISTORY}</acknowledgementhistory></root>

报警动作.jpg

报警动作.jpg

报警动作配置.jpg

为用户增加报警媒介

为用户增加报警媒介以后,用户才能收到消息。

为用户增加报警媒介

为用户增加报警媒介-1

为用户增加报警媒介细节.jpg

完成

配置很简单,到这里应该就可以收到消息了。

zabbix钉钉机器人报警.jpg

2.4 配置

zabbix 3.0 以后,报警消息内容格式发生变化,3.0以前的版本使用脚本中转一下即可。报警媒介中填写成根据下面内容创建的脚本名称,如 zabbix-robot.sh。注意双引号不要更换,否则会出错。

#!/bin/bash
webhook="https://oapi.dingtalk.com/robot/send?access_token=xxx"
/zabbix/share/zabbix/alertscripts/golang-zabbix-robot-64 -webhook=$webhook -msg="$3"

日志与调试

2017/4/28 增加了写到日志功能,方便调试以及排查错误。

为保证日志路径不会填写错误,程序要求先创建一个空的日志文件,以 CentOS 为例,讲解用法:

1、创建一个空的日志文件 /tmp/dingding.log

touch /tmp/dingding.log

2、为刚才创建的文件授予合适的权限,保证 zabbix 用户可以读写。

chmod 0644 /tmp/dingding.log
chown zabbix /tmp/dingding.log

上述方法只适用于zabbix由zabbix用户启动的情况,实际要根据您的实际情况变更。

如果您不知道如何设置,请直接授予 777 权限。

chmod 0777 /tmp/dingding.log

3、在 zabbix 后台配置,使其将log写到文件。

钉钉机器人记录日志.jpg


欢迎加QQ群交流ZABBIX:195665368

捐赠

如果觉得对你有帮助,可以捐赠支持作者。

捐赠.jpg