您的位置:首页 > 移动开发 > 微信开发

zabbix微信报警(更新2017年6月)

2017-04-27 18:54 113 查看
一、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])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zabbix