📌标签:
#监控#钉钉#飞书#告警#自动化#团队协作
当生产环境出现异常时,时间就是金钱。你希望第一时间收到告警,并且告警内容不仅仅是“服务挂了”,而是包含初步分析、可能原因、甚至建议的修复命令。将 Claude Code 接入钉钉或飞书机器人,可以让 AI 自动接收告警、分析日志、并推送结构化的问题报告到团队聊天软件。你不再是被动等待人工排查,而是让 AI 先做一轮“急诊”。
1. 为什么需要 AI 驱动的监控通知?
传统监控系统(Prometheus + Alertmanager、Zabbix、CloudWatch 等)能告诉你“什么出了问题”(如 CPU 飙升、错误率上升),但不会告诉你“为什么”以及“怎么修”。工程师收到告警后,需要登录服务器、查日志、分析代码,耗时较长。
将 Claude Code 集成到通知链路上,可以实现:
- 自动分析:告警触发时,调用 Claude Code 分析最近的日志、指标、错误栈。
- 结构化推送:将分析结果(可能原因、影响范围、建议操作)推送到钉钉/飞书群。
- 交互式修复:团队成员可在群里回复“/fix”,让 Claude Code 尝试自动修复(需授权)。
- 事后总结:问题解决后,AI 自动生成复盘报告。
2. 架构总览
[监控系统] → Webhook → [Claude Code (运行在服务器/CI环境)] → 分析 → [钉钉/飞书机器人] → 群消息 ↑ (可触发自动修复)实现方式有两种:
- 轻量级:监控系统直接调用 Claude Code 的 CLI(通过 HTTP 或脚本),传入告警信息,Claude Code 分析后通过 Webhook 发送到钉钉/飞书。
- 深度集成:使用 MCP Server 让 Claude Code 主动拉取监控数据(如 Prometheus),并自动发送通知。
本篇聚焦轻量级方案,更易落地。
3. 准备工作:钉钉/飞书机器人
3.1 钉钉机器人
- 在钉钉群中,点击“群设置”→“智能群助手”→“添加机器人”。
- 选择“自定义机器人”,命名如“Claude Code 告警”。
- 安全设置:选择“加签”(推荐)或“自定义关键词”(如“告警”)。
- 复制 Webhook URL(形如
https://oapi.dingtalk.com/robot/send?access_token=xxx)和加签密钥(如果选加签)。
3.2 飞书机器人
- 在飞书群中,点击“群设置”→“群机器人”→“添加机器人”。
- 选择“自定义机器人”,命名并设置描述。
- 安全设置:可选“签名校验”或“IP 白名单”。
- 复制 Webhook URL(形如
https://open.feishu.cn/open-apis/bot/v2/hook/xxx)。
保存好 Webhook URL 和签名密钥(如果启用)。
4. 让 Claude Code 发送钉钉/飞书消息
Claude Code 本身可以执行curl命令,因此你可以直接让它调用钉钉/飞书的 Webhook。
4.1 定义发送消息的 Skill
创建.claude/skills/send-alert.md:
--- name: send-alert description: 发送告警消息到钉钉/飞书群 parameters: - name: message description: 要发送的文本内容,支持 Markdown required: true - name: platform description: 'dingtalk' 或 'feishu' required: true - name: webhook_url description: 机器人的 Webhook URL(从环境变量读取,不硬编码) required: true --- # Skill: 发送告警 ## 步骤 1. 根据 `platform` 选择对应的消息格式: - **钉钉**:使用 Markdown 类型,结构为 `{"msgtype": "markdown", "markdown": {"title": "告警", "text": message}}` - **飞书**:使用富文本或 post 类型(简单起见,用 text 类型也能接受) 2. 执行 curl 命令: ```bash curl -X POST $webhook_url \ -H 'Content-Type: application/json' \ -d '{"msgtype": "markdown", "markdown": {"title": "Claude Code 告警", "text": "'"$message"'"}}'- 检查响应,如果失败则重试一次。
然后在 `CLAUDE.md` 中预置 Webhook URL(从环境变量读取,不写死): ```markdown ## 通知配置 - 钉钉 Webhook: 环境变量 `DINGTALK_WEBHOOK` - 飞书 Webhook: 环境变量 `FEISHU_WEBHOOK`AI 在执行时会自动读取这些变量。
5. 集成监控告警触发 Claude Code
假设你使用 Prometheus + Alertmanager,或阿里云监控,或自建脚本。核心思路:当告警触发时,执行一个脚本,该脚本调用 Claude Code 进行分析并发送通知。
5.1 编写告警处理脚本
创建一个脚本on-alert.sh(在服务器上运行):
#!/bin/bash# 输入环境变量:ALERT_TITLE, ALERT_MESSAGE, ALERT_LOGS_FILE (可选)# 调用 Claude Code 进行分析(非交互模式)echo"请分析以下告警:标题=$ALERT_TITLE,详情=$ALERT_MESSAGE。相关日志见 @$ALERT_LOGS_FILE。给出可能原因和解决建议,然后使用 send-alert skill 发送到钉钉群。"|\claude--print--no-tui --allowed-tools"Read,Bash,send-alert"在 Alertmanager 的 webhook 配置中调用此脚本。
5.2 更简单的办法:让 Claude Code 直接读取告警信息
你可以在监控系统中配置 webhook 直接调用 Claude Code 的 REST API(如果自建了网关),但更轻量的做法是:让监控系统把告警信息写到某个文件,然后 cron 调用 claude。
但为了实时性,建议使用 Alertmanager 的 webhook 配置:
receivers:-name:claude-codewebhook_configs:-url:http://localhost:5000/alert# 你写的一个简单的 HTTP 服务,内部调用 claude编写一个简单的 Node.js 服务接收 webhook,然后调用claude --print。
6. 实战:自动分析 nginx 错误日志并推送
场景:Nginx 错误日志中频繁出现504 Gateway Timeout,监控系统每分钟检查一次,如果最近 5 分钟内出现超过 10 次,触发告警。
步骤:
告警触发脚本(如通过 cron 执行监测脚本):
# 检测日志中 504 次数COUNT=$(tail-n1000/var/log/nginx/error.log|grep"504 Gateway Timeout"|wc-l)if[$COUNT-gt10];thenexportALERT_TITLE="Nginx 504 高频告警"exportALERT_MESSAGE="最近5分钟出现$COUNT次 504 Gateway Timeout"exportALERT_LOGS_FILE="/var/log/nginx/error.log"./on-alert.shfion-alert.sh调用 Claude Code 分析:echo"请分析 @$ALERT_LOGS_FILE中的 504 错误。提取最常见的 3 条 unique 错误消息,并结合上游服务状态码给出可能原因。使用 send-alert 发送到钉钉。"|claude--print--no-tuiClaude Code 读取日志文件,分析模式,生成报告,调用
send-alert发送。钉钉群收到消息示例:
[Claude Code 告警] **Nginx 504 高频告警** - 最近5分钟出现 23 次 504。 - 最常见错误:`upstream timed out (110: Connection timed out) while connecting to upstream` - 可能原因:后端服务器 10.0.1.22:8080 响应缓慢,当前连接数过高。 - 建议:检查后端服务器负载;临时增加 nginx proxy_read_timeout;或扩容后端。
7. 交互式修复:从钉钉/飞书触发 Claude Code
进阶:让团队成员在群里回复特定命令,例如“/fix-504”,触发 Claude Code 自动执行修复(如重启后端、增加超时)。这需要建立一个“bot 收消息”的能力。
实现方案:
- 使用钉钉/飞书提供的“接收消息”功能,配置消息回调地址为你自己的服务。
- 该服务接收消息,解析命令,然后调用 Claude Code 执行修复动作(例如修改 nginx 配置并 reload),并将结果推送回群。
但这涉及复杂的权限和安全考虑(谁可以触发自动修复)。建议只在可信环境中开启,并且限制命令范围。
更安全的做法:Claude Code 只生成修复建议,由人工确认后执行。例如:
用户回复:/suggest-fix Claude Code 生成一条具体命令,如 `sudo sed -i 's/proxy_read_timeout 60s;/proxy_read_timeout 120s;/' /etc/nginx/nginx.conf && sudo nginx -s reload` 用户再确认是否执行。8. 使用 MCP Server 统一管理通知
如果你已经配置了 MCP(模型上下文协议),可以使用官方的 Slack MCP 或通用 HTTP MCP 来发送消息。钉钉和飞书没有官方 MCP,但你可以自己实现一个简单的 MCP Server 封装 webhook 调用。
创建mcp-dingtalk服务器(伪代码):
// mcp-dingtalk serverserver.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:"send_dingtalk",description:"发送消息到钉钉群",inputSchema:{type:"object",properties:{message:{type:"string"}},required:["message"]}}]}));server.setRequestHandler(CallToolRequestSchema,async(request)=>{if(request.params.name==="send_dingtalk"){const{message}=request.params.arguments;awaitfetch(webhook_url,{method:'POST',body:JSON.stringify({msgtype:'text',text:{content:message}})});return{content:[{type:"text",text:"发送成功"}]};}});然后在 Claude Code 中配置此 MCP,AI 就可以使用send_dingtalk工具。这种方式更结构化,适合频繁使用。
9. 安全与成本
| 方面 | 建议 |
|---|---|
| Webhook 安全 | 使用加签或 IP 白名单;不要将 Webhook URL 暴露在公开仓库 |
| 权限限制 | Claude Code 运行时尽量使用只读权限,自动修复命令需要额外授权 |
| 消息频率 | 避免告警风暴导致 AI 频繁调用,可在脚本中加入去重和冷却(例如 10 分钟内相同告警只分析一次) |
| Token 成本 | 每次分析消耗 token(视日志大小),典型一次分析约 $0.05-0.30。对于频繁告警,考虑先 grep 预过滤 |
10. 完整案例:接入飞书 + Prometheus + Claude Code
最终效果:
- Prometheus 检测到
http_requests_total{status=500}在 5 分钟内增长 500%。 - Alertmanager 触发 webhook,调用本地服务。
- 本地服务执行:
tail -n 2000 /var/log/app/error.log | grep "500",将结果传给 Claude Code。 - Claude Code 分析后输出:“发现空指针异常,位于
src/UserController.java:42,原因是未校验用户输入。建议增加判空。” - 飞书机器人发送消息到
#production-alerts群。 - SRE 看到消息后,立即根据建议修改代码并上线。
整个流程从告警到收到分析结果,通常不超过 1 分钟。
11. 下篇预告
监控通知让 AI 成为你的 24/7 值班工程师。但要让 AI 更深入地参与开发流程,还需要掌握更多工程化技能。下一篇我们将进入新的篇章:工程与集成 · GitHub CI/CD(36-43篇),首先学习如何使用/install-github-app5分钟打通 Claude Code 与 GitHub。
👉下一篇:/install-github-app:5分钟打通Claude Code与GitHub认证与集成
思考题(自测理解)
- 如果你希望 Claude Code 在发送告警时不仅分析日志,还能查询 Prometheus 指标(如当前 QPS、错误率),应该如何扩展上述架构?需要哪些额外组件?
- 钉钉/飞书消息有长度限制(如 4096 字符)。如果 Claude Code 生成的报告超过限制,你应该让 AI 如何分段发送或压缩内容?
- 自动修复功能可能被滥用(例如恶意发送
/fix命令)。你会设计怎样的授权机制?比如需要特定用户或额外确认码?
监控不只是发现问题,更是缩短问题的生命周期。AI 让每一次告警都变成一次学习。下一章,我们把 Claude Code 和 GitHub 变成更亲密的战友。