zabbix如何配置微信报警
zabbix支持多种报警机制,比如:邮件、短信、微信等等。下面就介绍如何使用微信报警。
使用微信报警必须得有企业微信账号,个人微信账号不行。
申请企业微信
注册地址:https://work.weixin.qq.com/
注册企业微信,根据提示填写自己的信息就行,注册完成后会有提示进入管理后台。根据自己需要设置即可。
需要记住的几个信息。
成员账号:添加的成员账号。
组织部门ID:可以在通讯录中部门名称右侧竖着的三个点处查看。
Agentid:企业应用中选中对应的应用点击进去后就可以看到。
Secret:跟Agentid在一起。
CorpID:我的企业里面可以查看。
zabbix配置
修改zabbix-server配置文件,指定报警脚本的位置,我的在/usr/lib/zabbix/alertscripts
目录下。
# grep alertscripts /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
脚本配置
安装simplejson
# yum install python-simplejson -y
上传脚本,并根据注释修改成自己的信息。
#!/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":"XXX", #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
"toparty":"X", #企业号中的部门id。
"msgtype":"text", #消息类型。
"agentid":"1000005", #企业号中的应用id。
"text":{
"content":subject + '\n\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 = simplejson.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 = '1111111111111111' #CorpID是企业号的标识
corpsecret = '111111111111111111111111' #corpsecretSecret是管理组凭证密钥
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)
修改脚本权限:
# cd /usr/lib/zabbix/alertscripts/
# chmod +x wechat.py && chown zabbix:zabbix wechat.py
可以做测试,看看能否发出信息
# python wechat_alert.py test test test
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwe302dd7e2757ca1c&corpsecret=o5W2pH9Bo4nOtJBi8yNzPeQ2j-T7KypPcRJ8Hu_E0HU
{'invalidparty': '2', 'invaliduser': u'', 'errcode': 0, 'errmsg': 'ok'}
证明能够收到消息。
zabbix web界面配置
创建报警媒介。
Script parameters对应脚本内的三个参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
创建报警用户
可以创建新的用户,也可以使用admin 账户,我是直接使用admin账户的。
sent to对应部门id。
设置报警动作
使用邮件报警动作就行,在此不再过多介绍了。
报警标题:
故障: {TRIGGER.STATUS},服务器: {HOSTNAME1} 发生: {TRIGGER.NAME} 故障!
报警信息:
告警主机: {HOST.NAME}
主机地址: {HOST.IP}
告警时间: {EVENT.DATE} {EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
告警详情: {ITEM.NAME}: {ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件代码: {EVENT.ID}
恢复标题:
恢复: {TRIGGER.STATUS},服务器: {HOSTNAME1} 发生: {TRIGGER.NAME} 恢复!
恢复信息:
恢复主机: {HOST.NAME}
主机地址: {HOST.IP}
恢复时间: {EVENT.DATE} {EVENT.TIME}
恢复等级: {TRIGGER.SEVERITY}
恢复信息: {TRIGGER.NAME}
恢复项目: {TRIGGER.KEY1}
恢复详情: {ITEM.NAME}: {ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件代码: {EVENT.ID}
测试:停止一个服务查看是否能收到报警信息。
在服务器上停止grafana服务查看。
# systemctl stop grafana-server
遇到的问题
web界面Action log显示已成功发送,但是收不到消息,经过查询是wechat_alert.py属主属组不是zabbix,也没有执行权限,修改后能够正常接收信息。