通过微信服务号推送Zabbix告警

近期看到一篇通过微信实现Zabbix告警的文章,但实践时发现,无法成功发送消息。

分析原因,应该是微信公众平台加强了登录验证,在登录时会需要管理员进行扫描二维码操作才能成功登陆后台:

而之前文章中的API是通过账号密码模拟浏览器登陆方式,进行后台操作,无法通过这个安全验证,消息发送功能自然也不可用。

本文经我自己验证,是可以实现通过微信推送消息的。这种实现基于微信服务号平台的“模板短信”功能,必要条件如下:

微信服务号通过微信认证(需提交公司营业执照等等信息,同时会收取300元/年的认证服务费用)。

这个实现方法,还需要Python + Shell脚本的配合,我已经放到github上了,在如下的实施步骤中也有说明。

备注:如果个人用户的话,建议可以直接使用QQ邮件+微信邮件提醒。

好叻,下面开始我们整个步骤。

一、注册微信服务号,并进行微信认证

关于微信服务号的注册及认证,请看微信官方指引

二、开通模板消息功能以及报警通知模板

  1. 在微信公众平台管理后台添加功能-模板消息
  2. 从模板库中选择报警通知模板(后面以“IT/网络游戏”的“系统故障告警通知”模板进行配置,其他行业内的告警类模板可能会有不同,可参照配置)

三、下载配置告警通知脚本

下载告警通知脚本

$ git clone https://github.com/vincihu/misc/

# 部署告警通知脚本到zabbix的alertscripts目录

$ sudo mv misc/wxAlert /usr/lib/zabbix/alertscripts/

$ sudo mv /usr/lib/zabbix/alertscripts/{wxAlert/,}AlertWeixin.sh

$ sudo mkdir /usr/lib/zabbix/alertscripts/logs

# 为脚本添加zabbix用户执行权限

$ sudo chmod u+x AlertWeixin.sh

$ sudo chown zabbix:zabbix \

/usr/lib/zabbix/alertscripts/{logs/,AlertWeixin.sh}

# 安装需要的python模块

$ sudo pip install -U configparser requests simplejson

修改wxAlert/wxAlert.conf,填入微信服务号相关信息

[default]

appid = APPID

secret = SECRET

template_id = TEMPLATE_ID

四、获取服务号订阅用户信息

# 使用wxGetUserInfo.py脚本获取服务器订阅用户列表,以及其openid

# openid用于后续的告警接收,相当于邮件告警的邮件地址

$ cd /usr/lib/zabbix/alertscripts/wxAlert/

$ python wxGetUserInfo.py 2>/dev/null

nickname: JasonQu

openid: AAAA

headimgurl: http://wx.qlogo.cn/mmopen/XXXX/0

nickname: 胡文西

openid: BBBB

headimgurl: http://wx.qlogo.cn/mmopen/YYYY/0

五、配置Zabbix

1. 添加Media type(告警媒介)

Name: X. AlertWeixin

Type: Script

Script name: AlertWeixin.sh

2. 配置profile - Media(告警接收ID)

Type: X. AlertWeixin

Send to: OPENID

六、测试验证

测试告警,微信消息截图如图

weixin

转载于:https://www.cnblogs.com/zhengchunyuan/p/8175940.html

