zabbix可以结合企业微信的方式,及时有效的把告警信息推送到接收人。
需要注意的是:支持自定义脚本参数的zabbix版本必须3.0及其以上的版本。
1.
https://qy.weixin.qq.com/去申请微信组织类型的公众号。
2.配置微信公众号。
通讯录--创建子部门--运维部。
3.创建微信发送消息的应用:
微信企业应用--创建应用--选择部门和成员。
4.准备的信息:
微信企业公众号 ,微信公众号已经被部门成员关注。企业微信公众号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员发送消息。
需要得到的信息:
成员账号:LuXu
组织部门ID:2
应用ID:1000002
CorpID:ww498028afbec50345
Secret:8zf-N679AU-aTSV7FwSe9Ih3Tx2XskPlTDoVQKifb9I
5.修改zabbix的脚本存放位置:
grep alertscripts /etc/zabbix/zabbix_server.conf
值为:
AlertScriptsPath=/usr/lib/zabbix/alertscripts
6.设置Python脚本:
安装simplejson:
#wget
https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz #tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
#python setup.py build
#python setup.py install
下载wechat.py脚本:
# yum install git -y
#git clone
https://github.com/X-Mars/Zabbix-Alert-WeChat.git #cp -p Zabbix-Alert-WeChat/wechat.py /usr/lib/zabbix/alertscripts
#cd /usr/lib/zabbix/alertscripts
#chmod 755 wechat.py
#chown zabbix:zabbix wechat.py
#mv wechat.py weixin.py
修改weixin.py脚本:
cat weixin.py:
#!/usr/bin/python
#_*_coding:utf-8 _*_
import urllib,urllib2
import json
import sys
import simplejson
reload(sys)
sys.setdefaultencoding('utf-8')
def gettoken(corpid,corpsecret):
gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
print gettoken_url
try:
token_file = urllib2.urlopen(gettoken_url)
except urllib2.HTTPError as e:
print e.code
print e.read().decode("utf8")
sys.exit()
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token_json.keys()
token = token_json['access_token']
return token
def senddata(access_token,user,subject,content):
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
send_values = {
"touser":"LuXu", #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
"toparty":"2", #企业号中的部门id。
"msgtype":"text", #消息类型。
"agentid":"1000002", #企业号中的应用id。
"text":{
"content":subject + '\n' + content
},
"safe":"0"
}
# send_data = json.dumps(send_values, ensure_ascii=False)
send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
send_request = urllib2.Request(send_url, send_data)
response = json.loads(urllib2.urlopen(send_request).read())
print str(response)
if __name__ == '__main__':
user = str(sys.argv[1]) #zabbix传过来的第一个参数
subject = str(sys.argv[2]) #zabbix传过来的第二个参数
content = str(sys.argv[3]) #zabbix传过来的第三个参数
corpid = 'ww498028afbec50345' #CorpID是企业号的标识
corpsecret = '8zf-N679AU-aTSV7FwSe9Ih3Tx2XskPlTDoVQKifb9I' #corpsecretSecret是管理组凭证密钥
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)
7.创建报警媒介:
管理--报警媒介类型--创建报警媒介类型。
名称:wechat
类型:脚本
脚本名称:wechat.py
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
勾选“已启用”对勾。
8.添加告警用户:
管理--用户--创建用户:
群组:Zabbix Administrators
报警媒介的类型:wechat 收件人:LuXu 权限:超级管理员。
勾选“已启用”的对勾。
9.创建告警的动作:
配置--动作--创建动作:
动作名称:weixin告警 触发器条件:无 勾选“已启用”对勾。
操作:60秒
默认接收人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
操作:步骤1 -3 步骤持续时间:60秒
发送到用户群组:Zabbix Administrators
发送到用户:wechat
10.恢复操作:
默认接收人:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
默认信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
更新动作。
11.测试。
停掉一个系统中的zabbix agent服务,查看是否企业微信收到服务器的告警信息。