这是使用Golang为zabbix写的一个钉钉报警插件。
可以将zabbix的报警消息推送给钉钉,实现使用钉钉APP接收zabbix的报警消息。
点这里查看如何使用 zabbix客户端 zcate 来接收告警消息
之前也写过ZABBIX云之家报警插件。
钉钉(阿里)和云之家(金蝶)可以免费无限次的给自己的应用推送消息,而微信有很多限制,要实现推送消息,首先需要缴费认证才可以,所以选择了钉钉和云之家。
更新:ZABBIX微信报警插件
更新:2017-01-09 13:08 增加了对消息内 url 字段支持。
更新:ZABBIX 手机版
更新:钉钉机器人报警到群聊
更新:2017-09-19 完善了log,支持了3.4的恢复消息。
下面的教程仅支持zabbix3.0及以上版本。。
程序使用方法
实际上,本程序是这样发送消息的,下面zabbix配置完成以后,就可以这样调用这个程序来发送消息。
golang-zabbix-alter-to-dingding.exe -agentid=794723 -corpid=dingd6757aa75040e32b -corpsecret=z C5Jbed9Sx8o9ZwfN4QgFo420WWlKw8NbSDYvk6Qin7gflFIIYLSeq4ZrdOVpk1o -to=manager5675 -msg="{ "from": "Tomcat03" , "time": "2016.07.28 14:45:24", "level": "Warning", "name": "Response time is too high on Tomcat03", "key": "icmppingsec ", "value": "31ms", "now": "31ms", "id": "1618", "ip": "10.139.105.107", "color":"FF4A934A", "age":"3m", "reco veryTime":"2016.07.28 14:48:24", "status":"OK" }"
您还可以加 -h 或 --help参数来查看帮助。
E:GitHubgolang-zabbix-alter-to-dingding>golang-zabbix-alter-to-dingding.exe -h Usage of golang-zabbix-alter-to-dingding.exe: -agentid string AgentID,可以在钉钉后台查看,不可空。 -corpid string CorpID,可以在钉钉后台查看,不可空。 -corpsecret string CorpSecret,可以在钉钉后台查看,不可空。 -msg string Json格式的文本消息内容,不可空。 (default "{"from": "千思网","time": "1970-07-01 08:00:00","level": "紧急",t"name": "这是一个千思网(qiansw.com)提供的ZABBIX钉钉报警插件。","key": "icmpping","value": "Down (0)","now": "Down (0)",t"id": "1511","ip": "8.8.8.8"}") -to string 消息的接收人,可以在钉钉后台查看,可空。 (default "@all") -url string 消息内容点击后跳转到的URL,可空。 (default "https://www.qiansw.com/golang-zabbix-alter-to-dingding.html")
下载程序
请使用备用下载,或自行编译,版本最新。
消息效果
下面是部署方法:
- 注册钉钉企业
- 部署报警程序
- 创建报警媒介
- 创建动作
- 为用户增加报警媒介
注册钉钉企业
步骤省略
请按照下图获取agentidcorpidcorpsecret
部署报警程序
下载上面的文件,根据你的系统类型部署32位或64位程序。
部署的目录在/etc/zabbix/zabbix_server.conf中查看。
需要注意的是为程序增加执行权限。
创建报警媒介
根据下图的描述,创建你的报警媒介。
请不要遗漏脚本参数,不然会导致收不到消息。
-agentid-corpid-corpsecret这三个参数请根据你申请到的如实填写。
-to参数您可以省略(移除该项),也可以写一个或多个例如:
-to=user1
-to=user1|user2|user3
创建动作
根据下面图中的描述,创建报警动作。
其中 "color":"FFE61A1A", color后面为消息头部的颜色,您可以自定义。
其中前两位为透明度,后六位为颜色值,您可以通过查询取色器来获取这个颜色值。
动作内容:
1、默认信息
{ "from": "{HOSTNAME1}", "time": "{EVENT.DATE} {EVENT.TIME}", "level": "{TRIGGER.SEVERITY}", "name": "{TRIGGER.NAME}", "key": "{TRIGGER.KEY1}", "value": "{ITEM.VALUE}", "now": "{ITEM.LASTVALUE}", "id": "{EVENT.ID}", "ip": "{HOST.IP}", "color":"FFE61A1A", "age":"{EVENT.AGE}", "status":"{EVENT.STATUS}" }
2、恢复信息
{ "from": "{HOSTNAME1}", "time": "{EVENT.DATE} {EVENT.TIME}", "level": "{TRIGGER.SEVERITY}", "name": "{TRIGGER.NAME}", "key": "{TRIGGER.KEY1}", "value": "{ITEM.VALUE}", "now": "{ITEM.LASTVALUE}", "id": "{EVENT.ID}", "ip": "{HOST.IP}", "color":"FF4A934A", "age":"{EVENT.AGE}", "recoveryTime":"{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}", "status":"{EVENT.RECOVERY.STATUS}" }
2016-08-02增加了xml格式,解决了json中获取zabbix变量不能有引号的问题,推荐使用。
<?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>FFE61A1A</color> <url>这里的url会替换报警媒介的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>{EVENT.RECOVERY.STATUS}</status> </root>
为用户增加报警媒介
为用户增加报警媒介以后,用户才能收到消息。
记录 log
增加了记录log的功能,便于排错。
使用方法: -log=/tmp
表示指定 /tmp
为log目录,会在该目录中按天生成 log。
在 zabbix 中设置请参考下图,最后一个文本框。
结语
到了这里,如果您严格按照我写的步骤操作的话,您应该可以收到消息了。
您还可以创建多个报警媒介、动作中创建多个步骤,来实现消息分级。
例如:
- 1-10条消息仅发送给运维,11条开始也要发送给运维主管。
- 某类的消息发给运维的同时,还要发给DBA。
zabbix是个很灵活的工具,希望大家能使用它来帮助自己做更多的事情。
如果您想查看本程序的源码,请访问Github:https://github.com/internelp/golang-zabbix-alter-to-dingding
获取支持
**可以加入 QQ 群获取支持:
zCate 是一个便于在手机上查看 zabbix 问题和图表的客户端 (496866327),
zabbix(195665368)**
捐赠
如果觉得对你有帮助,可以捐赠支持作者。
2018/09/17 16:23:32 Get https://oapi.dingtalk.com/gettoken?corpid=******&corpsecret=******: dial tcp 47.88.131.4:443: i/o timeout
楼主 麻烦帮我看看这个报错,之前是可以报警的 现在触发器触发了,但是监控面板哪里动作显示失败,之前是一直正常使用,好像也没改过其他配置,帮我看看这个错误怎么解决?非常感谢,望回复
可以加群,文章结尾有群号。
日志中就是请求超时了,建议手动模拟请求该网址测试一下。
请检查网络。
麻烦能不能加下你微信或者qq,帮我看看什么问题,之前公司监控系统一直用这个,都是很好的,就是上次就不行了,到现在还没恢复,服务器里面zabbix功能正常,就是最后一步推送的时候失败
网络确定没问题,我在多个环境多个区域试了,都是这个报错,钉钉报警一直发不出
我收到很多系统预分配内存的报错,这个怎么设置不报?谢谢!
三言两语说不清楚,还是要自己研究一下策略。
这个可以在 zabbix 中设置策略。
具体是怎么设置的?可以说一下吗?
您好,老师,我新手,看了5六次还是搭建不出监控报警,很是伤脑筋,能不能就加你QQ,帮我远程,我会给你红包感谢,谢谢!我QQ1550579516,加我信息:钉钉监控
您好,老师,我新手,看了5六次还是搭建不出监控报警,很是伤脑筋,能不能就加你QQ,帮我远程,我会给你红包感谢,谢谢!我QQ1550579516,加我信息:钉钉监控
请教消息颜色是如何实现?我是用 html 标签发现只有 PC 端能实现,APP 端消息都没有颜色
现在的版本只有名字有颜色了。
2017/07/20 09:11:04 [sendMsg] 钉钉接口返回消息:{"errmsg":"不合法的UserID列表","errcode":40031}
大神,我也遇到UserID的问题,UserID在钉钉后台哪里查看?求指教
你加群问问
偶像你好,我的钉钉只能收到3条短信,然后就再也收不到了,没有重复信息,是什么原因呢?
我的告警动作和你的是一样的,但是有问题,五个告警信息,只能收到三个告警,而且收不到恢复的告警
195665368 加群明天看看。
感谢博主分享,请教一个问题,为什么钉钉成功接收一条消息后就在也收不到消息了,我直接在命令行下运行golang程序提示如下信息,不知道是不是钉钉限制了什么啊
2017/03/13 16:38:11 [sendMsg] 钉钉接口返回消息:{"invalidparty":"","forbiddenUserId":"managerxxxx","messageId":"8e2e717673303f4d863911e34702ba7a","errmsg":"ok","invaliduser":"","errcode":0}
-to 参数后面接钉钉user-id是正确的
你看看是不是限制重复信息,你把消息内容变更一下试试。
博主正解,果然是内容重了就发送不出,改了一下内容就Ok了,感谢博客解答!
感谢楼主付出,刚配置好时不加-to参数还能群发,今天不能使用群发了,只能用-to=uerid1|userid2的方式了,这是怎么回事啊?
我看了下钉钉的开发者文档,貌似这个接口有次数限制了。具体可以咨询下钉钉官方。
我空闲的时候看看。
https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.IqpUIh&treeId=172&articleId=104973&docType=1
嗯,-to那个地方传参有字节限制,人多了就不能用了,还得新建报警媒介
你试试-to=all,如果不行的话,就去钉钉看看开发者文档吧。
还是不行☺,这个可以加个到部门的参数,这样用起来应该更方便
楼主,现在测试成功,感谢你的辛苦付出!
现在是手机端点击信息会跳转到本页面上来,
电脑端点击信息不会跳转,提示页面开发中。。。。
这2个问题从哪 里解决,如何才能跳转到报警详情上面去
很高兴能帮上你,觉得有用的话可以推荐给其他朋友。
你仔细看一下 xml 例子,里面有个 url,可以替换成你的 url。
感谢你的快速回复,我忽略了xml配置,感谢提示
这里的url会替换报警媒介的url
使用这个替换成你自己的 url
触发器中文的话,xml 格式的消息好像发送过不了
你看一下动作日志
可以呀,我一直在用的。
已经可以了
请问,-to参数后填写的是UserID,还是钉钉账号或者其他?Action log中状态显示为发送,但是钉钉依然没有收到消息,请问何故?
to参数是userid,可以在钉钉后台查看。
zabbix 的 Action log 只要执行这个程序成功后就显示为发送了,不一定是发送成功。
{"errcode":40031,"errmsg":"不合法的UserID列表"}
这个很明显是你配置的有问题,贴出来看看。
请教楼主,现在遇到个问题:钉钉报警一天内收到200条后,就再也收不到了,是哪里做限制了呢?不是说无限制推送的吗?
可以咨询一下钉钉官方。
程序是没有限制的,你可以看看zabbix是不是有这方面的设置。
咨询过官方,他们的回复是需要找开发这个脚本的平台的人才行呢。
今天发现-to=xxxx,这个参数一定要写,不写的话,收不到钉钉信息。
但是如果用-to=user1|user2,这个方式,第二人收不到,如何处理???
谢谢!
OK,是我设置USERID的问题,更正后,可以使用-to=user1|user2这个方式了。
再请教个问题,不知道PC端的钉钉报警显示不全是否可以解决
应该是钉钉的问题吧,想办法把这个值放到其他地方,比如标题里。
其实2.x的也可以实现, 另外写个小脚本,套用这个dingding脚本,把一些参数写死进去, -msg=“$3” -to=“$1”,用户的报警媒介上填写用户自己的ID,这样做更方便, 可以直接在web页面上定义接收人。
脚本内容是这样的:/var/lib/zabbixsrv/alertscripts/ding -agentid=xxxx -corpid=xxxxxx -corpsecret=xxxxxxxx -style=xml -msg=$3 -to=$1\n\n(ding这个脚本就是golang-zabbix-alter-to-dingding-linux64脚本,是我自己用源码编译的,你也可以使用原来的)
有个问题,就是报警恢复的时候,钉钉常收到的告警还是显示红色的,并没有变成绿色,请问博主有遇到过么?
应该是配置有问题
zabbix 报表——动作日志。
看一下具体消息内容就知道怎么回事了。
配置是ok的,感觉像是zabbix 的问题,因为发现其他同事收到的是正常的