#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import json
import requests
def send_feishu_alert(webhook_url, title, message):
"""
发送告警信息到飞书
:param webhook_url: 飞书机器人webhook地址
:param title: 告警标题
:param message: 告警内容
:return: 发送结果
"""
# 构建飞书消息格式
payload = {
"msg_type": "interactive",
"card": {
"config": {
"wide_screen_mode": True
},
"header": {
"title": {
"tag": "plain_text",
"content": title
},
"template": "red" # 默认为红色,可根据告警级别调整
},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": message
}
}
]
}
}
try:
# 发送POST请求
response = requests.post(
webhook_url,
data=json.dumps(payload),
headers={"Content-Type": "application/json"},
timeout=10
)
# 检查响应状态
if response.status_code == 200:
result = response.json()
if result.get("code") == 0:
print("告警信息已成功发送到飞书")
return True
else:
print(f"飞书API返回错误: {result.get('msg')}")
else:
print(f"HTTP请求失败,状态码: {response.status_code}")
except Exception as e:
print(f"发送告警失败: {str(e)}")
return False
def main():
# 检查参数数量
if len(sys.argv) < 4:
print("用法: python3 zabbix_feishu_alert.py <飞书机器人webhook> <标题> <消息内容>")
sys.exit(1)
# 获取参数
webhook_url = sys.argv[1]
title = sys.argv[2]
message = sys.argv[3]
# 发送告警
success = send_feishu_alert(webhook_url, title, message)
# 根据发送结果返回不同的退出码
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()
使用说明
飞书机器人配置:
- 在飞书群组中创建一个机器人,获取其 Webhook 地址
- 确保机器人有发送消息的权限
脚本配置:
- 将脚本保存到 Zabbix 服务器的
AlertScriptsPath
目录下 - 赋予执行权限:
chmod +x zabbix_feishu_alert.py
- 安装依赖:
pip3 install requests
- 将脚本保存到 Zabbix 服务器的
Zabbix 告警媒介配置:
- 类型:脚本
- 脚本名称:
zabbix_feishu_alert.py
脚本参数:
- {ALERT.SENDTO} - 直接填写飞书机器人 Webhook 地址
- {ALERT.SUBJECT} - 告警标题
- {ALERT.MESSAGE} - 告警内容
自定义调整:
- 可以根据需要修改消息卡片的样式,如颜色、布局等
- 可根据告警级别调整 header 中的 template 颜色(red, green, blue 等)