钉钉机器人运维告警对接零基础教程

为什么要对接钉钉机器人做运维告警

服务器跑久了,CPU 飙升、磁盘写满、服务挂掉都是常事。
如果每次都要手动登机器看,不仅累还容易遗漏。把钉钉机器人当作告警通道,让服务器在发生异常时自动往钉钉群发消息,运维人员就能第一时间收到通知,快速响应。

本文以最简单的 Shell 脚本 + curl 命令为例,不依赖任何监控平台,零基础也能照着做。
如果你后续改用 Zabbix 或 Prometheus,原理完全一致:只要把告警消息拼成 JSON,发给机器人的 Webhook 地址即可。

前置准备:完成这三步就可以开始

开始操作前,请确保你已经具备以下条件:

  • 一个 钉钉群(普通群或内部群均可),群成员至少 3 人(包含自己),否则机器人无法启用。
  • 服务器能访问外网(能 curl 到 oapi.dingtalk.com)。
  • 一个 服务器登录账号(建议用 root,避免权限问题)。

如果群人数不够,临时拉两个测试号进群,配置完再踢掉即可。

第一步:在钉钉群里创建自定义机器人

这是配置中最关键的一步,操作路径如下:

  1. 打开目标钉钉群,点击右上角 群设置(齿轮图标)。
  2. 选择 智能群助手添加机器人
  3. 在机器人列表中找到 自定义(通过 Webhook 接入自定义服务),点击 添加
  4. 输入机器人名字(比如“运维告警机器人”),安全设置 建议勾选 加签,复制生成的密钥并保存好(后面脚本签名要用)。如果不勾选签名,则跳过此步骤。
  5. 点击 完成,页面会显示一个 Webhook 地址(类似 https://oapi.dingtalk.com/robot/send?access_token=xxx),立即复制保存,关闭后无法再次查看。
安全设置建议至少开启一个,最常用的是“加签”+“自定义关键词”组合:关键词设为“告警”,这样消息中必须包含“告警”二字才能发送成功。

第二步:编写推送告警的 Shell 脚本

在服务器上新建一个脚本文件,比如 /usr/local/bin/dingtalk_alert.sh,内容如下(关键地方根据你的实际信息替换):

#!/bin/bash
# 钉钉机器人运维告警对接脚本

# 配置区域 —— 换成你自己的值
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=你的TOKEN"
SECRET="你的加签密钥"  # 如果没开启加签,这行可以删掉

# 消息标题和内容(支持 Markdown 格式)
TITLE="【服务器告警】"
TEXT="### 告警通知\n- **时间**: $(date '+%Y-%m-%d %H:%M:%S')\n- **主机**: $(hostname)\n- **IP**: $(curl -s ifconfig.me)\n- **CPU 负载**: $(uptime | awk -F'load average:' '{print $2}')\n- **磁盘使用率**: $(df -h / | awk 'NR==2{print $5}')\n- **内存使用率**: $(free -m | awk 'NR==2{printf "%.1f%%", $3/$2*100}')\n"

# 构建消息体(如果开启了加签,需要额外算出签名参数)
if [ -n "$SECRET" ]; then
    TIMESTAMP=$(date +%s%3N)
    SIGN_STRING="${TIMESTAMP}\n${SECRET}"
    SIGN=$(echo -n "$SIGN_STRING" | openssl dgst -sha256 -hmac "$SECRET" -binary | base64)
    URL="${WEBHOOK_URL}×tamp=${TIMESTAMP}&sign=${SIGN}"
else
    URL="$WEBHOOK_URL"
fi

# 发送消息
curl -s -X POST "$URL" \
    -H "Content-Type: application/json" \
    -d "{
        \"msgtype\": \"markdown\",
        \"markdown\": {
            \"title\": \"$TITLE\",
            \"text\": \"$TEXT\"
        }
    }"

保存后赋予执行权限:

chmod +x /usr/local/bin/dingtalk_alert.sh

几点说明

  • 脚本自动收集了当前服务器的 CPU 负载、磁盘和内存使用率,你可以按需增减。
  • 如果不需要签名,直接删掉 SECRET 相关行,URL 直接用 WEBHOOK_URL。
  • 消息体使用 Markdown 格式,钉钉群内会渲染成卡片,可读性更好。

第三步:手动测试机器人与脚本是否可用

直接执行脚本,看钉钉群是否收到消息:

bash /usr/local/bin/dingtalk_alert.sh

如果群内弹出卡片消息,说明对接成功。
如果没收到,检查以下几点:

  • Webhook 地址是否完整,access_token 有没有复制错(常见错误是多复制了一个空格)。
  • 如果开启了加签,确认 SECRET 值是否正确。
  • 检查服务器能否访问外网:curl -I https://oapi.dingtalk.com(返回 200 或 302 即可)。
  • 如果安全设置选了“自定义关键词”,必须保证消息文本中包含该关键词(脚本中默认包含“告警”)。

避坑说明:这些细节不注意容易翻车

  1. Webhook 地址不要泄露:任何人拿到这个地址都可以给你的群发消息,建议只在信任的服务器使用,可以用加签防止伪造。
  2. JSON 格式必须严格正确:钉钉机器人只接受标准 JSON,引号必须是双引号,字段不能多逗号。如果脚本报错,可以用 echo "$JSON" | jq . 验证格式。
  3. 消息长度限制:单条消息文本不超过 20KB,如果告警内容太长会被截断,建议精简。
  4. 频率限制:每个机器人每分钟最多发送 20 条消息,如果服务器疯狂报警,会被钉钉限流,注意告警收敛(比如同一问题 5 分钟只发一次)。
  5. 加签时间戳必须准确:如果服务器时间偏差超过 1 分钟,签名会失效,务必同步 NTP 时间。

效果验证:模拟一次真实告警场景

你可以写一个简单的监测脚本,比如当磁盘使用率超过 90% 时自动触发告警:

#!/bin/bash
THRESHOLD=90
CURRENT=$(df -h / | awk 'NR==2{print $5}' | tr -d '%')
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
    /usr/local/bin/dingtalk_alert.sh
fi

将其加入 crontab,每分钟检查一次:

crontab -e
* * * * * /path/to/check_disk.sh

然后手动往根目录写入一个大文件填充磁盘(测试结束后记得删除),观察钉钉群是否收到告警。
收到告警即表示对接成功,可以放心用于生产环境。

总结

钉钉机器人运维告警对接并不复杂,核心就是拿到 Webhook 地址,按钉钉要求的 JSON 格式发送消息。
本文给出的 Shell 脚本可以直接复制使用,你只需替换 token、密钥和自定义告警内容。
如果遇到发送失败,优先检查脚本中的 JSON 格式和网络连通性。

如果你正在处理类似需求,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
零基础也能上手:Kibana日志可视化看板制作完整教程
下一篇
企业微信消息告警服务器配置:零基础配置企业微信消息告警服务器
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意