<think> 首先,用户的问题是:“我想查找zabbix告警推送微信的方法 请问zabbix告警推送微信的实现方法”。这直接对应到系统指令中的功能:我需要基于提供的引用信息回答这个问题。 回顾系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如 [^1]。 用户提供的引用: - [^1]:关于zabbix告警信息之多渠道图文推送,包括微信。 - [^2]:zabbix告警实践分享,包括一键实现电话、邮件、微信告警。 - [^3]:Zabbix 6.0告警实战:微信+邮件双通道告警。 - [^4]:Zabbix配置告警消息推送企业微信群。 关键点是使用脚本调用微信接口来实现告警推送。 结构化回答: - 回答结构清晰,逐步解决问题。 - 内容要真实可靠,基于引用信息。 - 最后生成相关问题。 步骤: 1. **了解需求**:用户想知道如何将zabbix告警推送微信。 2. **核心方法**:从引用中提取关键步骤: - 使用自定义脚本(如Python脚本)调用微信接口。 - 脚本需要作为zabbix报警媒介类型。 - 步骤包括创建媒介类型、设置脚本路径、配置脚本参数、创建告警动作等。 3. **详细实现**: - 从[^1]:zabbix提供了自定义脚本类型;脚本调用微信接口发送文本+监控趋势图。 - 从[^3]:具体步骤:创建媒介类型(类型:脚本),脚本名称如wechat_alert.py,脚本参数包括{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}。 - 从[^4]:企业微信机器人方法;创建机器人,获取webhook地址,使用Python脚本发送消息。 - [^2]也提到了微信告警通知的实现。 4. **整合步骤**: - 步骤1:注册企业微信或获取微信接口(如企业微信机器人)。 - 步骤2:创建自定义脚本(如Python脚本)来发送消息。 - 步骤3:在zabbix中配置脚本作为报警媒介。 - 步骤4:创建告警动作联动触发器。 5. **添加引用**:在回答中自然地引用来源,例如在关键点后加[^1]、[^2]等。 6. **生成相关问题**:在最后添加相关问题,基于主题。 最终回答结构: - 开头简述方法。 - 详细步骤分步骤解释。 - 确保语言中文。 - 结尾添加相关问题。 数学表达式:用户问题似乎不涉及数学,但如果提到任何公式或代码,需用LaTeX格式处理。例如,脚本路径或参数可以视为代码块,但指令说“行内数学表达式”,所以如果提到变量,用$...$;独立公式用$$...$$。但这里主要是配置步骤,可能不需要数学。 相关问题生成(§§相关问题§§): 1. 如何配置zabbix发送告警到钉钉或邮件? 2. zabbix告警脚本的常见参数有哪些? 3. 如何测试zabbix告警推送微信是否正常工作? 4. zabbix监控趋势图如何获取和发送? 确保回答真实可靠:基于引用信息,不添加虚构内容。 </think> ### Zabbix告警推送微信的实现方法 要将Zabbix告警信息推送微信,主要通过自定义脚本调用微信接口(如企业微信机器人)来实现。以下是基于引用信息的详细步骤,分为准备工作、脚本创建、Zabbix配置和验证四个阶段。整个过程需要您具备基本的Linux和Python知识,并确保Zabbix服务器已正确安装。 #### 步骤1: 准备工作(微信接口注册) - 注册企业微信:访问企业微信官网创建企业账号(免费),然后在企业微信群聊中添加机器人。添加后,获取机器人的Webhook地址(类似 `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx`),该地址用于脚本发送消息[^4][^1]。 - 确保Zabbix服务器可访问互联网:脚本需要通过网络调用微信API,确认服务器防火墙允许出站请求。 #### 步骤2: 创建Python脚本(微信推送核心) 在Zabbix服务器上创建自定义脚本,用于接收告警数据并发送到微信。脚本需存储在Zabbix的默认脚本目录(如 `/usr/lib/zabbix/alertscripts/`)。 - 脚本名称示例:`wechat_alert.py` - 脚本内容参考[^4][^3]: ```python #!/usr/bin/python # -*- coding: utf-8 -*- import requests import sys import json # 参数接收(Zabbix传递) sendto = sys.argv[1] # 接收者标识(可忽略或用于群组区分) subject = sys.argv[2] # 告警主题 message = sys.argv[3] # 告警详细信息 # 微信机器人Webhook地址(替换为您的实际地址) webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" # 构建消息体(支持文本+富媒体) payload = { "msgtype": "text", "text": { "content": f"Zabbix告警:\n主题: {subject}\n详情: {message}" } } # 可选附加监控趋势图(需在脚本中集成图表生成功能,参考引用[^1]) # 发送HTTP POST请求 response = requests.post(webhook_url, data=json.dumps(payload), headers={'Content-Type': 'application/json'}) if response.status_code == 200: print("告警已发送至微信") else: print(f"发送失败: {response.text}") ``` - **关键点**: - 脚本需赋予执行权限:`chmod +x /usr/lib/zabbix/alertscripts/wechat_alert.py`。 - 测试脚本:手动运行 `./wechat_alert.py "test" "测试主题" "测试消息"`,确认微信接收正常[^1][^4]。 #### 步骤3: 在Zabbix中配置报警媒介和动作 - **创建报警媒介类型**: 1. 登录Zabbix Web控制台,导航到 **管理 > 报警媒介类型 > 创建媒介类型**。 2. 设置参数: - 名称:`WeChat-Robot`(自定义) - 类型:选择 **脚本**。 - 脚本名称:输入 `wechat_alert.py`。 - 脚本参数(按顺序添加):`{ALERT.SENDTO}`, `{ALERT.SUBJECT}`, `{ALERT.MESSAGE}`(Zabbix自动填充告警变量)[^3][^1]。 - **创建告警动作**: 1. 导航到 **配置 > 动作 > 创建动作**。 2. 在“操作”标签页,添加新操作: - 操作类型:选择 **发送消息**。 - 发送到用户:选择接收告警Zabbix用户(需提前配置用户邮箱或手机)。 - 仅送到:选择新建的 `WeChat-Robot` 媒介。 3. 在“条件”标签页,设置触发条件(如触发器状态=“问题”)[^3][^2]。 - **关联媒介到用户**:在 **管理 > 用户** 中,编辑目标用户,在“报警媒介”标签添加 `WeChat-Robot`,并指定接收地址(可为空,脚本参数已处理)[^2]。 #### 步骤4: 测试和调试 - 触发测试告警:在Zabbix中手动创建问题(如关闭一个监控项),观察微信接收情况。 - 常见问题排查: - 检查脚本权限和路径是否正确。 - 验证Webhook地址是否有效(使用 `curl` 测试)。 - 查看Zabbix日志(`/var/log/zabbix/zabbix_server.log`)确认脚本执行错误[^4][^1]。 #### 注意事项 - **安全**:Webhook地址包含敏感密钥,确保脚本文件权限为 `root:zabbix` 并限制访问。 - **高级功能**:如需发送监控趋势图(如引用[^1]所述),需扩展脚本调用Zabbix API获取图表URL并嵌入消息体。 - 此方法适用于Zabbix 4.0+版本,支持微信企业版或钉钉等多渠道集成[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值