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

浙公网安备 33010602011771号