实现Zabbix+企业微信告警
1. 注册一个企业微信,获取企业ID
2. 创建一个机器人
创建时需要选择该小程序的可见范围——哪些用户可以看得到这个小程序,且能够收到该小程序发送的信息。
创建完毕后,记录如下的两个值。
到此为止,已经获取到三个值(企业id、agentid以及秘钥)。后续服务器上的脚本就根据这三个值向小程序发送告警信息。
3. 编写推送信息的脚本
在Zabbix服务器上的脚本路径下创建脚本文件,默认路径一般是/etc/zabbix/alertscripts/,请提前查看zabbix配置文件确认该路径(AlertScriptsPath=/etc/zabbix/alertscripts)。
脚本名称:weixin.py
存放路径:/etc/zabbix/alertscripts/
修改策略:将之前得到的三个值,分别填入corpid、appsecret、agentid;
脚本修改完毕后,一定要为其添加可执行权限!
#!/usr/bin/env python #-*- coding: utf-8 -*- #author: yanggd #date: 2018-04-20 #comment: zabbix接入微信报警脚本 import requests import sys import os import json import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, % (filename)s, %(levelname)s, %(message)s', datefmt = '%a, %d %b %Y %H:%M:%S', filename = os.path.join('/tmp','weixin.log'), filemode = 'a') corpid='wwbbaxxxxxx' appsecret='m2HUZXUxxxxxxxxxx' agentid=1000004
#获取accesstoken token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req=requests.get(token_url) accesstoken=req.json()['access_token']
#发送消息 msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send? access_token=' + accesstoken touser=sys.argv[1] subject=sys.argv[2] #toparty='3|4|5|6' message=sys.argv[3] params={ "touser": touser, # "toparty": toparty, "msgtype": "text", "agentid": agentid, "text": { "content": message }, "safe":0 } req=requests.post(msgsend_url, data=json.dumps(params)) logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
到此为止,可以测试该脚本是否能够发送信息;
[root@test2 alertscripts]# ./weixin.py Cheng-Loto 'Title' 'test content'
可能会遇到如下报错,通过图上方式可解决:
4. 配置Zabbix
添加报警媒介:管理>报警媒介类型>创建媒体类型
添加接收对象:小程序可见对象的id,登录到企业微信通讯录查看。
5. 配置完毕,验证
6. 其他
① zabbix中是在告警媒介中手工添加企业微信组中的用户ID,如果需要应用到普罗米修斯中,普罗米修斯可以通过方法自动获取,需要借助到企业微信的API:https://work.weixin.qq.com/api/doc/90000/90135/90200
通过如下py代码可以获取到该小程序中的所有成员id:
import requests req = requests.get('https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=xxoxxxxxtAw&department_id=1&fetch_child=1', timeout=30); req_jason = req.json(); list2 = req_jason.get('userlist'); for i in list2: print(i.get('userid'))
②若是消息只能在企业微信里接受,个人微信收不到信息。
在企业微信客户端,个人主页点击设置 -> 新消息通知 -> “仅在企业微信中接收消息”,点进去把选项全部关掉。
③ 其他配置都正确,仍然收不到信息,检查zabbix中有没有启用动作。具体去排查zabbix配置的正确性。