zabbix微信报警

1.微信报警原理流程

注册微信企业号,通过企业号提供的信息ID、以及获取微信的API接口,就可以将服务器的报警数据,发给API,发给微信,发给关注这个公众号的所有用户、

2.注册企业微信

https://work.weixin.qq.com/wework_admin/frame

3.修改通讯录组名

 

4.创建自定义zabbix应用

 

5.查看企业ID

 

6.微信报警架构图逻辑图

 

7.添加通信群组成员

想让其他人也加入到这个组,便于接收消息,因此需要邀请加入组。
扫码加入企业
加入监控小分队即可。

 


 

8.关注监控公众号(无须下载企业微信了)

 

9.推送报警信息(python)

#!/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)

测试发微信(python)

# 参数1是发给哪个部门
# 参数2是主题
# 参数3是消息正文


# 装好所需模块
[root@m-61 ~]#yum install python3 python3-devel python3-pip 

[root@m-61 ~]#pip3 install requests 

# 发给部门消息
[root@m-61 ~]#python3 weixin_zabbix.py 2 "zabbix微信报警测试" "当前使用python脚本发送,发送人www.yuchaoit.cn"
[root@m-61 ~]#

坑记录,添加ip白名单

# 踩坑了,tmd,需要加入自建应用的ip白名单
# https://open.work.weixin.qq.com/devtool/query?e=60020

python3版本的坑

#!/usr/bin/env python3

别忘记,修改脚本的python解释器!!

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发送报警了!!"
[root@m-61 ~]#

11.最终微信效果

 

12.zabbix页面配置微信报警

脚本发送报警信息,调试通过后,最终还是希望zabbix实现报警触发。

添加报警媒介类型

 

添加报警参数,参考zabbix官网文档
https://www.zabbix.com/documentation/3.4/zh/manual/config/notifications/media/script

宏参数查询
https://www.zabbix.com/documentation/3.4/zh/manual/appendix/macros/supported_by_location

 

zabbix配置文件设置目录

需要告诉zabbix,你自定义的脚本在什么目录

[root@m-61 ~]#grep  '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf 
AlertScriptsPath=/usr/lib/zabbix/alertscripts


[root@m-61 /usr/lib/zabbix/alertscripts]#ls
weixin.sh  weixin_zabbix.py

于超老师提醒,少一步都是坑,哈哈哈,辛酸

[root@m-61 /usr/lib/zabbix/alertscripts]#chmod +x weixin_zabbix.py

用户设置报警媒介

请注意,这里的收件人,是指微信的组,或者微信的联系人!
传入的参数,超哥这里是传入的2,是zabbix监控小组的id。

 

13.完结收工(测测微信有报警吗)

[root@m-61 /usr/lib/zabbix/alertscripts]#ab -c 100 -n 100000 http://10.0.0.7/


可以检测日志
tail -f /tmp/weixin.log 


Sat, 02 Jul 2022 22:16:45, connectionpool.py, DEBUG, Starting new HTTPS connection (1): qyapi.weixin.qq.com:443
Sat, 02 Jul 2022 22:16:45, connectionpool.py, DEBUG, https://qyapi.weixin.qq.com:443 "GET /cgi-bin/gettoken?corpid=ww76b67c7a9e3e3bea&corpsecret=Z2LpWY2H15sv2tswSWZXuXAzyxqCuGUWrDPKhhHvvnY HTTP/1.1" 200 277
Sat, 02 Jul 2022 22:16:45, connectionpool.py, DEBUG, Starting new HTTPS connection (1): qyapi.weixin.qq.com:443
Sat, 02 Jul 2022 22:16:46, connectionpool.py, DEBUG, https://qyapi.weixin.qq.com:443 "POST /cgi-bin/message/send?access_token=_tIBkDweSW5UD0RoNnkuNQp0hmBe8ILlEUb6l3gdZuLVOArculwDJRiXy02chWt7VgQNHi6KFhU7Vu16lwwMqnEvRYL0n-ttIy33PmUt0ohiV5tUXc6rBOWCT1ZKH6TDHZAlospAUzVtVCdmcGxahiNLherauix-wX4K8gLYnsWdu50QxMA-ksViff-qDI4nc0ISrSxBgOa_338Pf_Ss_A HTTP/1.1" 200 124
Sat, 02 Jul 2022 22:16:46, weixin_zabbix.py, INFO, sendto:2;;subject:恢复OK, 服务器:web7: TIME_WAIT连接数太多已恢复!;;message:恢复OK, 服务器:web7: TIME_WAIT连接数太多已恢复!

Author: www.yuchaoit.cn
告警主机:web7
告警时间:2022.07.02 22:15:42
告警等级:Warning
告警信息: TIME_WAIT连接数太多
告警项目:tcp_status[TIME_WAIT]
问题详情:TIME_WAIT监控:64
当前状态:OK:64
事件ID:94

 

posted @ 2023-12-18 15:20  Mrterrific  阅读(112)  评论(0编辑  收藏  举报