zabbix 微信告警
1.要用微信企业号发送告警,首先要申请微信企业号
申请地址:https://qy.weixin.qq.com/,
参考:http://www.cnblogs.com/hanyifeng/p/5368102.html
2.申请好了企业号后,登陆,通讯录---组织架构(分组)---新增成员
3.部门ID记住(重要)
4.应用中心--新建应用
5.应用名称,功能介绍及应用课件范围
6.现在去设置-->功能设置-->权限管理,最重要的是CorpID,Secret 两个密钥,后期脚本里会利用它俩生成一个token ,然后利用token 去发送消息
7.微信消息发送脚本,
shell脚本
#!/bin/bash ######################################################################### # File Name: wechat.sh # Author: shaonbean # Email: shaonbean@qq.com # Created Time: Sun 24 Jul 2016 05:48:14 AM CST ######################################################################### # Functions: send messages to wechat app # set variables CropID='wx53c1fe6d7584c1eed1' Secret='EnuiCmS2XOktkZni_HyRmX9TEhv6sL2yrGeDvP1x7agp0NiKBqaXFX3e1W_eO4eenO' GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" #get acccess_token Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}') PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" # function body() { local int AppID=1 #企业号中的应用id local UserID="smi" #部门成员id,zabbix中定义的微信接收者 local PartyID=3 #部门id,定义了范围,组内成员都可接收到消息 local Msg=$(echo "$@" | cut -d" " -f3-) #过滤出zabbix传递的第三个参数 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' } /usr/bin/curl --data-ascii "$(body $! $2 $3)" $PURL #http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式 #测试:
pyhto脚本
#!/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 = '你的Corpid' self.__secret = '你的SecretID' # 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, 'toparty':"2", 'msgtype':"text", 'agentid':"2", '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])
14行、15行,65行、67行 说明下,67行是你的组部门id号,agentid是你应用id号。。。。 记得修改脚本权限,属主,放到和mail.sh同级目录下。
8.在zabbix服务器测试 一下,脚本包含及授权权限zabbix.用户及组
[root@zabbix ~]# vim /usr/local/zabbix_server/etc/zabbix_server.conf # 脚本路径 AlertScriptsPath=/usr/local/zabbix_server/share/zabbix/alertscripts [root@zabbix alertscripts]# ./webchat.sh test test {u'errcode': 0, u'errmsg': u'ok'} [root@zabbix alertscripts]# chown zabbix.zabbix webchat.sh
9.登录zabbix--管理--报警媒介类型--创建媒介类型
脚本名称:webchat.sh 【脚本路径在zabbix_server.conf文件中配置】
脚本参数:
{ALERT.SENDTO} # 接收人
{ALERT.SUBJECT} # 标题
{ALERT.MESSAGE} # 发送内容
10.添加完成后,创建用户
11.报警媒介--添加--类型(选择媒介)--收件人(1)--表示发给邮件管理组
12.创建报警动作
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!\n
---------------------------------------\n
详细信息:\n
告警主机:{HOSTNAME1}\n
告警时间:{EVENT.DATE} {EVENT.TIME}\n
告警等级:{TRIGGER.SEVERITY}\n
告警信息:{TRIGGER.NAME}\n
告警项目:{TRIGGER.KEY1}\n
问题详情:{ITEM.NAME}:{ITEM.VALUE}\n
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}\n
事件ID:{EVENT.ID}\n
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!\n
---------------------------------------\n
详细信息:\n
告警主机:{HOSTNAME1}\n
告警时间:{EVENT.DATE} {EVENT.TIME}\n
告警等级:{TRIGGER.SEVERITY}\n
告警信息:{TRIGGER.NAME}\n
告警项目:{TRIGGER.KEY1}\n
问题详情:{ITEM.NAME}:{ITEM.VALUE}\n
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}\n
事件ID:{EVENT.ID}\n
参考文档
http://www.jianshu.com/p/09a5a21b6b47
http://www.cnblogs.com/hanyifeng/p/5368102.html
http://xumingjiang.blog.51cto.com/703960/1885229