Zabbix6.4LTS钉钉告警配置教程

admin 2026-01-31 23:57:19 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文档详细介绍了Zabbix6.4LTS配置钉钉告警的完整流程,涵盖钉钉机器人创建、Python告警脚本编写、ZabbixWeb端媒介类型及动作设置等关键步骤。文档提供了具体的代码示例与参数配置,包含高级告警模板、测试验证及故障排除方法,并提出了保护Webhook密钥等安全建议,是一份具备较高可操作性的运维监控集成指南。 综合评分: 88 文章分类: 安全运营,安全建设,安全工具


cover_image

Zabbix 6.4 LTS 钉钉告警配置教程

原创

刘军军 刘军军

运维星火燎原

2026年1月31日 00:01 河北

一、钉钉告警配置流程

1.1 在钉钉创建机器人

  1. 进入钉钉群设置:
  • 打开需要接收告警的钉钉群
  • 点击群设置 → 智能群助手
  1. 添加自定义机器人:
  • 选择”添加机器人” → “自定义”
  • 设置机器人名称(如:Zabbix监控告警)
  • 选择安全设置(推荐使用”加签”)
  • 复制Webhook地址和加签密钥
  1. 获取Webhook信息:
   # 示例Webhook格式
   https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN

   # 加签密钥(如果有)
   SECXXXXXX  # 复制保存这个值

1.2 安装Python依赖

# 安装Python3和pip
sudo apt install python3 python3-pip -y

# 安装钉钉SDK
sudo pip3 install requests

# 创建脚本目录
sudo mkdir -p /usr/lib/zabbix/alertscripts
sudo chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts

二、创建钉钉告警脚本

2.1 创建Python告警脚本

sudo vim /usr/lib/zabbix/alertscripts/dingtalk.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import json
import sys
import os
import hmac
import hashlib
import base64
import time
import urllib.parse

classDingTalkSender:
def__init__(self, webhook_url, secret=None):
        self.webhook_url = webhook_url
        self.secret = secret

defgenerate_sign(self):
"""生成加签"""
ifnot self.secret:
return self.webhook_url

        timestamp = str(round(time.time() * 1000))
        secret_enc = self.secret.encode('utf-8')
        string_to_sign = '{}\n{}'.format(timestamp, self.secret)
        string_to_sign_enc = string_to_sign.encode('utf-8')
        hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
        sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

returnf"{self.webhook_url}&timestamp={timestamp}&sign={sign}"

defsend_message(self, subject, message, at_mobiles=None, is_at_all=False):
"""发送钉钉消息"""
# 构建消息内容
        data = {
"msgtype": "markdown",
"markdown": {
"title": subject,
"text": message
            },
"at": {
"atMobiles": at_mobiles if at_mobiles else [],
"isAtAll": is_at_all
            }
        }

# 获取签名后的URL
        url = self.generate_sign()

# 发送请求
        headers = {'Content-Type': 'application/json'}
try:
            response = requests.post(
                url,
                data=json.dumps(data),
                headers=headers,
                timeout=10
            )
            result = response.json()

if result.get('errcode') == 0:
                print("消息发送成功")
returnTrue
else:
                print(f"发送失败: {result.get('errmsg')}")
returnFalse

except Exception as e:
            print(f"请求异常: {str(e)}")
returnFalse

defmain():
if&nbsp;len(sys.argv) <&nbsp;4:
&nbsp; &nbsp; &nbsp; &nbsp; print("Usage: dingtalk.py <webhook_url> <subject> <message> [secret] [at_mobiles]")
&nbsp; &nbsp; &nbsp; &nbsp; sys.exit(1)

&nbsp; &nbsp; webhook_url = sys.argv[1]
&nbsp; &nbsp; subject = sys.argv[2]
&nbsp; &nbsp; message = sys.argv[3]
&nbsp; &nbsp; secret = sys.argv[4]&nbsp;if&nbsp;len(sys.argv) >&nbsp;4elseNone
&nbsp; &nbsp; at_mobiles = sys.argv[5].split(',')&nbsp;if&nbsp;len(sys.argv) >&nbsp;5elseNone

# 创建发送器实例
&nbsp; &nbsp; sender = DingTalkSender(webhook_url, secret)

# 发送消息
&nbsp; &nbsp; success = sender.send_message(subject, message, at_mobiles)

ifnot&nbsp;success:
&nbsp; &nbsp; &nbsp; &nbsp; sys.exit(1)

if&nbsp;__name__ ==&nbsp;"__main__":
&nbsp; &nbsp; main()

2.2 创建Shell包装脚本(可选)

sudo&nbsp;vim&nbsp;/usr/lib/zabbix/alertscripts/dingtalk.sh
#!/bin/bash
# Zabbix钉钉告警脚本

WEBHOOK_URL="$1"
SUBJECT="$2"
MESSAGE="$3"
SECRET="$4"
AT_MOBILES="$5"

# 调用Python脚本
python3 /usr/lib/zabbix/alertscripts/dingtalk.py&nbsp;"$WEBHOOK_URL""$SUBJECT""$MESSAGE""$SECRET""$AT_MOBILES"

