【Zabbix】Zabbix结合WxPusher推送告警消息

news2024/9/26 1:22:19

WxPusher简单介绍

什么是WxPusher

WxPusher (微信推送服务)是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。

快速入门

整体架构

在接入之前,你可以看一下架构图,有助于你理解单发,群发的区别。
在这里插入图片描述

注册并且创建应用

https://wxpusher.zjiecode.com/admin/ ,使用微信扫码登录,无需注册,新用户首次扫码自动注册。

创建一个应用,如下图:
在这里插入图片描述

回调地址 :可以不填写,不填写用户关注的时候,就不会有回调,你不能拿到用户的UID,参考回调说明。

设置URL:可以不填写,填写以后,用户在微信端打开「我的订阅」,可以直接跳转到这个地址,并且会携带uid作为参数,方便做定制化页面展示。

联系方式:可以不填写,告诉用户,如何联系到你,给你反馈问题。

关注提示:用户关注或者扫应用码的时候发送给用户的提示,你可以不填写,Wxpusher会提供一个默认文案。你也可以在用户关注回调给你UID的时候,再主动推送一个提示消息给用户。

说明:描述一下,你的应用,推送的是啥内容,用户通过链接关注,或者在微信端查看的时候可以看到。

获取appToken

在你创建应用的过程中,你应该已经看到appToken,如果没有保存,可以通过下面的方式重制它。

打开应用的后台https://wxpusher.zjiecode.com/admin/,从左侧菜单栏,找到appToken菜单,在这里,你可以重置appToken,请注意,重置后,老的appToken会立即失效,调用接口会失败。

扫码关注应用

创建应用以后,你可以看到应用的应用码和关注链接,你可以让你的用户通过下面2种方式来关注你的应用,关注你的应用以后,你就可以给他发送消息了。
在这里插入图片描述

获取UID

目前有3种方式获取UID:

  1. 关注公众号:wxpusher,然后点击「我的」-「我的UID」查询到UID;
  2. 通过创建参数二维码接口创建一个定制的二维码,用户扫描此二维码后,会通过用户关注回调把UID推送给你;
  3. 通过创建参数二维码接口创建一个定制的二维码,然后用查询扫码用户UID接口,查询扫描此二维码的用户UID;

发送消息

拿到UID以后,配合应用的appToken,然后调用发送接口发送消息。

WxPusher限制说明

WxPusher是免费的推送服务,为了能更好的服务大家,这里说明一下系统相关数据限制

  • 消息发送,必须合法合规,发送违规违法欺诈等等非正常消息,可能被封号;
  • WxPusher推送的是实时消息,时效性比较强,过期以后消息也就没有价值了,目前WxPusher会为你保留7天的数据
    ,7天以后不再提供可靠性保证,会不定时清理历史消息;
  • 单条消息的数据长度(字符数)限制是:content<40000;summary<100;url<400;
  • 单条消息最大发送UID的数量<2000,单条消息最大发送topicIds的数量<5;
  • 单个微信用户,也就是单个UID,每天最多接收1000条消息,请合理安排发送频率。

Zabbix Server服务器端准备及脚本准备

进入到Zabbix Server服务器安装Python脚本中需要的python库及查看脚本存放路径

[root@whzabbix alertscripts]# cat /etc/zabbix/zabbix_server.conf | grep alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@whzabbix alertscripts]# pip install requests

创建python脚本文件

[root@whzabbix alertscripts]# vim zabbix-python-robot.py

(需要修改机器人的APP_TOKEN的值)

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import datetime
import json
import logging
import os
import sys

try:
    import requests
except ImportError:
    import subprocess
    import sys


    def install(package):
        subprocess.call([sys.executable, "-m", "pip3", "install", package])


    install("requests")

    import requests

# 获取当前时间
current_time = datetime.datetime.now()

# 生成日志文件名
log_filename = current_time.strftime("%Y%m%d%H%M%S") + "_WXPusher.log"

# 定义日志文件夹路径
log_folder = ""

