钉钉在 2 月 26 日发布的新版本中,增加了一个群机器人功能,群机器人可以聚合第三方信息到钉钉群聊,让信息同步更高效。目前支持 GitHub、GitLab、Trello、JIRA 等机器人,还支持自定义开发的机器人。
以下是官方的介绍,也可以查看 钉钉机器人文档。
群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步;通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。不仅如此,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警提醒通过自定义机器人聚合到钉钉群。
新·推荐使用 zcate
点这里查看如何使用 zabbix客户端 zcate 来接收告警消息
自定义机器人
钉钉提供了一个 webhook 地址,https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
。
获取到Webhook地址后,用户可以使用任何方式向这个地址发起 HTTP POST 请求,即可实现给该群组发送消息。注意,发起POST请求时,必须将字符集编码设置成 UTF-8
。
当前自定义机器人支持文本(text)、连接(link)、markdown(markdown)三种消息类型,大家可以根据自己的使用场景选择合适的消息类型,达到最好的展示样式。具体的消息类型参考下一节内容。
自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员,在收到该消息时,会有@消息提醒(免打扰会话仍然通知提醒,首屏出现“有人@你”)
zabbix 钉钉机器人
<s>目前计划开发支持在群聊中报警的 zabbix 插件。</s>
已经开发完成,您可以去下载使用了。
您也可以参考之前本站提供的 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
。
创建报警媒介
根据下图的描述,创建你的报警媒介。
请不要遗漏脚本参数,不然会导致收不到消息。
创建动作
创建报警动作。
默认信息
<?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>
为用户增加报警媒介
为用户增加报警媒介以后,用户才能收到消息。
完成
配置很简单,到这里应该就可以收到消息了。
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写到文件。
**可以加入 QQ 群获取支持:
zCate 是一个便于在手机上查看 zabbix 问题和图表的客户端 (496866327),
zabbix(195665368)**
捐赠
如果觉得对你有帮助,可以捐赠支持作者。
已经测试没问题,谢谢!但有小建议,这个群聊没有颜色标识,无法直观区分故障或恢复。是否可以更加直观的标记出来?
钉钉机器人不支持添加颜色,您可以直接这样设置。
<name>[故障]{TRIGGER.NAME}</name>
<name>[恢复]{TRIGGER.NAME}</name>
如何添加别的信息,例如在报出故障携带客户名称以减少缺人客户的时间
谢谢!
我来试试。