exit&nbsp;$?

2.3 设置脚本权限

# 设置执行权限
sudo chmod +x&nbsp;/usr/lib/zabbix/alertscripts/dingtalk.py
sudo chmod +x&nbsp;/usr/lib/zabbix/alertscripts/dingtalk.sh

# 设置所属用户
sudo chown zabbix:zabbix /usr/lib/zabbix/alertscripts/dingtalk.py
sudo chown zabbix:zabbix /usr/lib/zabbix/alertscripts/dingtalk.sh

# 测试脚本
cd&nbsp;/usr/lib/zabbix/alertscripts
sudo -u&nbsp;zabbix ./dingtalk.py"https://oapi.dingtalk.com/robot/send?access_token=TEST""测试标题""测试消息"

三、Zabbix Web界面配置

3.1 创建报警媒介类型

  1. 进入Zabbix Web界面
  2. Administration → Media types
  3. 点击”Create media type”

配置参数:

  • Name: DingTalk Alert
  • Type: Script
  • Script name: dingtalk.py
  • Script parameters:
  {ALERT.SENDTO}
  {ALERT.SUBJECT}
  {ALERT.MESSAGE}
  {ALERT.SECRET}
  {ALERT.AT_MOBILES}

Message templates配置:

# 告警主题:
Problem: {TRIGGER.NAME}

# 告警消息:
## [{TRIGGER.SEVERITY}] 告警通知

**主机**: {HOST.NAME}
**IP地址**: {HOST.IP}
**问题**: {TRIGGER.NAME}
**严重程度**: {TRIGGER.SEVERITY}
**当前状态**: {TRIGGER.STATUS}
**发生时间**: {EVENT.DATE} {EVENT.TIME}
**持续时间**: {EVENT.AGE}
**事件ID**: {EVENT.ID}

**监控项值**:
{ITEM.NAME}: {ITEM.VALUE}

**触发条件**:
{TRIGGER.EXPRESSION}

**详细信息**:
{TRIGGER.URL}

3.2 创建用户和报警媒介

  1. Administration → Users
  2. 选择或创建用户
  3. 点击”Media”标签页 → “Add”

用户媒介配置:

  • Type: DingTalk Alert
  • Send to: 钉钉Webhook URL
  • When active: 1-7,00:00-24:00
  • Use if severity: 选择需要的严重级别
  • Status: Enabled

高级配置:

  • Secret: 钉钉加签密钥
  • At Mobiles: 要@的手机号(逗号分隔)

3.3 配置报警动作

  1. Configuration → Actions
  2. 选择”Trigger actions”
  3. 点击”Create action”

Action配置:

  • Name: DingTalk Alert Action

  • Conditions:

  • Trigger severity = Disaster

  • Trigger severity = High

  • Trigger severity = Average

Operations配置:

  • Default operation step duration: 1h

  • Operations:

  • Send message to Users: DingTalk Alert

  • Send message to User groups: Zabbix administrators

Recovery operations:

  • Operation type: Send message
  • Send to Users: DingTalk Alert

四、高级告警配置

4.1 多级别告警模板

#!/usr/bin/env python3
# 高级钉钉告警脚本(支持不同严重级别)

defformat_message(event_type, trigger_data):
"""格式化不同级别的告警消息"""