# 判断操作系统类型
if os.name == "nt":  # Windows
    log_folder = os.path.join(os.getcwd(), log_filename)
else:  # 非Windows
    log_folder = "/var/log/wxpusher/"
    os.makedirs(log_folder, exist_ok=True)
    log_folder = os.path.join(log_folder, log_filename)

log_format = "%(asctime)s - %(levelname)s - %(message)s"
# 配置日志记录器
logging.basicConfig(
    level=logging.INFO,  # 设置日志级别为 DEBUG
    format=log_format,  # 设置日志格式
    filename=log_folder,  # 设置日志文件名
)

# 创建一个控制台处理程序
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_formatter = logging.Formatter(log_format)
console_handler.setFormatter(console_formatter)

# 获取根记录器并添加控制台处理程序
root_logger = logging.getLogger()
root_logger.addHandler(console_handler)

# 删除旧的日志文件
if os.name != "nt":  # 非Windows
    for root, dirs, files in os.walk(log_folder):
        for file in files:
            file_path = os.path.join(root, file)
            file_modified_time = os.path.getmtime(file_path)
            if file_modified_time < (datetime.datetime.now() - datetime.timedelta(days=30)).timestamp():
                os.remove(file_path)


def get_wxuser_info(app_token, page=1, page_size=100, uid=None, is_block=False, user_type=0):
    # 请求参数
    params = {
        "appToken": app_token,  # appToken 应用密钥标志
        "page": page,  # page 请求数据的页码
        "pageSize": page_size,  # pageSize 分页大小,不能超过100
        "uid": uid,  # uid 用户的uid,可选,如果不传就是查询所有用户,传uid就是查某个用户的信息。
        "isBlock": is_block,  # isBlock 查询拉黑用户,可选,不传查询所有用户,true查询拉黑用户,false查询没有拉黑的用户
        "type": user_type  # type 关注的类型,可选,不传查询所有用户,0是应用,1是主题。 返回数据:
    }

    # 发送GET请求
    response = requests.get('https://wxpusher.zjiecode.com/api/fun/wxuser/v2', params=params)

    # 解析响应结果
    if response.status_code == 200:
        logging.info('获取用户UID列表成功')
        data = response.json()
        if data['msg'] == '处理成功':
            users = data['data']['records']
            users_uid = [user['uid'] for user in users]
            return users_uid
    else:
        logging.error('获取用户UID列表失败')

    return []


def send_wx_message(app_token, summary, content, users_uid):
    # 请求头信息
    headers = {
        'Content-Type': 'application/json'
    }

    # 请求数据
    data = {
        "appToken": app_token,
        "content": content,
        "summary": summary,
        "contentType": 2,
        "uids": users_uid,
        "verifyPay": False
    }

    # 在关键位置记录日志
    logging.info(f'发送主题:{summary}')
    logging.info(f'发送内容:{content}')
    logging.info('发送消息开始')

    # 发送POST请求
    response = requests.post('https://wxpusher.zjiecode.com/api/send/message', headers=headers, data=json.dumps(data))

    # 判断请求是否成功,并记录日志
    if response.status_code == 200:
        logging.info('消息发送成功')
    else:
        logging.error('消息发送失败')


# 调用函数发送消息
# 定义要发送的人,也就是zabbix webUI配置的"{ALERT.SENDTO}"参数对应的值
touser = sys.argv[1]

logging.info('整个脚本开始运行')
app_token = "AT_XXXXXXXXXXXXXX"  #修改此处的APP_TOKEN
# 定义要发送的主题,也就是zabbix webUI配置的"{ALERT.SUBJECT}"参数对应的值
summary = sys.argv[2]
# 定义要发送的消息内容,也就是zabbix webUI配置的"{ALERT.MESSAGE}"参数对应的值
content = sys.argv[3]
users_uid = get_wxuser_info(app_token)  # 填入具体的用户UID列表
send_wx_message(app_token, summary, content, users_uid)
logging.info('整个脚本结束运行')

修改脚本的执行权限

[root@whzabbix alertscripts]# chmod +x zabbix-python-robot.py

