服务器钉钉机器人告警配置:从创建群机器人到脚本触发
服务器钉钉机器人告警的核心是利用钉钉群的自定义机器人 Webhook 地址,让服务器通过 HTTP 请求把告警文本推送到群里。
整个过程不依赖钉钉开放平台复杂应用,只需要一个群、一个机器人地址和一段能在服务器上执行的脚本。
下面按实际落地顺序说明。
创建钉钉群机器人并拿到 Webhook
打开钉钉,进入一个内部群(建议单独建一个运维告警群,避免打扰业务群)。
点击群设置,找到“群机器人”或“智能群助手”,选择“添加机器人”,类型选“自定义”。
给机器人起一个能识别的名字,比如“服务器告警”。
安全设置建议至少勾选一种:
- 自定义关键词:消息里必须包含设定的词,例如“告警”,否则发送失败。
- 加签:生成一个以
SEC开头的密钥,脚本需要用这个密钥计算签名。 - IP 地址段:只允许特定公网 IP 调用,适合服务器有固定出口 IP 的情况。
创建完成后,钉钉会显示一个 Webhook 地址,格式类似 https://oapi.dingtalk.com/robot/send?。
access_token=xxxxxx
这个地址就是服务器要调用的接口。
用一条 curl 命令先验证通路
在正式写脚本前,先在服务器上手动发一条消息,确认网络和地址没问题。
如果安全设置选了“自定义关键词”,消息内容必须包含该词。
curl -X POST 'https://oapi.dingtalk.com/robot/send?access_token=你的token' \
-H 'Content-Type: application/json' \
-d '{"msgtype":"text","text":{"content":"服务器告警测试:如果你看到这条消息,说明Webhook可用"}}'
执行后如果钉钉群收到消息,说明基础链路通了。
如果返回 errcode 非 0,先检查 token 是否完整、关键词是否匹配、服务器能否访问外网。
编写可复用的告警脚本
实际使用中不会每次都手敲 curl。
可以在服务器上建一个脚本文件,例如 /usr/local/bin/dingtalk-alert.sh,内容如下:
#!/bin/bash
WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=你的token"
MESSAGE="$1"
curl -s -X POST "$WEBHOOK" \
-H 'Content-Type: application/json' \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"服务器告警:${MESSAGE}\"}}"
保存后赋予执行权限:
chmod +x /usr/local/bin/dingtalk-alert.sh
之后任何需要告警的地方都可以调用:
/usr/local/bin/dingtalk-alert.sh "磁盘使用率超过90%"
如果机器人开启了加签,Webhook 请求需要额外带时间戳和签名参数。
签名计算方式为:把 timestamp\n密钥 用 HMAC-SHA256 计算,再 Base64 编码,最后对结果做 URL 编码。
脚本中可以用 openssl 实现,但建议先确保无加签模式下能发送成功,再叠加签名逻辑。
接入系统监控触发条件
告警脚本本身只是发送工具,真正要解决的是“什么时候发”。
常见做法是结合 crontab 定时检查,或接入现有监控系统。
以磁盘检查为例,写一个判断脚本:
#!/bin/bash
THRESHOLD=90
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
/usr/local/bin/dingtalk-alert.sh "根分区磁盘使用率 ${USAGE}%,请及时清理"
fi
然后通过 crontab 每 10 分钟执行一次:
crontab -e
# 添加一行
*/10 * * * * /usr/local/bin/check-disk.sh
同样的思路可以扩展到内存、服务进程存活、端口连通性等场景。
关键是先定义清楚告警条件,再调用发送脚本,避免把所有检查逻辑堆在一个文件里。
常见发送失败与排查方向
返回 310000 或提示关键词不匹配:如果机器人安全设置选了“自定义关键词”,消息内容必须包含该词。
检查脚本里拼接的文本是否真的带了关键词。
返回 300001 或无效 token:Webhook 地址被复制不完整,或机器人已被删除。
重新在群设置里确认机器人是否还在,复制完整地址。
服务器上 curl 无响应或超时:先确认服务器能访问外网,可以试 curl -I https://oapi.dingtalk.com。
如果服务器在受限内网,需要配置代理或换用其他告警通道。
消息发送成功但没人看到:检查机器人是否被移出群,或群消息免打扰设置过强。
建议单独建告警群并让相关人开启提醒。
验证与后续维护
配置完成后,不要只做一次测试就结束。
建议手动触发一次真实条件,比如临时把磁盘阈值调低,确认从检查到收到消息的完整链路都正常。
同时把 Webhook 地址和加签密钥当作敏感信息管理,不要提交到公开代码仓库。
如果机器人密钥泄漏,及时在钉钉群设置里重置。
钉钉机器人告警适合中小规模服务器的基础通知需求,搭建成本低,但本身不负责告警聚合、抑制和升级。
如果服务器数量变多,可以先用脚本跑通,再考虑接入更完整的监控平台。