这是使用Golang为zabbix写的一个钉钉报警插件。
可以将zabbix的报警消息推送给钉钉,实现使用钉钉APP接收zabbix的报警消息。

之前也写过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:\GitHub\golang-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")
下载程序

请使用备用下载,或自行编译,版本最新。

消息效果

dingding

下面是部署方法:

  • 注册钉钉企业
  • 部署报警程序
  • 创建报警媒介
  • 创建动作
  • 为用户增加报警媒介
注册钉钉企业

步骤省略
请按照下图获取agentid\corpid\corpsecret
dingding-1

dingding-2

部署报警程序

下载上面的文件,根据你的系统类型部署32位或64位程序。
部署的目录在/etc/zabbix/zabbix_server.conf中查看。
需要注意的是为程序增加执行权限。
zabbix-alertscripts
alertscripts

创建报警媒介

根据下图的描述,创建你的报警媒介。
请不要遗漏脚本参数,不然会导致收不到消息。
-agentid-corpid-corpsecret这三个参数请根据你申请到的如实填写。
-to参数您可以省略(移除该项),也可以写一个或多个例如:
-to=user1
-to=user1|user2|user3
zabbix-alter-media
zabbix-alter-media-details
 

创建动作

根据下面图中的描述,创建报警动作。
其中 "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}"
}

action

action-details-1

action-details-2

2016-08-02增加了xml格式,解决了json中获取zabbix变量不能有引号的问题,推荐使用。

zabbix-action-details-xml

zabbix-media-details-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>
  <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>
为用户增加报警媒介

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

zabbix-user-1

zabbix-user-2

zabbix-user-3

记录 log

增加了记录log的功能,便于排错。

使用方法: -log=/tmp 表示指定 /tmp 为log目录,会在该目录中按天生成 log。

在 zabbix 中设置请参考下图,最后一个文本框。

QQ图片20170919145252.png

结语

到了这里,如果您严格按照我写的步骤操作的话,您应该可以收到消息了。
您还可以创建多个报警媒介、动作中创建多个步骤,来实现消息分级。
例如:

  1. 1-10条消息仅发送给运维,11条开始也要发送给运维主管。
  2. 某类的消息发给运维的同时,还要发给DBA。

zabbix是个很灵活的工具,希望大家能使用它来帮助自己做更多的事情。
如果您想查看本程序的源码,请访问Github:https://github.com/internelp/golang-zabbix-alter-to-dingding

欢迎加QQ群交流ZABBIX:195665368

捐赠

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

捐赠.jpg