测试发送消息

脚本执行的格式

[root@whzabbix alertscripts]# ./zabbix-python-robot.py userid ce shi

如上所示,脚本执行需要携带3个参数:

参数1:需要提醒的用户名的“账号” [此参数并未调用,但不能省略]
参数2:发送消息的主题
参数3:发送消息的内容

测试结果

在这里插入图片描述在这里插入图片描述

Zabbix Web端添加告警源

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

Zabbix Web端告警源测试

在这里插入图片描述
在这里插入图片描述

Zabbix Web端告警源绑定到用户并合理设置需要WxPusher推送的消息级别

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1026592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Cloud系列】Feign详解与实战

Feign详解与实战 文章目录 Feign详解与实战一、概述二、什么是Feign三、Feign特性四、Feign简单使用3.1 Feign使用步骤3.2 Feign具体使用1. 引入依赖2. 启动类上添加注解3.编写FeignClient接口 五、使用Feign发起http请求5.1 Maven导入Feign配置&#xff0c;并集成Jackson5.2 F…

如何理解功率谱/能量谱密度?它与自相关函数的关系?

目录 1. 自相关函数&#xff1a; 2.功率谱密度 /能量谱密度 什么是 能量信号&#xff1f; 什么是 功率信号&#xff1f; 什么是 能量谱密度&#xff1f; 什么是 功率谱密度&#xff1f; 3.自相关函数 与 能量谱密度/功率谱密度 的关系&#xff1f; 4.周期性的功率信号的 功…

安卓ROM定制 修改必备常识-----初步了解system系统分区文件夹的基本含义 【二】

安卓修改rom 固件 修改GSI 移植rom 必备常识 lib--**so文件基本解析 一起来了解system目录相应文件的用途吧。&#xff08;rom版本不同里面的app也会不一样&#xff09; 简单打开img格式后缀文件 给大家说下最简单的方法提取img里面的文件&#xff0c;对于后缀img格式的文件可…

实现过滤词汇高亮

js实现过滤词汇高亮 场景代码 场景 前端实现查询后&#xff0c;将过滤后数据中的搜索词展现为高亮。 代码 思路&#xff1a;利用 正则表达式 对过滤词添加类名&#xff0c;然后使用 v-html 渲染在表格中。 // 复制json数组copyObjectDataList(arr) {let list [];_.each(arr…

(2021|PMLR,DALL·E,自回归,Transformer)零样本文本到图像生成

Zero-Shot Text-to-Image Generation 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 方法 2.1. 第一阶段&#xff1a;学习视觉码本 2.2. 第二阶段&#xff1a…

23种设计模式汇总详解

设计原则 中文名称英文名称含义解释单一职责原则Single Responsibility Principle(SRP)任何一个软件模块都应该只对某一类行为者负责一个类只干一件事&#xff0c;实现类要单一开闭原则Open-Close Principle(OCP)软件实体&#xff08;类、模块、函数等&#xff09;应该是可以扩…

vmware NAT模式配置方式

VMware在NAT模式下宿主机与多台虚拟机互相访问&#xff0c;可连接外网 虚拟机的网络连接类型的选择&#xff0c;网络连接类型一共有桥接、NAT、仅主机和不联网四种。 桥接&#xff1a;选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系&#xff0c;相当于连接在同一交换机…

飞行动力学 - 第30节-滚转收敛模态机理及飞行品质 之 基础点摘要

飞行动力学 - 第30节-滚转收敛模态机理及飞行品质 之 基础点摘要 1. 典型横航向响应2. 滚转收敛模态机理3. 滚转收敛模态近似4. 滚转收敛品质要求5. 参考资料 1. 典型横航向响应 2. 滚转收敛模态机理 3. 滚转收敛模态近似 横航向扰动之后首先体现的是重阻尼的滚转收敛模态 飞…

易点易动固定资产管理系统:解锁全面管理固定资产的多重功能优势

