服务器飞书告警配置:零基础对接自定义机器人
服务器飞书告警配置的核心思路是:在飞书群里加一个自定义机器人,拿到 Webhook 地址,再用 Shell 脚本检测服务器指标,发现异常就向这个地址发一条消息。
整套流程不需要在服务器装额外客户端,一台 Linux 机器加一个飞书群就能跑起来。
下面按“先拿到地址、再写脚本、后设定时、最后验证和排错”的顺序讲,命令都可以直接复制修改。
先拿到飞书群的 Webhook 地址
打开需要接收告警的飞书群,点右上角群设置,找到“群机器人”,选择“添加机器人”,然后选“自定义机器人”。
创建时填写名称,例如“服务器告警”,按需设置头像。
安全设置里推荐勾选“签名校验”,也可以先用“自定义关键词”降低接入门槛。
创建完成后,飞书会给出一个 Webhook 地址,形如:
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
这个地址只显示一次,务必先复制保存。 建议把它写进服务器的环境变量或独立配置文件,不要直接硬编码在脚本里,方便以后更换。
在服务器准备监控脚本
以下示例适用于常见 Linux 发行版,需要服务器已安装 curl 和 awk。
先确认:
which curl awk
如果提示找不到,用系统包管理器安装即可,例如 yum install -y curl 或 apt install -y curl。
把 Webhook 地址写入配置文件:
echo 'FEISHU_WEBHOOK="你的Webhook地址"' > /etc/feishu-alert.conf
chmod 600 /etc/feishu-alert.conf
新建脚本 /usr/local/bin/feishu-alert.sh:
#!/bin/bash
source /etc/feishu-alert.conf
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $1}')
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print int($2+$4)}')
MEM=$(free | awk '/Mem/{printf "%.0f", $3/$2*100}')
DISK=$(df / | awk 'NR==2{print int($5)}')
send_alert() {
local msg="【服务器告警】$HOSTNAME ($IP)\n$1"
curl -s -X POST -H "Content-Type: application/json" \
-d "{\"msg_type\":\"text\",\"content\":{\"text\":\"$msg\"}}" \
"$FEISHU_WEBHOOK"
}
[ "$CPU" -gt 90 ] && send_alert "CPU 使用率过高:${CPU}%"
[ "$MEM" -gt 90 ] && send_alert "内存使用率过高:${MEM}%"
[ "$DISK" -gt 85 ] && send_alert "磁盘使用率过高:${DISK}%"
赋权后先手动执行一次:
chmod +x /usr/local/bin/feishu-alert.sh
/usr/local/bin/feishu-alert.sh
如果当前指标没超过阈值,飞书不会收到消息,这属于正常现象。
想验证通道是否通,可以临时把阈值改成 0 再跑一次,验证后改回。
用 crontab 定时检测
手动执行没问题后,加入定时任务,每 5 分钟检查一次:
crontab -e
追加一行:
*/5 * * * * /usr/local/bin/feishu-alert.sh >/dev/null 2>&1
保存退出即可。
crontab 是最轻量的定时方案,适合单机告警;
如果机器数量多,建议改用 Prometheus Alertmanager 或 Zabbix 统一管理。
避坑与常见失败处理
收不到消息,优先检查三处:Webhook 地址是否完整、飞书群机器人是否被移除、安全设置是否匹配。
如果开了签名校验,上面的脚本没有带签名,会直接被拒。
要么关闭签名,要么按飞书文档在脚本里加时间戳和签名计算。
脚本手动能跑、定时不跑,通常是环境变量问题。
crontab 的环境和登录 Shell 不同,脚本里已经用 source 加载配置,基本能规避;
如果仍失败,把命令改成绝对路径,并在脚本开头补上 PATH=/usr/bin:/bin。
告警刷屏,说明阈值设得太低或波动大。
建议给同一指标加冷却时间,例如用临时文件记录上次告警时间,10 分钟内不重复推送。
curl 返回非 200,把 -s 去掉重新执行,查看返回体里的 code 和 msg,常见是 JSON 格式错误或 Webhook 失效。
脚本改动后没生效,检查是否有语法错误:bash -n /usr/local/bin/feishu-alert.sh,没有输出说明语法正确。
验证配置是否真正生效
完成以上步骤后,做一次完整验证:把磁盘阈值临时改成一个当前就会触发的值,例如 DISK 判断改成 -gt 1,手动执行脚本,确认飞书群收到带主机名和 IP 的消息,再改回原阈值。
之后等待一个 crontab 周期,用 crontab -l 确认任务存在,用 tail -f /var/log/cron 观察是否按时触发。
看到通知到达,说明服务器飞书告警配置已经打通。
需要提醒的是,这套方案基于文本消息,适合快速落地;
如果要分级别、@值班人、发卡片消息,需要在机器人安全设置和请求体上做更多配置。
单机场景够用,多机场景建议上专业监控平台。