前言说明:
在日常服务器或网站监控中,check酱 是一款轻量级的可视化监控工具,它支持通过 webhook 推送告警通知。与此同时,synology chat 是很多人内部协作首选的聊天平台。如果你希望:
监控结果自动通知到 chat 群组
支持格式化展示多个字段
自动换行、美化结构,避免“堆一团”
本文将教你如何通过一个轻量级的 docker webhook 转发服务,将 check酱 的 webhook 完美适配 synology chat,由于synology chat无法直接接受json格式请求需要需要咱们自己搭建一套转发服务。
项目亮点:
支持
check酱webhook 的json或payload=格式;自动解析字段并转为中文别名(如
url→ “目标地址”);多行字段(如
value/html)支持🔸图标并换行美观显示;兼容 synology chat 的换行规范(使用
\n);容器化部署,一键启动,稳定可靠!
整体架构:
check酱 ➝ webhook (post) ➝ 转发器 (flask docker) ➝ synology chat webhook
环境准备:
群晖设置:
打开 synology chat
点击头像 → 整合 → 传入 webhook
新建 webhook,记录其 url,例如:
https://yourdomain:5001/webapi/entry.cgi?api=syno.chat.external&method=incoming&version=2&token=xxxxxxxx
转发部署(docker)
我们使用 python flask 编写一个简洁的转发服务,自动将接收到的 check酱 webhook 转为 chat 所需格式。
拓展知识:
check酱自定义脚本:脚本类型(javascript node16.15.0)结果变量一定是要stdout命名
const https = require('https');
// 从环境变量中读取 url
const url = process.env.url;
https.get(url, (res) => {
let raw = '';
res.on('data', chunk => raw = chunk);
res.on('end', () => {
try {
const json = json.parse(raw);
if (!json.data || !array.isarray(json.data)) {
console.error('返回的数据格式不正确');
process.exit(1);
}
// 取前 10 条数据,并提取 title、hot_value、label_desc、url
const stdout = json.data
.slice(0, 10)
.map(item => ({
title: item.title,
hot_value: item.hot_value,
label_desc: item.label_desc,
url: item.url
}));
// 输出到 stdout,作为监控任务返回值
console.log(json.stringify(stdout, null, 2));
} catch (e) {
console.error('解析 json 失败:', e.message);
}
});
}).on('error', err => {
console.error('请求失败:', err.message);
});
宝塔通知:
配置页面和位置 宝塔面板 - 设置 - 告警通知 - 自定义消息通道 - 添加
通知消息内容展示:
哪吒通知:
项目:https://github.com/nezhahq/nezha
位置:后台管理 - 通知 - 添加 -请求体 输入
写法:实时出站:{{ printf \"%.2f\" (div #server.netoutspeed# 1048576) }} mb/s (字节转兆)
{
"title": "🚨 #server.name#",
"desp": "⚠️ 异常通知\n\n💻 ==基本信息:==\n\n-> 名称:#server.name#\n-> ip地址:#server.ip#\n-> ipv4:#server.ipv4#\n\n📊 ==资源情况:==\n\n-> cpu使用:#server.cpu#%\n\n🌐 ==网络流量:==\n\n-> 实时入站:{{ printf \"%.2f\" (div #server.netinspeed# 1048576) }} mb/s\n-> 实时出站:{{ printf \"%.2f\" (div #server.netoutspeed# 1048576) }} mb/s\n-> 总入流量:{{ printf \"%.2f\" (div #server.transferin# 1048576) }} mb\n-> 总出流量:{{ printf \"%.2f\" (div #server.transferout# 1048576) }} mb\n\n📈 ==系统负载:==\n\n-> 1 分钟:#server.load1#\n-> 5 分钟:#server.load5#\n-> 15 分钟:#server.load15#"
}其他通知:
✅ 1. 标准平铺结构(普通kv)
{
"id": 101,
"name": "服务器1",
"cpu": 85,
"memory": "70%",
"status": "运行中"
}✅ 2. 多级嵌套结构(dict 套 dict 或 list)
{
"name": "服务a",
"value": {
"cpu": "88%",
"memory": {
"total": "8gb",
"used": "5.5gb"
}
}
}✅ 3. 字符串形式的嵌套 json(字符串内是 json)
{
"value": "{\"cpu\": 90, \"mem\": \"8gb\", \"disk\": {\"used\": 40}}"
}✅ 4. 包含 html 或换行标签的内容
{
"info": "服务器状态
温度:75°c
正常
"
}✅ 5. 包含表达式字段(如监控计算值)
{
"netin": 10485760,
"text": "实时入网速:{{ printf \"%.2f\" (div #netin# 1048576) }} mb/s"
}✅ 6. check酱类格式(包含 link/html/data)
{
"id": 998,
"title": "页面变动",
"html": "...",
"link": "https://example.com",
"data": "{\"变化\": \"新增字段\"}"
}👉 html、link、data 会被自动跳过或特殊处理,避免污染通知信息。
✅ 7. list 格式(作为顶层或字段)
{
"value": [
{"item": "a", "count": 5},
{"item": "b", "count": 8}
]
}
👉 会列出所有条目,并自动编号,如:
🔹 第 1 项:
🔸 item: a
🔸 count: 5
✅ 8. 空值处理
{}
👉 会显示 📭 收到空数据,避免报错。✅ 特殊规则支持
✅ 英文键支持百度翻译;
✅ 自定义键名映射(通过
key_mapping_json);✅ 支持任意层级的数据深度;
✅ chatgpt 聊天支持纯文本或代码智能判断。
✅覆盖了 99% 的 webhook 场景,特别适合以下平台推送格式:
✅ check酱;
✅ 哪吒监控;
✅ uptimerobot、zabbix、grafana;
✅ jenkins/github webhook;
✅ prometheus alertmanager;
✅ 自定义 json 通知等。
转发总结:
通过本教程,我们实现了:
✅ check酱 webhook 与 synology chat 的无缝对接
✅ 自动格式化与美化通知内容
✅ 兼容多种 webhook 格式(payload / json / form)
✅ 基于 docker 快速部署,无依赖
✅ 支持宝塔面板的消息webhook通知
✅ 兼容哪吒面板流量计算转换的webhook通知
- ✅ 常见单位自动换算功能
本站镜像:
可以联系站长付费一键代搭服务
更新日志:
2025年7月23日
修复了:网络速度转换 (b/s → mb/s) 流量数据转换 (b → gb) # kb → mb# mb → gb 按 1024 递进
2025年7月20日
更新了:常见单位换算功能网络速度转换 (b/s → mb/s) 流量数据转换 (b → gb) # kb → mb# mb → gb
2025年7月18日
更新了:哪吒面板webhook通知流量算法转换
2025年7月3日
更新了:支持宝塔面板通知到synology chat
2025年7月2日
更新了:支持字段自动映射
更新了:字段支持百度翻译
修复了:多层级index时提示无法转换的问题
修复了:多种json数据格式的支持
原创声明:本文章为原创内容,所有文章均由博主亲自撰写,严格遵循原创原则。我们承诺不使用任何人工智能生成的内容,所发布的每一篇文章都经过深思熟虑,旨在为读者提供真实、有价值的观点和信息。我们坚信原创才是知识分享的根本,致力于为广大读者呈现最具真实性和独特性的文章。感谢您的支持与关注,欢迎持续关注全讯足球网的原创内容。
美国 3f
帮大忙了。
浙江省宁波市 2f
试试
陕西省咸阳市 1f
很棒!