在现代企业中&#xff0c;固定资产管理是一项至关重要的任务。单单依靠表格来管理固定资产已经无法满足大多数企业的需要。因此&#xff0c;企业通常需要一款专业的固定资产管理系统进行固定资产的日常管理。易点易动固定资产管理系统以其多项强大功能&#xff0c;成为企业实现…

著名书法家傅成洪受邀出席香港第八届“一带一路”高峰论坛

香港第八届“一带一路”高峰论坛于9月13日至14日在香港隆重举行&#xff0c;吸引了来自海内外的6000多名嘉宾&#xff0c;共同回顾“一带一路”倡议的历程&#xff0c;并展望未来的投资和商贸机遇。这一庆祝活动恰逢“一带一路”倡议的10周年&#xff0c;主题定为“携手十载 共…

使用Kalibr工具线对相机+IMU离线标定

传感器标定的准确后面做算法才会更准确&#xff0c;所以对Kalibr进行学习。 一、Kalibr编译 1、下载kalibr包 GitHub下载地址 2、 解压后放到/catkin_ws/src文件夹下 重新命令文件夹为kalibr 3、 安装依赖库 sudo apt-get install python-setuptools python-rosinstall…

datax和datax-web编译安装和使用

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。 目前支持的数据源如下: 与sqoop的对比: 1. 编译 1.1编译datax idea打开datax项目,…

观察级水下机器人使用系列之七机械手臂

本期是观察级水下机器人使用系列的最后一期&#xff0c;主要讲ROV所使用的机械臂。机械臂正式名称为5功能电动机械&#xff0c;型号为BE-500&#xff0c;由法国公司Ocean Innovation System设计的&#xff0c;可代替人工进行水下作业&#xff0c;完成海底样品采集、打捞、设备定…

9月20日作业

时钟代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QTime> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class W…

【Hash表】第一个不重复字符-力扣 387

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

应用平台 - OPPO敏感权限

那天在OPPO平台更新app时&#xff0c;发现平台权限升级&#xff0c;新增了敏感权限校验&#xff0c;而且还是必填项… Google 从 Android6.0 开始就对权限做了分类适配&#xff0c;粗浅来看将权限分为了普通权限、危险权限&#xff08;运行时权限、敏感权限&#xff09;&#x…

干洗店小程序,洗鞋店小程序,互联网洗鞋店,企业干洗方案,干洗行业小程序,上门取衣小程序,预约干洗小程序,校园干洗店小程序,工厂干洗店小程序,干洗店小程序开发;

干洗店小程序,洗鞋店小程序&#xff0c;互联网洗鞋店&#xff0c;企业干洗方案,干洗行业小程序,上门取衣小程序,预约干洗小程序,校园干洗店小程序,工厂干洗店小程序,干洗店小程序开发,微信干洗店小程序&#xff1b; 一、核心功能介绍 1.(支持上门取送、送货到店、寄存网点、智能…

LLM微调(一)| 单GPU使用QLoRA微调Llama 2.0实战

最近LLaMA 2在LLaMA1 的基础上做了很多优化&#xff0c;比如上下文从2048扩展到4096&#xff0c;使用了Grouped-Query Attention&#xff08;GQA&#xff09;共享多头注意力的key 和value矩阵&#xff0c;具体可以参考&#xff1a; 关于LLaMA 2 的细节&#xff0c;可以参考如下…

DHorse v1.4.0 发布,基于 k8s 的发布平台

版本说明 新增特性 提供Fabric8客户端操作k8s&#xff08;预览&#xff09;的功能&#xff0c;可以通过指定-Dkubernetes-clientfabric8参数开启&#xff1b;Vue、React应用增加Pnpm、Yarn的构建方式&#xff1b;支持Go、Flask、Django、Nuxt应用部署&#xff1b; 优化特性 …

2000-2021年上市公司设立党组织数据

2000-2021年上市公司设立党组织数据 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;时间、证券代码、公司名称、行业名称、所在城市、所在省份、是否建立党组织、建立党组织时间、党组织年龄&#xff1b; 董监高中党组织成员人数、高管中党组织成员人数、董事中党组织…