本篇基于我的前两章环境续写:
1、【zabbix】docker安装zabbix、yum安装zabbix-agent
2、【zabbix】MySQL模板创建与监控
一、首先得有个企业微信号

添加部门

应用管理创建应用



我的企业里面找到企业id,和上面两条一起,总共三条信息都要用到

测试以下通讯是否正常,微信企业号接口调试工具:

这里准备了两份脚本,两种发送方式,可以自选其一使用!
在宿主机/usr/lib/zabbix/alertscripts/路径下创建weixin.py
第一种脚本:这里要修改脚本里的这三条信息,也就是上文说到的三条信息
corpid='' #企业ID
appsecret='' #secret
agentid=1000002 #AgentID
- #!/usr/bin/env python
- #-*- coding: utf-8 -*-
- #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='企业ID' #企业ID
- appsecret='secret' #secret
- agentid=AgentID #AgentID
-
- #获取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)
-
第二种脚本:使用微信机器人,这个需要在企业微信里面创建群,在群里创建机器人,之后复制机器人的Webhook:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- #!/usr/bin/env python
- #_*_coding:utf-8 _*_
-
- import requests,sys,json,time
- import urllib3
- urllib3.disable_warnings()
-
- def SendMessageURL(User,Subject,Messages):
- ###机器人的Webhook
- URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- HEADERS = {"Content-Type": "application/json"}
- Data = {
- "msgtype": "markdown",
- "markdown": {
- "content": "# ...... \n %s \n %s \n <@%s>"% (Subject,Messages,User),
- #"mentioned_list" : [User],
- #"content": \Subject \n Messages,
- #"mentioned_list" :[User],
- ###因为是故障告警群,所以需要@all,这个看自己选择
- "mentioned_list" :[User,"@all"]
- #"mentioned_mobile_list" : ["13800000000","@all"]
- }
- }
- r = requests.post(url=URL, headers=HEADERS, json=Data, verify=False)
- print(r.json())
-
- if __name__ == "__main__":
- SENDTO = str(sys.argv[1])
- SUBJECT = str(sys.argv[2])
- MESSAGE = str(sys.argv[3])
- Status = str(SendMessageURL(SENDTO,SUBJECT,MESSAGE))
- print (Status)
脚本ok了 ,先在宿主机测试一下
先看下宿主机python版本
- [root@k8s-node2 alertscripts]# python -V
- Python 2.7.5
python weixin.py HuYiDuo gaojing jingbao
ok 手机上的企业微信已经收到消息了

我的zabbix服务端是基于zabbix/zabbix-appliance官方镜像,版本为4.4.6,
所以这里就直接把脚本拷贝到容器中去
cp /usr/lib/zabbix/alertscripts/weixin.py 容器id:/usr/lib/zabbix/alertscripts/
进入zabbix/zabbix-appliance容器
docker exec -it 9fc7a9551127f bash
脚本已经过来了

在容器中再测试一下
python weixin.py HuYiDuo gaojing jingbao
哟?报错了?

看错误是缺少了requests,另外python版本是2.7.16
用pip install requests 下载看看,结果也报错了,看到这个结果大致思路应该是python版本低了,得升级版本
由于是在容器中安装python环境,所以要先确定下系统的发行版
这里查出来是Alpine Linux,所以这里用不了yum,得用apk
- apk add build-base //安装 GCC等工具
- 编译时的依赖库
- apk add --no-cache -U zlib-dev //安装 zlib-devel
- apk add --no-cache -U openssl-dev //安装openssl-devel
- 手动下载:https://www.python.org/downloads/source/
- 命令下载:wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
- 解压:tar -xvf Python-3.7.6.tgz
- 进入源码根目录:cd Python-3.7.6
- 配置源码生成makefile
- ./configure --enable-optimizations --with-ensurepip=install //加上此选项会安装pip工具
- 编译:make
- 安装:make install
- 由于执行configure时没有指定安装路径(--prefix=/opt/Python),所以安装到默认路径/usr/local/bin
- cd /usr/local/bin
- ln -s python3.5 python //建立软连接,方便执行
-
- 其他:
- apk add python3
- wget https://bootstrap.pypa.io/get-pip.py
- python3 get-pip.py
-
-
安装好后继续下载requests
pip install requests
再测试一下
![]()
成功了

配置报警媒介类型
- 收件人:
- {ALERT.SENDTO}
- 主题:
- {ALERT.SUBJECT}
- 消息:
- {ALERT.MESSAGE}

测试报警媒介

消息发送成功
注:如果这一步之前在服务器及容器里测试消息都成功,但web页面报警媒介这里测试发送却报错就得检查脚本本身的问题了。
如:#!/usr/bin/env python 这一行是否有对应环境,或者脚本python版本适配问题!

消息接收成功

配置动作
这里先配了个zabbix客户端状态的触发器,待会做测试用
注:触发器这一步配置也蛮重要,触发器配置不好无法触发,告警信息就会无法送达!

操作里面的发送消息给用户和用户群组得自定义创建
- 服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
- 消息内容:
- 告警主机:{HOST.NAME}
- 告警地址:{HOST.IP}
- 监控项目:{ITEM.NAME}
- 监控取值:{ITEM.LASTVALUE}
- 告警等级:{TRIGGER.SEVERITY}
- 当前状态:{TRIGGER.STATUS}
- 告警信息:{TRIGGER.NAME}
- 告警时间:{EVENT.DATE} {EVENT.TIME}
- 事件ID:{EVENT.ID}
- ----------------------------------------------------
- 服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
- 消息内容:
- 告警主机:{HOST.NAME}
- 告警地址:{HOST.IP}
- 监控项目:{ITEM.NAME}
- 监控取值:{ITEM.LASTVALUE}
- 告警等级:{TRIGGER.SEVERITY}
- 当前状态:{TRIGGER.STATUS}
- 告警信息:{TRIGGER.NAME}
- 告警时间:{EVENT.DATE} {EVENT.TIME}
- 恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
- 持续时间:{EVENT.AGE}
- 事件ID:{EVENT.ID}
- ----------------------------------------------------
- 服务器:{HOST.NAME}: {TRIGGER.NAME}已更新!
- 消息内容:
- 告警主机:{HOST.NAME}
- 告警地址:{HOST.IP}
- 监控项目:{ITEM.NAME}
- 监控取值:{ITEM.LASTVALUE}
- 告警等级:{TRIGGER.SEVERITY}
- 当前状态:{TRIGGER.STATUS}
- 告警信息:{TRIGGER.NAME}
- 告警时间:{EVENT.DATE} {EVENT.TIME}
- 恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
- 持续时间:{EVENT.AGE}
- 事件ID:{EVENT.ID}
这里及下面的发送消息给用户后来我给拿掉了,直接配成了管理组,这个发送消息给xx的配置自己自定义就好,只要能接收到消息。
消息内容框里的内容部分,在消息内容:这一行上面把默认标题框里的信息给填上去,这样告警信息看起来会顺眼美观一些。



接下来给用户Admin配置报警媒介,收件人这里我直接填写的@all


用户配置完成就可以做测试了
回到服务器,关闭zabbix-agent
systemctl stop zabbix-agent

成功接收到故障报警信息

再启动zabbix-agent
systemctl start zabbix-agent
成功接收到故障恢复信息

好了,至此企业微信告警就配置完了!!!
zabbix全套配置思路也结束了!!!