实现Zabbix+企业微信告警

1. 注册一个企业微信,获取企业ID

 

 

 

2. 创建一个机器人

 

 

创建时需要选择该小程序的可见范围——哪些用户可以看得到这个小程序,且能够收到该小程序发送的信息。

创建完毕后,记录如下的两个值。

到此为止,已经获取到三个值(企业id、agentid以及秘钥)。后续服务器上的脚本就根据这三个值向小程序发送告警信息。

 

 

 

 3. 编写推送信息的脚本

在Zabbix服务器上的脚本路径下创建脚本文件,默认路径一般是/etc/zabbix/alertscripts/,请提前查看zabbix配置文件确认该路径(AlertScriptsPath=/etc/zabbix/alertscripts)。

脚本名称:weixin.py

存放路径:/etc/zabbix/alertscripts/

修改策略:将之前得到的三个值,分别填入corpidappsecret、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配置的正确性。

 

posted @ 2021-11-10 18:13  西泽Xiz  阅读(1007)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css