一、zabbix微信报警
第一步:申请企业微信号
传送门:https://qy.weixin.qq.com
添加通讯组并添加成员,记住部门ID:
2.添加应用加入可见成员,记住应用ID。注意需要上传LOGO
3.设置管理组权限,并记住CorpID Secret两个值,后面要用到
微信接口调试传送门:http://qydev.weixin.qq.com/debug
第二步:编写脚本
添加微信指定脚本路径:
vim /usr/local/zabbix/etc/zabbix_server.conf
AlertScriptsPath=/usr/local/zabbix/etc/alertscripts
创建目录必须是这个名字,在目录下创建wechat.sh脚本文件
使用:curl -s -G url 获取 AccessToken
使用:curl --data url 传送凭证调用企业号接口
mkdir -p /usr/local/zabbix/etc/alertscripts
vim wechat.sh
#!/bin/sh #wechat zabbix baojing CorpID=wxdc65a6980bf6 //公司的ID(corpid) Secret=X3E6OmqpKXhzcntvnFrsmMRqr-MAgxesp9rLaVSOWrhqQP //公司cercret(corpsecret) GURL=" //获取AccessToken Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}') //调用接口凭证AccessToken PURL=" //调用接口发送消息 function body() { //使用函数定义json格式消息 local int AppID=1 //企业应用ID local UserID=$1 //成员ID列表,多个以“|”分隔,经测试填写别的用户也可以发送消息,只是会有个无效用户提示 local PartyID=2 //部门ID定义 local Msg=$(echo "$@" | cut -d" " -f3-) //获取发送消息内容 printf '{\n' printf '\t"touser": "'"$UserID"\"",\n" printf '\t"toparty": "'"$PartyID"\"",\n" printf '\t"msgtype": "text",\n' printf '\t"agentid": "'"$AppID"\"",\n" printf '\t"text": {\n' printf '\t\t"content": "'"$Msg"\""\n" printf '\t},\n' printf '\t"safe":"0"\n' printf '}\n' } #zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容 /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
chown -R zabbix.zabbix /usr/local/zabbix/etc/alertscripts
chmod 750 /usr/local/zabbix/etc/alertscripts/wechat.sh
执行./wechat.sh 1 1 test 看自己微信是否能收到东西。
如果能的话,继续下一步。反之检查上面有什么问题
./wechat.sh 1 1 test
{"errcode":0,"errmsg":"ok"}
重启服务:
/etc/init.d/zabbix_server restart
第三步:登陆zabbix页面,配置触发器,媒介和动作
创建媒介wechat,类型为脚本:
注意:zabbix3.0后面要传三个参数
{ALERT.SECDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
创建用户,并将用户加入到管理组:
用户关联媒介为wechat,收件人为部门ID或用户:
调整用户权限为超级用户:
创建动作:
默认接收人:{TRIGGER.STATUS}
默认信息:
\n
主机:{HOSTNAME1}\n
地址:{HOST.IP}\n
时间:{EVENT.DATE}:{EVENT.TIME}\n
事件:{TRIGGER.NAME}\n
级别:{TRIGGER.SEVERITY}\n
项目:{TRIGGER.KEY1}\n
状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
恢复消息:
服务器:{HOSTNAME1}现在:{TRIGGER.STATUS}
\n
主机:{HOSTNAME1}\n
地址:{HOST.IP}\n
时间:{EVENT.DATE}:{EVENT.TIME}\n
事件:{TRIGGER.NAME}\n
级别:{TRIGGER.SEVERITY}\n
项目:{TRIGGER.KEY1}\n
状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
设置发送用户:
关闭被监控机,测试看能收到信息:
到此微信报警完成,附上python脚本:
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib,urllib2,json import sys reload(sys) sys.setdefaultencoding( "utf-8" ) class WeChat(object): __token_id = '' # init attribute def __init__(self,url): self.__url = url.rstrip('/') self.__corpid = '企业ID' self.__secret = '企业sercret' # Get TokenID def authID(self): params = {'corpid':self.__corpid, 'corpsecret':self.__secret} data = urllib.urlencode(params) content = self.getToken(data) try: self.__token_id = content['access_token'] # print content['access_token'] except KeyError: raise KeyError # Establish a connection def getToken(self,data,url_prefix='/'): url = self.__url + url_prefix + 'gettoken?' try: response = urllib2.Request(url + data) except KeyError: raise KeyError result = urllib2.urlopen(response) content = json.loads(result.read()) return content # Get sendmessage url def postData(self,data,url_prefix='/'): url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id request = urllib2.Request(url,data) try: result = urllib2.urlopen(request) except urllib2.HTTPError as e: if hasattr(e,'reason'): print 'reason',e.reason elif hasattr(e,'code'): print 'code',e.code return 0 else: content = json.loads(result.read()) result.close() return content # send message def sendMessage(self,touser,message): self.authID() data = json.dumps({ 'touser':touser, //成员ID 'toparty':"2", //部门ID 'msgtype':"text", //固定消息类型为文本 'agentid':"1", //应用ID 'text':{ 'content':message //消息内容 }, 'safe':"0" },ensure_ascii=False) response = self.postData(data) print response if __name__ == '__main__': a = WeChat('https://qyapi.weixin.qq.com/cgi-bin') a.sendMessage(sys.argv[1],sys.argv[3])