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キー と 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
service user を、app.devin.aiSettings > Service UsersManageOrgSessions 権限付きで作成します。作成後に表示される API トークンをコピーし、ブリッジサービスで DEVIN_API_KEY として保存します。DEVIN_ORG_ID には組織 ID を設定します — 組織 ID は、トークンを使って GET https://api.devin.ai/v3/enterprise/organizations を呼び出して取得します。上記のコードは、!triage テンプレートプレイブック を使用しています — これを複製して自分のスタック向けに調査手順をカスタマイズし、ブリッジサービス内の playbook_id を更新してください。
3

アラートを Webhook に送信する

Datadog から直接設定する場合:
  1. Datadog ダッシュボードで Integrations > Webhooks に移動します
  2. New Webhook をクリックし、URL をブリッジのエンドポイントに設定します(例: 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 をブリッジのエンドポイントに設定し、イベントタイプ 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 テンプレートプレイブック を使用しています。これを複製し、チームのスタックに合わせて調査チェックリストを調整します。サービス固有のランブック、エスカレーションパス、ホットフィックス用 PR の運用ルールなどを追加してください。重大度でスコープを切る。 P1 アラートは即時調査とホットフィックスの対象にします。P3 アラートは根本原因分析のみを行う対象にします。重大度ごとに異なるプロンプトやプレイブックを使い分けてください。サービスに関する Knowledge を追加する — 通常のしきい値、アーキテクチャ、オンコール用ランブックなどを登録しておくことで、Devin の調査をゼロからではなく、チームのコンテキストを前提に開始できるようにします。