Zabbix配置钉钉告警

  • A+
所属分类:Zabbix

钉钉配置

创建钉钉群聊,发起群聊

Zabbix配置钉钉告警

创建一个内部群

Zabbix配置钉钉告警

输入群聊名称

Zabbix配置钉钉告警

添加钉钉机器人

进入已创建的群聊,点击群设置图标

Zabbix配置钉钉告警

点击添加机器人

Zabbix配置钉钉告警

选择自定义

Zabbix配置钉钉告警

输入机器人名称

Zabbix配置钉钉告警

保存Webhook URL,复制生成的Webhook URL,后续配置Zabbix时会用到

Zabbix配置钉钉告警

Zabbix配置

在Zabbix服务器上安装requests模块,用于发送HTTP请求

yum -y install epel-release
yum -y install python3-pip
pip3 install requests

创建告警脚本

vim /usr/local/zabbix/share/zabbix/alertscripts/dingtalk_alert.py
#!/usr/bin/env python
# -- coding: utf-8 --

import json
import requests
import sys

# 钉钉机器人Webhook地址
Dingtalkaccesstoken = "144f44aac70ffa1f0cb79d217649faa726a26596640792132e0d9d4c11630528" # 替换为你的钉钉机器人accesstoken
webhook = "https://oapi.dingtalk.com/robot/send?access_token=" + Dingtalkaccesstoken

def formatmessage(title, content):
    message_template = "{}\n{}".format(title, content)
    return message_template

def sendmsg(title, content):
    headers = {'Content-Type': 'application/json'}
    message = formatmessage(title, content)
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    try:
        response = requests.post(webhook, headers=headers, data=json.dumps(data))
        return response.status_code
    except Exception as e:
        print("发送失败,错误信息:", e)
        return None

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("使用方法:python dingtalkalert.py '标题' '内容'")
        sys.exit(1)
    title = sys.argv[1]
    content = sys.argv[2]
    status_code = sendmsg(title, content)
    if status_code == 200:
        print("消息发送成功")
    else:
        print("消息发送失败,状态码:", status_code)

给脚本执行权限

chmod +x /usr/local/zabbix/share/zabbix/alertscripts/dingtalk_alert.py

修改脚本的属主和属组

chown -R zabbix:zabbix /usr/local/zabbix*

编辑zabbix_server.conf文件,设置告警脚本路径

vim /usr/local/zabbix/etc/zabbix_server.conf
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts

重启Zabbix服务器以使配置生效

systemctl restart zabbix-server.service

测试一下脚本是否成功

python /usr/local/zabbix/share/zabbix/alertscripts/dingtalk_alert.py "测试标题" "告警"
Zabbix配置钉钉告警

配置Zabbix告警媒介类型

访问Zabbix Web界面,进入配置 --> 媒介 --> 点击"创建媒介类型"

Zabbix配置钉钉告警

填写以下信息:名称:DingTalk alarm,类型:脚本,脚本:选择之前创建的脚本文件,脚本参数:{ALERT.SUBJECT} {ALERT.MESSAGE} {ALERT.SENDTO} --> 添加

Zabbix配置钉钉告警

参数解释
ALERT.SUBJECT:警报主题,简要说明警报内容;
ALERT.MESSAGE:警报消息,详细描述警报信息;
ALERT.SENDTO:发送对象,指定警报接收者。

创建告警动作

进入配置 --> 动作 --> 触发器动作 --> 点击创建动作

Zabbix配置钉钉告警

自定义名称 --> 操作

Zabbix配置钉钉告警
Zabbix配置钉钉告警

下面的仅发送到是刚才配置的媒介类型

操作添加

主题
服务器:{HOSTNAME1}发生: {TRIGGER.NAME} 故障!

消息
消息内容告警主机: {HOSTNAME1}
主机地址: {HOST.IP}
告警等级: {TRIGGER.SEVERITY}
监控项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
事件ID: {EVENT.ID}
Zabbix配置钉钉告警

恢复操作添加

主题
服务器:{HOSTNAME1}的{TRIGGER.NAME}故障已恢复!

消息
恢复主机: {HOSTNAME1}
主机地址: {HOST.IP}
告警等级: {TRIGGER.SEVERITY}
监控项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}(已恢复至正常值)
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}(已恢复)
告警信息: {TRIGGER.NAME}(已处理)
恢复时间: {EVENT.DATE} {EVENT.TIME}
事件ID: {EVENT.ID}
Zabbix配置钉钉告警

用户设置 --> 配置 --> 报警媒介 --> 添加

Zabbix配置钉钉告警
Zabbix配置钉钉告警

钉钉告警信息测试

Zabbix配置钉钉告警
xxx