1.微信报警原理流程
注册微信企业号,通过企业号提供的信息ID、以及获取微信的API接口,就可以将服务器的报警数据,发给API,发给微信,发给关注这个公众号的所有用户、
2.注册企业微信
3.修改通讯录组名
4.创建自定义zabbix应用
5.查看企业ID
6.微信报警架构图逻辑图
7.添加通信群组成员
想让其他人也加入到这个组,便于接收消息,因此需要邀请加入组。
扫码加入企业
加入监控小分队即可。
8.关注监控公众号(无须下载企业微信了)
9.推送报警信息(python)
脚本是python3,你的目标机器,是否支持python3
yum install python3 python3-devel python3-pip -y
pip3 install requests
#!/usr/bin/env python3
# Author: www.yuchaoit.cn
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_python.log'),
filemode = 'a')
# 企业ID
corpid='ww76b67c7e3bea'
# 应用秘钥
appsecret='Z2LpWY2H15svWZXuXAzyxqCuGUWrDPKhhHvvnY'
# 应用id
agentid=1000002
# 获取身份令牌,用于和微信通信的认证
# 参考企业微信API文档https://developer.work.weixin.qq.com/document/path/90487
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]
toparty=sys.argv[1]
subject=sys.argv[2]
# 发送微信消息的数据格式
message=sys.argv[2] + "\n\n" +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))
# 调试请求发送结果
print(req.content)
# 记录日志
logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)
坑记录,添加ip白名单
# 踩坑了,tmd,需要加入自建应用的ip白名单
# https://open.work.weixin.qq.com/devtool/query?e=60020
应用管理
python3版本的坑
#!/usr/bin/env python3
别忘记,修改脚本的python解释器!!
测试发微信(python)
python3 weixin_zabbix.py 2 "zabbix微信报警测试" "当前使用python脚本发送,发送人www.yuchaoit.cn"
10.推送报警信息(bash)
cat > weixin.sh << 'EOF'
#!/bin/bash
# Authror: www.yuchaoit.cn
#需要将下列信息修改为自己注册的企业微信信息 #应用ID
agentid='1000002'
#secretID
corpsecret='Z2LpWYv2tswSWZXuXAzyxqCuGUWrDPKhhHvvnY'
#企业ID
corpid='ww76b673e3bea'
#接受者的账户,由zabbix传入
#user=$1
#报警邮件标题,由zabbix传入
title=$2
#报警邮件内容,由zabbix传入
message=$3
# 接收信息的组
group=$1
#获取token信息,需要在链接里带入ID
token=$(curl -s -X GET "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpid}&corpsecret=${corpsecret}"|awk -F \" '{print $10}')
#构造语句执行发送动作,发送http请求
curl -s -H "Content-Type: application/json" -X POST "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}" -d' {
"toparty" : "'"${group}"'",
"msgtype" : "text",
"agentid" : '"${agentid}"',
"text" : {
"content" : "'"${title}\n\n${message}"'"
},
"safe":0
}' >> /tmp/weixin_bash.log
#将报警信息写入日志文件
echo -e "\n报警时间:$(date +%F-%H:%M)\n报警标题:${title}\n报警内容:${message}" >> /tmp/weixin_bash.log
EOF
bash发报警
[root@m-61 ~]#bash weixin.sh 2 "bash还是不如python美丽啊" "bash发送报警了!!"
注意,该脚本,放入服务端的一个alter脚本目录中即可,
zabbix-server可以去调用它
AlertScriptsPath=/usr/lib/zabbix/alertscripts
确保脚本如下即可
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#ll
total 8
-rwxr-xr-x 1 zabbix zabbix 1739 Jul 11 11:57 dingding.py
-rwxr-xr-x 1 zabbix zabbix 2328 Jul 8 16:24 weixin.sh
去zabbix-UI,添加报警动作,执行你的脚本,实现zabbix+脚本实现微信报警通知
1. 需要设置zabbix-server的配置文件,设置一个脚本目录,zabbix才能去这里去找到脚本且执行
[root@zabbix-server-71 ~]#cat /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=linux0224
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
# zabbix定义的一个脚本目录
AlertScriptsPath=/usr/lib/zabbix/alertscripts
2. bash py的脚本放入该目录即可,还得注意权限。。。太坑了
修改脚本的权限
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#chown zabbix.zabbix weixin.sh
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#chmod +x weixin.sh
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#ll
total 4
-rwxr-xr-x 1 zabbix zabbix 2328 Jul 8 16:24 weixin.sh
12.zabbix页面配置微信报警
添加报警媒介类型
用户设置报警媒介
请注意,这里的收件人,是指微信的组,或者微信的联系人!
传入的参数,我这里是传入的1,是zabbix监控小组的id。