Zabbix - 微信报警

本文介绍如何将Zabbix告警信息通过企业微信推送至指定人员,包括注册企业微信、配置应用、安装依赖、配置监控脚本等步骤,并提供详细的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。

1、注册企业微信

注册地址: https://work.weixin.qq.com

2、配置企业微信

2.1 创建部门

2.2 添加成员

也可通过二维码邀请成员

记住成员账号(后面会用到)

3. 创建应用

填写应用信息(应用名字和可见成员)

记住应用(AgentId、Secret后面会用到)

4、配置监控脚本

准备事项:

微信企业号 
企业号已经被部门成员关注 
企业号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员发送消息

需要得到的信息

成员账号
组织部门ID
应用ID
CorpID和Secret

4.1 修改zabbix_agentd

[root@localhost ~]# grep alertscripts /etc/zabbix/zabbix_server.conf
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/opt/scripts/zabbix/alertscripts

4.2 安装simplejson

wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
python setup.py build
python setup.py install

4.3 配置监控脚本

[root@localhost alertscripts]# cat /opt/scripts/zabbix/alertscripts/wechat.py

# -*- coding: utf-8 -*-


import requests
import json


class Wechat:
    def __init__(self, corpid, corpsecret):
        self.url = "https://qyapi.weixin.qq.com/cgi-bin"
        self.corpid = corpid
        self.corpsecret = corpsecret
        self._token = self._get_token()

    def _get_token(self):
        '''
        获取企业微信API接口的access_token
        :return:
        '''
        token_url = self.url + "/gettoken?corpid=%s&corpsecret=%s" %(self.corpid, self.corpsecret)
        try:
            res = requests.get(token_url).json()
            token = res['access_token']
            return token
        except Exception as e:
            return str(e)

    def _get_media_id(self, file_obj):
        get_media_url = self.url + "/media/upload?access_token={}&type=file".format(self._token)
        data = {"media": file_obj}

        try:
            res = requests.post(url=get_media_url, files=data)
            media_id = res.json()['media_id']
            return media_id
        except Exception as e:
            return str(e)

    def send_text(self, agentid, content, touser=None, toparty=None):
        send_msg_url = self.url + "/message/send?access_token=%s" % (self._token)
        send_data = {
            "touser": touser,
            "toparty": toparty,
            "msgtype": "text",
            "agentid": agentid,
            "text": {
                "content": content
            }
        }

        try:
            res = requests.post(send_msg_url, data=json.dumps(send_data))
        except Exception as e:
            return str(e)

    def send_image(self, agentid, file_obj, touser=None, toparty=None):
        media_id = self._get_media_id(file_obj)
        send_msg_url = self.url + "/message/send?access_token=%s" % (self._token)
        send_data = {
            "touser": touser,
            "toparty": toparty,
            "msgtype": "image",
            "agentid": agentid,
            "image": {
                "media_id": media_id
           }
        }

        try:
            res = requests.post(send_msg_url, data=json.dumps(send_data))
        except Exception as e:
            return str(e)

4.4 报警测试

[root@localhost alertscripts]# ./wechat.py user 报警测试 error
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ww13e3038f3427b098&corpsecret=GUQCMJAHGnpotGZqmWCXC-ULnjgLH6NyO7adJUpUYik
{u'invalidparty': u'2', u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}

5、 zabbix web界面配置

5.1 配置报警媒介

5.2 创建报警用户

5.3 配置用户报警媒介(选择刚才创建的)

5.4 创建动作

5.5 设置报警消息

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

5.6 恢复报警

恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

到此,zabbix微信报警已完成,自行测试即可

### 配置 Zabbix 使用微信进行报警通知 #### 修改 `zabbix_server` 脚本路径配置 为了使 Zabbix 支持通过微信发送警报,需确认并设置 `AlertScriptsPath` 参数指向存放自定义告警脚本的目录。此参数通常位于 `/etc/zabbix/zabbix_server.conf` 文件内。 ```bash [root@z5 ~]# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf AlertScriptsPath=/usr/lib/zabbix/alertscripts ``` 上述命令展示了如何查询当前设定的脚本存储位置[^1]。 #### 创建或编辑用于发送消息的企业微信机器人脚本 在指定的 `AlertScriptsPath` 下创建 Python 或 Shell 脚本来调用微信 API 实现消息推送功能。这里提供了一个简单的 Python 示例: ```python #!/usr/bin/env python3 import requests import json import sys def send_wechat_message(webhook_url, user, subject, message): headers = {'Content-Type': 'application/json'} data = { "msgtype": "text", "text": { "content": f"{subject}\n{message}", "mentioned_mobile_list":[user] } } response = requests.post(url=webhook_url, headers=headers, data=json.dumps(data)) if __name__ == "__main__": webhook_url = '<Your WebHook URL>' # 替换成实际的企业微信群聊机器人的WebHook地址 try: _, user, subject, *messages = sys.argv content = ' '.join(messages) send_wechat_message(webhook_url, user, subject, content) except Exception as e: print(f"Error occurred while sending WeChat notification: {e}") ``` 这段代码接受三个参数:接收者用户名、主题以及具体的消息内容,并将其构造成 JSON 请求体发送给企业微信API接口[^2]。 #### 设置合适的文件权限 考虑到安全性和兼容性问题,在执行此类外部程序时应确保其具有适当的操作权限。特别是当涉及到日志记录或其他可能影响系统的操作时,建议调整相关资源的所有权至运行 Zabbix 的用户账户下(通常是 `zabbix`),例如对于某些情况下产生的临时文件 `/tmp/weixin.log`: ```bash chown zabbix. /tmp/weixin.log ``` 这一步骤可以防止因权限不足而导致的通知失败情况发生[^4]。 #### 测试与验证 完成以上步骤之后,可以通过直接调用该脚本来初步检验整个流程是否正常工作: ```bash python weixin.py ZhangYi "测试" "人生苦短,我学Python!" ``` 其中 `"ZhangYi"` 是目标用户的 ID ,而后面两个字符串分别代表邮件的主题和正文部分[^3]。 最后,在 Zabbix UI 中添加新的媒体类型并将相应的动作关联起来即可正式启用这项特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值