昭通市网站建设_网站建设公司_博客网站_seo优化
2026/1/9 20:11:20 网站建设 项目流程

提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会

Zabbix钉钉/企微/飞书/邮箱报警

  • 一、前置环境
    • 1.1 实验环境介绍
    • 1.2 创建监控项
    • 1.3 创建触发器
    • 1.4 创建脚本
    • 1.5 创建动作
    • 1.6 测试nginx能否重启
  • 二、钉钉报警
    • 2.1 创建机器人
    • 2.2 添加脚本
    • 2.3 创建媒介
    • 2.4 用户关联媒介
    • 2.5 动作关联媒介
    • 2.6 测试报警
  • 三、企微/飞书报警
    • 3.1 创建机器人
    • 3.2 添加脚本
    • 3.3 创建媒介
    • 3.5 用户关联媒介
    • 3.6 动作关联媒介
    • 3.7 测试报警
  • 四、邮箱报警
    • 4.1 邮箱开启授权
    • 4.2 创建媒介
    • 4.3 动作关联媒介
    • 4.4 测试报警

一、前置环境

1.1 实验环境介绍

我先说一下我的环境

IP地址主机名部署软件节点作用及职责安装配置状态
192.168.136.134zabbix-server1. Zabbix Server
2. Zabbix Agent
3. MySQL
4. Apache
监控系统核心节点,负责接收各被监控节点上报的数据,同时承担数据存储、告警触发及监控面板展示的核心职责已完成安装与配置
192.168.136.135zabbix-node11. Zabbix Agent
2. 业务被监控软件
业务侧被监控节点,通过Zabbix Agent采集本地系统资源与业务软件运行状态数据,并实时上报至Zabbix Server已完成安装与配置

我的环境比较简单,这里我不再演示怎么搭建环境,不清楚的小伙伴可以看我这篇文章https://blog.csdn.net/m0_63756214/article/details/156421867?spm=1001.2014.3001.5501

什么时候我们有报警需求?当监控指标出现异常,需要 Zabbix 及时推送告警通知时,需先创建对应监控项,再为该监控项配置触发器;触发器触发后,将执行预设动作(如运行指定命令或发送告警消息)

接下来我会做的事如下:

  1. 创建监控项;2. 配置触发器,在监控项数据异常时触发;3.创建脚本,执行重启nginx的命令;4.创建媒介发送消息;5. 创建动作,关联媒介,触发器触发后自动执行命令并发送告警消息

本次将以监控 Nginx 80 端口为例进行实操演示


1.2 创建监控项

新增一个监控项


1.3 创建触发器




1.4 创建脚本

这一步的作用是,当nginx宕机后会执行脚本重启nginx



1.5 创建动作

这里我们可以先创建动作,之后再关联媒介




1.6 测试nginx能否重启

手动关闭nginx模拟故障,看动作能不能正确触发
点击“问题”中可以看到,我们手动关闭后nginx被zabbix自动重启

确认上述配置无误后,即可开始配置消息报警。本实验核心是讲解告警配置方法,即便不添加上述脚本也能完成演示;但为了内容更详尽,这里还是对脚本做了说明



二、钉钉报警

2.1 创建机器人





2.2 添加脚本

#在zabbix-server中操作root@zabbix-server:~# python3 -V #先看一下有没有python3的环境;如果你是centos7系统要另外去配置python的环境Python3.6.9 root@zabbix-server:~# apt -y install python3-pip #安装python3-pip工具root@zabbix-server:~# pip3 install requests #安装requests库root@zabbix-server:~# cd /usr/lib/zabbix/alertscripts/ #这个目录是专门用来放脚本的root@zabbix-server:/usr/lib/zabbix/alertscripts# lsroot@zabbix-server:/usr/lib/zabbix/alertscripts# vim dingding.py#!/usr/bin/env python3importrequests,json,sys,os,datetime# 钉钉机器人webhook地址webhook="粘贴webhook地址"# 处理参数:兼容测试和Zabbix调用场景user=sys.argv[1]iflen(sys.argv)>=2else""# 测试时如果只传1个参数,文本用第一个参数;Zabbix调用时用第3个参数text=sys.argv[3]iflen(sys.argv)>=4elsesys.argv[1]# 构建钉钉消息体data={"msgtype":"text","text":{"content":text},"at":{"atMobiles":[user],"isAtAll":False}}headers={'Content-Type':'application/json'}# 发送请求x=requests.post(url=webhook,data=json.dumps(data),headers=headers)# 确保日志目录存在log_dir="/var/log/zabbix"ifnot os.path.exists(log_dir): os.makedirs(log_dir)# 写入日志(UTF-8编码避免中文乱码)log_file=os.path.join(log_dir,"dingding.log")with open(log_file,"a+",encoding="utf-8")as f: f.write("\n"+"--"*30)ifx.json()["errcode"]==0: f.write(f"\n{datetime.datetime.now()} {user} 发送成功\n{text}")else: f.write(f"\n{datetime.datetime.now()} {user} 发送失败\n{text}")root@zabbix-server:/usr/lib/zabbix/alertscripts# chmod +x dingding.pyroot@zabbix-server:/usr/lib/zabbix/alertscripts# ./dingding.py "问题" #测试一下脚本

