Ubuntu Zabbix 钉钉报警

文章目录

概要

提示:本教程用于Ubuntu ,zabbix7.0

Zabbix警监控脚本

提示:需要创建一个脚本

bash 复制代码
#检查是否有 python3 和版本
root@zabbix:~# python3 --version 
Python 3.12.3

在/usr/lib/zabbix/alertscripts/目录中创建一个名称为dingding_alert.py的Python脚本;内容如下;

bash 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import json
import sys
import os
import datetime

# 钉钉机器人 Webhook 地址
webhook = "这里填写创建的机器人Webhook 地址"

# 日志文件路径
log_file = "/var/log/zabbix/dingding_alert.log"

# 参数检查
if len(sys.argv) < 4:
    print("Usage: dingding_alert.py <phone> <subject> <text>")
    sys.exit(1)

# 读取命令行参数
user = sys.argv[1]
subject = sys.argv[2]
text = sys.argv[3]

# ✅ 修改内容:加上关键词前缀 **这里要与钉钉安全设置的名称一致**
msg = f"【zabbix告警】\n{subject}\n{text}"

# 构造消息内容
payload = {
    "msgtype": "text",
    "text": {
        "content": msg
    },
    "at": {
        "atMobiles": [user],
        "isAtAll": False
    }
}

headers = {'Content-Type': 'application/json'}
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

# 确保日志目录存在
os.makedirs(os.path.dirname(log_file), exist_ok=True)

# 发送钉钉消息
try:
    response = requests.post(url=webhook, data=json.dumps(payload), headers=headers, timeout=5)
    result = response.json()

    with open(log_file, "a+") as f:
        f.write("\n" + "=" * 60)
        f.write(f"\n[{now}] 用户: {user}")
        f.write(f"\n请求状态码: {response.status_code}")
        f.write(f"\n返回结果: {result}")
        f.write(f"\n告警内容:\n{msg}")

        if result.get("errcode") == 0:
            f.write("\n发送状态: ✅ 成功\n")
        else:
            f.write("\n发送状态: ❌ 失败\n")

except Exception as e:
    with open(log_file, "a+") as f:
        f.write("\n" + "=" * 60)
        f.write(f"\n[{now}] 用户: {user}")
        f.write(f"\n异常发生: {str(e)}")
        f.write(f"\n告警内容:\n{msg}")
        f.write("\n发送状态: ❌ 失败\n")

技术细节

提示:必须条件

提示:创建一个存放dingding_alert存放日志的文件;

bash 复制代码
root@zabbix:~# touch /var/log/zabbix/dingding_alert.log
root@zabbix:~# chown zabbix:zabbix /var/log/zabbix/dingding_alert.log
#为脚本添加可执行权限;
root@zabbix:~# chmod a+x /usr/lib/zabbix/alertscripts/dingding_alert.py
#测试脚本的准确性;
root@zabbix:~# python3 /usr/lib/zabbix/alertscripts/dingding_alert.py 138000000 subject of testing "This is a test information."

配置zabbix告警

提示:创建报警媒介类型:


提示:脚本参数::

bash 复制代码
{ALERT.SENDTO}
#对应脚本中的,user=sys.argv[1](发给钉钉群中哪个用户)。

{ALERT.SUBJECT}
#发送的信息的标题,在"报表"的"动作日志"中可以看到。

{ALERT.MESSAGE}
#对应脚本中的,text=sys.argv[3](发送的报警内容)。

创建报警动作:

添加触发器动作:

这里以system name has changed为例,意味着如果设备的名称被修改,就会触发告警。

参数解读:

"主题"对应"钉钉告警"媒介中的:{ALERT.SUBJECT}

"消息"对应"钉钉告警"媒介中的:{ALERT.MESSAGE}

主题:

故障名称(触发器名称):{EVENT.NAME}

消息:

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

恢复操作基本相同,添加细节操作

主题:

故障恢复:{EVENT.NAME}

消息:

恢复主机:{HOSTNAME1}

恢复时间:{EVENT.DATE}{EVENT.RECOVERY.TIME}

主机IP:{HOST.IP}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

给用户添加报警媒介

触发告警

登录到交换机POE-S5735S;修改交换机的设备名称;等待几分钟,查看报警情况。

POE-S5735S\]sysname POE-SWITCH-2025 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6d333c3dd44e4af6becff6e5a63e1926.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5f269974ab8844f79d74158346b5f231.png)

相关推荐
爱吃烤鸡翅的酸菜鱼2 小时前
Ubuntu环境下的 RabbitMQ 安装与配置详细教程
后端·ubuntu·rabbitmq·java-rabbitmq
diablobaal14 小时前
云计算学习100天-第34天 -zabbix监控2
学习·云计算·zabbix
Lethehong1 天前
从零开始在Ubuntu上快速部署Docker和Dify:结合 Dify + 蓝耘 MaaS平台打造 AI 应用实战指南
linux·人工智能·ubuntu·docker·蓝耘智算·蓝耘maas平台
wb1891 天前
CICD的持续集成与持续交付和Zabbix
运维·笔记·ci/cd·云计算·zabbix
showmethetime1 天前
Ubuntu平台查看.gz格式压缩文件内容以及利用grep命令过滤搜索内容
数据库·ubuntu·postgresql
运维成长记2 天前
2025-08-18面试题(nginx,mysql,zabbix为主)
mysql·nginx·zabbix
一伦明悦დ2 天前
jetson开发板Ubuntu系统Docker中使用 MySQL 数据库详解-安装与配置指南
数据库·mysql·ubuntu
柳鲲鹏2 天前
UBUNTU之Onvif开源服务器onvif_srvd:1、编译
ubuntu·onvif
努力努力再努力@李2 天前
利用本地电脑上的MobaXterm连接虚拟机上的Ubuntu
linux·运维·ubuntu
海梨花2 天前
你的Redis是不是在家能用,到了学校就连不上?
数据库·redis·ubuntu·虚拟机