&nbsp; &nbsp; templates = {
'problem': {
'title':&nbsp;'🚨 [{SEVERITY}] 告警: {TRIGGER_NAME}',
'template':&nbsp;"""## 🚨 [{SEVERITY}] 告警通知

**主机**: {HOST_NAME}
**IP**: {HOST_IP}
**问题**: {TRIGGER_NAME}
**严重程度**: {SEVERITY}
**发生时间**: {EVENT_TIME}
**持续时间**: {EVENT_AGE}

**监控项值**:
{ITEM_VALUES}

**触发条件**:
{TRIGGER_EXPRESSION}

[查看详情]({TRIGGER_URL})"""
&nbsp; &nbsp; &nbsp; &nbsp; },
'recovery': {
'title':&nbsp;'✅ 恢复: {TRIGGER_NAME}',
'template':&nbsp;"""## ✅ 问题已恢复

**主机**: {HOST_NAME}
**问题**: {TRIGGER_NAME}
**恢复时间**: {EVENT_TIME}
**持续时间**: {EVENT_AGE}

**监控项值**:
{ITEM_VALUES}

[查看详情]({TRIGGER_URL})"""
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; }

return&nbsp;templates[event_type]

4.2 告警频率控制

#&nbsp;在Zabbix动作中配置频率控制
#&nbsp;Operation steps:
#&nbsp;- Step 1: 立即发送
#&nbsp;- Step 2: 每隔30分钟发送(如果问题持续)
#&nbsp;- Step 3: 每隔2小时发送(如果问题持续)

五、测试告警配置

5.1 手动测试脚本

# 测试告警脚本
cd&nbsp;/usr/lib/zabbix/alertscripts
sudo -u zabbix ./dingtalk.py \
&nbsp; &nbsp;&nbsp;"https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"&nbsp;\
&nbsp; &nbsp;&nbsp;"测试告警"&nbsp;\
&nbsp; &nbsp;&nbsp;"## 测试消息\n这是一条测试告警消息\n**时间**:&nbsp;$(date)"&nbsp;\
&nbsp; &nbsp;&nbsp;"YOUR_SECRET"&nbsp;\
&nbsp; &nbsp;&nbsp;"13800138000"

5.2 创建测试触发器

-- 在Zabbix数据库中创建测试触发器
INSERTINTOtriggers&nbsp;(
&nbsp; &nbsp; description, expression,&nbsp;priority,&nbsp;status,&nbsp;value,&nbsp;type
)&nbsp;VALUES&nbsp;(
'Test DingTalk Alert',
'{Template OS Linux:system.cpu.util[,idle].last()}<>0',
4, &nbsp;#&nbsp;High&nbsp;severity
0,
1,
0
);

5.3 使用zabbix_sender测试

# 发送测试数据
zabbix_sender -z&nbsp;zabbix-server-ip -s&nbsp;"test-host"&nbsp;-k"system.cpu.util[,idle]"&nbsp;-o10

# 检查告警是否触发
tail -f&nbsp;/var/log/zabbix/zabbix_server.log&nbsp;|&nbsp;grep&nbsp;dingtalk

六、故障排除

6.1 常见问题解决

# 检查脚本权限
ls&nbsp;-la&nbsp;/usr/lib/zabbix/alertscripts/

# 检查Zabbix用户权限
sudo -u&nbsp;zabbix /usr/lib/zabbix/alertscripts/dingtalk.py&nbsp;--help

# 查看Zabbix Server日志
tail -f&nbsp;/var/log/zabbix/zabbix_server.log&nbsp;|&nbsp;grep&nbsp;alert

# 调试模式运行
sudo -u&nbsp;zabbix&nbsp;python3&nbsp;-u&nbsp;/usr/lib/zabbix/alertscripts/dingtalk.py&nbsp;\
&nbsp; &nbsp;&nbsp;"WEBHOOK_URL""测试""消息""SECRET"

6.2 日志分析

# 查看脚本执行日志
grep&nbsp;dingtalk /var/log/zabbix/zabbix_server.log

# 查看Python错误
sudo -u&nbsp;zabbix&nbsp;python3&nbsp;/usr/lib/zabbix/alertscripts/dingtalk.py2>&1

# 检查网络连接
sudo -u&nbsp;zabbix curl -I https://oapi.dingtalk.com

6.3 性能优化

# 添加超时控制
sudo vim /usr/lib/zabbix/alertscripts/dingtalk.py
# 在requests.post中添加timeout参数

# 添加重试机制
defsend_message_with_retry(self, subject, message, max_retries=3):
for&nbsp;attempt&nbsp;in&nbsp;range(max_retries):
if&nbsp;self.send_message(subject, message):
returnTrue
&nbsp; &nbsp; &nbsp; &nbsp; time.sleep(2&nbsp;** attempt)
returnFalse

七、监控和统计

7.1 告警发送统计

-- 查询钉钉告警发送统计
SELECT
&nbsp; &nbsp; mediaid,
COUNT(*)&nbsp;as&nbsp;total_count,
SUM(CASEWHENstatus&nbsp;=&nbsp;1THEN1ELSE0END)&nbsp;as&nbsp;success_count,
SUM(CASEWHENstatus&nbsp;=&nbsp;0THEN1ELSE0END)&nbsp;as&nbsp;failed_count
FROM&nbsp;alerts
WHERE&nbsp;mediatypeid = (SELECT&nbsp;mediatypeid&nbsp;FROM&nbsp;media_type&nbsp;WHEREname&nbsp;=&nbsp;'DingTalk Alert')
GROUPBY&nbsp;mediaid;

7.2 创建监控项

# 监控钉钉告警成功率
# 使用Zabbix Agent自定义监控项
UserParameter=dingtalk.success.rate,/usr/bin/python3 /path/to/monitor_script.py

八、安全建议

8.1 安全配置

# 保护Webhook URL和Secret
sudo chmod 600 /usr/lib/zabbix/alertscripts/dingtalk.py

# 使用环境变量存储敏感信息
export&nbsp;DINGTALK_WEBHOOK="your_webhook"
export&nbsp;DINGTALK_SECRET="your_secret"

# 定期轮换密钥

8.2 访问控制

#&nbsp;限制脚本目录访问
sudo chmod 700 /usr/lib/zabbix/alertscripts
sudo chown zabbix:zabbix /usr/lib/zabbix/alertscripts

#&nbsp;配置SELinux(如启用)
sudo chcon -t zabbix_alertscript_t /usr/lib/zabbix/alertscripts/dingtalk.py

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:运维星火燎原 刘军军 刘军军《Zabbix 6.4 LTS 钉钉告警配置教程》

脚本、AI与人工 网络安全文章

脚本、AI与人工

文章总结: 文章探讨了工作中脚本、AI与人工的分工模式。将工作分为完全脚本化的高重复任务、AI主导的繁琐半结构化任务以及人主导的高复杂度任务。结论指出AI虽能提
评论:0   参与:  0