查看钉钉收到消息


2.3 创建媒介

去zabbix界面上操作

消息模板中一定要包含我们刚才在钉钉中创建的关键字,不然会收不到消息


2.4 用户关联媒介

待会我们需要一个用户去发送消息,所以该用户需要有媒介的权限



2.5 动作关联媒介

选择我们刚才创建的动作



2.6 测试报警

手动停掉nginx模拟故障,然后去"问题"中查看,可以看到执行了两部动作:执行重启命令和发送消息



三、企微/飞书报警

企微和飞书的设置方式一样,这里我拿企微做例子

3.1 创建机器人



3.2 添加脚本

root@zabbix-server:/usr/lib/zabbix/alertscripts# cd /usr/lib/zabbix/alertscripts/root@zabbix-server:/usr/lib/zabbix/alertscripts# vim weixi.py#!/usr/bin/env python3importrequests, json, sys, os, datetime# ==================== 替换成你的企业微信机器人webhook ====================WEBHOOK_URL="替换成你的企业微信机器人webhook"# ======================================================================# 处理告警文本参数(无参数用默认值,有参数则拼接所有传入的参数)alert_text="Zabbix默认告警:无具体信息"iflen(sys.argv)>=2: alert_text=" ".join(sys.argv[1:])# 拼接所有传入的参数作为告警文本# 构建企业微信纯文本消息体(移除所有@人相关字段)data={"msgtype":"text","text":{"content":alert_text# 仅保留告警文本,无@人逻辑}}headers={'Content-Type':'application/json;charset=utf-8'}response_result={"errcode":-1,"errmsg":"未发送请求"}# 发送请求(保留UTF-8编码解决中文问题)try: json_str=json.dumps(data,ensure_ascii=False)json_bytes=json_str.encode('utf-8')resp=requests.post(url=WEBHOOK_URL,data=json_bytes,headers=headers,timeout=10)resp.raise_for_status()response_result=resp.json()except Exception as e: response_result["errmsg"]=f"请求失败:{str(e)}"# 确保日志目录存在log_dir="/var/log/zabbix"ifnot os.path.exists(log_dir): os.makedirs(log_dir,exist_ok=True)# 写入日志(移除手机号相关记录)log_file=os.path.join(log_dir,"weixin.log")with open(log_file,"a+",encoding="utf-8")as f: f.write("\n"+"--"*35)log_content=(f"\n时间:{datetime.datetime.now()}"f"\n告警文本:{alert_text}"f"\n发送结果:{'成功' if response_result['errcode'] == 0 else '失败'}"f"\n错误信息:{response_result['errmsg']}")f.write(log_content)root@zabbix-server:/usr/lib/zabbix/alertscripts# chmod +x weixi.pyroot@zabbix-server:/usr/lib/zabbix/alertscripts# ./weixi.py "Zabbix告警:Nginx 80端口异常" #测试一下脚本能不能发送

企微接受消息成功


3.3 创建媒介

参考钉钉报警

3.5 用户关联媒介

参考钉钉报警

3.6 动作关联媒介

参考钉钉报警


3.7 测试报警

手动停掉nginx模拟故障,然后去"问题"中查看,可以看到执行了两部动作:执行重启命令和发送消息



四、邮箱报警

4.1 邮箱开启授权

去邮箱的设置中开启这两个服务,然后复制弹窗中的授权码


4.2 创建媒介

接下来我们创建媒介

添加完成后,可以测试一下邮件能不能发生成功

查看163邮箱,发现邮件接受成功


4.3 动作关联媒介

这个时候我们回到刚才创建的action_trigger_nginx_listen_80这个动作,然后添加两个操作


下面这一步是保证Admin和刚才我们创建的媒介关联


4.4 测试报警

接下来我们进行测试,验证 Nginx 启停状态是否能正常触发邮件通知
进入监测→问题查看状态,正常情况下 Nginx 无异常;手动停掉 Nginx 模拟故障,触发器会触发关联动作尝试重启服务
若重启失败,将通过问题模板发送告警邮件;若重启成功,则通过问题恢复模板发送通知邮件



注:
文中若有疏漏,欢迎大家指正赐教。
本文为100%原创,转载请务必标注原创作者,尊重劳动成果。
求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询