一:下载发送程序
zabbix 钉钉报警机器人 - 向钉钉群聊中发送报警消息 (go语言写的脚本,可用 -h查看选项)
测试:
./golang-zabbix-robot-64 -webhook='https://oapi.dingtalk.com/roboxxxxxxxx'
此时你的机器人会发送一个来自于千思网的消息,此时说明golong可用。
接下来就要区分你的zabbix的版本了,以下分别是3.0 3.2 2.4的配置方式
二:zabbix3.0 配置
1、部署程序
将go脚本拷贝至服务端警告目录AlertScriptspath下,添加执行权限。
2、创建报警媒介
3、添加用户或组,加入报警媒介
4、创建动作,创建触发发送条件
三:zabbix3.2 配置
3.2和3.0配置大致一样,只是有部分会发生消息送不到的情况,尝试将上述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> |
恢复信息 <?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 2.4 配置
相对于3版本,2.4 虽经典但是却有点跟不上时代了,公司为了保持稳定,也不敢贸然升级,所以只能对 2.4进行相应的配置了。
1、部署程序
同样在警告目录AlertScriptspath下,添加脚本 zabbix-dingding.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"
2、创建报警媒介
3、创建用户或组,加入报警媒介,同上
4、创建动作,创建触发发送条件,采用3.2格式,不换行
-----------------------------------------------------------------------------------------
附加:通用机器人
有时我们会用自定义的监控脚本,去监控服务状态,或者某个程序等等,怎么对接到钉钉呢?
#!/usr/bin/env python #coding=utf-8 import urllib import urllib2 import json import re f = open('xxxxxxxxxx','r') #取文件的内容发送 your_data = f.read() f.close() #print your_data headers = {'Content-Type': 'application/json'} test_data = { 'msgtype':"text", "text":{ 'content':"%s" % your_data }, "at":{ "atMobiles":[ # "you iphone" ], "isAtAll":"false" } } #requrl = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxx" req = urllib2.Request(url = requrl,headers = headers,data = json.dumps(test_data)) response = urllib2.urlopen(req) |
本文出自 “滕先生” 博客,请务必保留此出处http://tengxiansheng.blog.51cto.com/10693373/1913575