Skip to main content

自动分析 Datadog 告警

将 PagerDuty 或 Datadog 告警接入 Devin,实现自动化的事件排查。
AuthorCognition
Category事件响应
FeaturesAPI, MCP
1

启用 Datadog MCP

Devin 需要访问你的 Datadog 账户,以便在排查问题时查询日志、指标和监控。
  1. 前往 Settings > MCP Marketplace 并找到 Datadog
  2. 点击 Enable,然后输入你的 Datadog API key 和 application key —— 可在 Datadog > Organization Settings > API Keys 中生成这些密钥
  3. 点击 Test listing tools 以验证 Devin 是否能够成功连接
启用后,Devin 可以在单次会话中查询错误日志、拉取指标时间序列数据、列出活动监控项并搜索追踪。了解更多关于连接 MCP 服务器的信息。
2

构建告警到 Devin 的桥接通道

你需要一个小型服务,用于接收告警 webhook,并通过 Devin API 发起 Devin 会话。将其部署为无服务器函数(AWS Lambda、Cloudflare Worker)或轻量级容器:
from flask import Flask, request, jsonify
import requests, os

app = Flask(__name__)

@app.route("/alert", methods=["POST"])
def handle_alert():
    payload = request.json

    # Datadog webhook 载荷字段
    alert_title = payload.get("title", "Unknown alert")
    tags_str = payload.get("tags", "")
    service = next(
        (t.split(":", 1)[1] for t in tags_str.split(",") if t.strip().startswith("service:")),
        "unknown-service"
    )
    alert_url = payload.get("link", "")

    org_id = os.environ["DEVIN_ORG_ID"]
    response = requests.post(
        f"https://api.devin.ai/v3/organizations/{org_id}/sessions",
        headers={"Authorization": f"Bearer {os.environ['DEVIN_API_KEY']}"},
        json={
            "prompt": (
                f"Datadog alert fired: '{alert_title}'\n"
                f"Service: {service}\n"
                f"Alert link: {alert_url}\n\n"
                "Using the Datadog MCP:\n"
                "1. Pull error logs for this service from the past 30 min\n"
                "2. Identify the top error messages and stack traces\n"
                "3. Check if this correlates with a recent deploy\n"
                "4. If the root cause is clear, open a hotfix PR\n"
                "5. Post your findings to #incidents on Slack"
            ),
            "playbook_id": "14fed18b89d44713a26e673cf258f548",
        }
    )
    return jsonify(response.json()), 200
app.devin.aiSettings > Service Users 中创建一个服务用户,并授予 ManageOrgSessions 权限。复制创建后显示的 API 令牌,并将其作为 DEVIN_API_KEY 存储在你的桥接服务中。将 DEVIN_ORG_ID 设置为你的组织 ID —— 使用你的令牌调用 GET https://api.devin.ai/v3/enterprise/organizations 来获取该值。上面的代码使用了 !triage 模板 playbook —— 复制一份,并根据你的技术栈自定义排查步骤,然后在你的桥接服务中更新 playbook_id
3

将告警路由到 Webhook 端点

直接在 Datadog 中配置:
  1. 在 Datadog 仪表板中,进入 Integrations > Webhooks
  2. 点击 New Webhook,并将 URL 设置为你的 bridge endpoint(例如:https://your-bridge.example.com/alert
  3. 在任意监控的通知消息中添加 @webhook-devin-bridge —— 每当该监控触发时,Devin 都会进行排查
从 PagerDuty 配置:
  1. 在 PagerDuty 中,进入 Services > [your service] > Integrations
  2. 添加一个 Generic Webhooks (v3) 集成
  3. 将 webhook URL 设置为你的 bridge endpoint,并按事件类型 incident.triggered 进行过滤
先从 warning 级别的监控开始,用来测试整个流程,然后再路由关键告警。
4

Devin 会分析什么

当告警触发一个会话时,Devin 使用 Datadog MCP 来执行结构化排查——查询日志、关联部署变更,并将错误追溯到源代码。Devin 在 Slack 中发布的示例排查结果:
告警调查:payments-service 错误率飙升

时间线:
- 14:28 UTC — Deploy #492 发布(commit abc123f)
- 14:31 UTC — 错误率从 0.3% 跃升至 5.2%
- 14:32 UTC — 告警触发

根本原因:Deploy #492 将 Stripe webhook 处理程序
(src/webhooks/stripe.ts)重构为 async/await,但移除了
handlePaymentIntent() 外层的 try/catch。未处理的 rejection 导致
约 4% 的结账请求返回 500 错误。

修复方案:添加了错误边界,引入结构化日志记录,并对客户端错误返回
规范的 4xx 响应。

PR #493 已创建 → https://github.com/acme/payments/pull/493
5

扩展流水线

在基础排查流程跑通后,再逐步叠加更多自动化能力:自定义分诊手册(triage playbook)。 bridge 代码已经在使用 !triage 模板 playbook。复制一份,并根据你团队的技术栈定制排查清单——添加各服务专属的运行手册、升级路径,以及紧急修复 PR(拉取请求)的处理规范。按严重级别划分处理策略。 将 P1 告警路由为需要立刻排查并紧急修复的事件。将 P3 告警仅路由为根因分析使用。针对不同严重级别使用不同的提示词或 playbook。为你的服务添加 Knowledge ——例如正常阈值、架构说明、值班运行手册——这样 Devin 的排查就能从你团队的上下文出发,而不是从零开始。