> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Analyser automatiquement les alertes Datadog

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="Enquêter automatiquement sur les alertes Datadog" description="Connectez les alertes PagerDuty ou Datadog à Devin pour l’analyse automatisée des incidents." prompt="Aide-moi à configurer un pipeline d’analyse des alertes Datadog vers Devin. Suis le guide à l’adresse https://docs.devin.ai/use-cases/gallery/api-datadog-alert-investigation et accompagne-moi à chaque étape : activer le MCP de Datadog, créer le gestionnaire de webhook et le connecter à mes moniteurs Datadog." category="Gestion des incidents" features="API, MCP" />

<div className="uc-detail-wrapper">
  <Tip>Pour un guide d'intégration Datadog plus détaillé, [cliquez ici](/fr/enterprise/integrations/datadog).</Tip>

  <Steps>
    <Step title="Activer le MCP Datadog">
      Devin a besoin d'accéder à votre compte Datadog pour interroger les journaux, les métriques et les monitors lors d'investigations.

      1. Allez dans **Settings > Connections > MCP servers** et recherchez **Datadog**
      2. Cliquez sur **Enable**, sélectionnez votre site/région Datadog et saisissez votre `DD-API-KEY` et votre `DD-APPLICATION-KEY` — générez-les dans [Datadog > Organization Settings > API Keys](https://app.datadoghq.com/organization-settings/api-keys)
      3. Cliquez sur **Test listing tools** pour vérifier que Devin peut se connecter

      Une fois activé, Devin peut interroger les journaux d'erreurs, récupérer des séries temporelles de métriques, lister les monitors actifs et rechercher des traces — le tout dans une même session. En savoir plus sur la [connexion de serveurs MCP](/fr/work-with-devin/mcp).
    </Step>

    <Step title="Mettez en place la passerelle alertes-vers-Devin">
      Vous avez besoin d’un service léger qui reçoit les webhooks d’alerte et démarre une session Devin via la [Devin API](/fr/api-reference/overview). Déployez-le sous forme de fonction serverless (AWS Lambda, Cloudflare Worker) ou de conteneur léger :

      ```python theme={null}
      from flask import Flask, request, jsonify
      import requests, os

      app = Flask(__name__)

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

          # Champs du payload webhook Datadog
          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
      ```

      Créez un [service user](/fr/api-reference/v3/overview) dans **Settings > Service Users** sur [app.devin.ai](https://app.devin.ai/?utm_source=docs\&utm_medium=use-case-gallery) avec l’autorisation `ManageOrgSessions`. Copiez le jeton d’API affiché après la création et enregistrez-le comme `DEVIN_API_KEY` sur votre service passerelle. Définissez `DEVIN_ORG_ID` sur l’identifiant de votre organisation — obtenez-le en appelant `GET https://api.devin.ai/v3/enterprise/organizations` avec votre jeton.

      Le code ci-dessus utilise le [playbook modèle `!triage`](https://app.devin.ai/settings/playbooks/14fed18b89d44713a26e673cf258f548?utm_source=docs\&utm_medium=use-case-gallery) — dupliquez-le et personnalisez les étapes d’investigation pour votre stack, puis mettez à jour le `playbook_id` dans votre service passerelle.
    </Step>

    <Step title="Envoyer les alertes au webhook">
      **Directement depuis Datadog :**

      1. Dans votre tableau de bord Datadog, allez dans **Integrations > Webhooks**
      2. Cliquez sur **New Webhook** et définissez l’URL sur le point de terminaison de votre bridge (par ex. `https://your-bridge.example.com/alert`)
      3. Dans le message de notification de n’importe quel monitor, ajoutez `@webhook-devin-bridge` — Devin analyse chaque fois que ce monitor se déclenche

      **Depuis PagerDuty :**

      1. Dans PagerDuty, allez dans **Services > \[your service] > Integrations**
      2. Ajoutez une intégration **Generic Webhooks (v3)**
      3. Définissez l’URL du webhook sur le point de terminaison de votre bridge et filtrez par type d’événement `incident.triggered`

      Commencez avec des monitors de niveau « warning » pour tester le pipeline avant de router les alertes critiques.
    </Step>

    <Step title="Ce que Devin analyse">
      Lorsqu'une alerte déclenche une session, Devin utilise le Datadog MCP pour mener une enquête structurée : interroger les logs, corréler avec les déploiements et remonter l'erreur jusqu'au code source.

      <PromptBlock>
        ```txt Enquêter sur l'alerte Datadog theme={null}
        Alerte Datadog : "Taux d'erreurs élevé sur payments-service (5,2 %, seuil 1 %)"
        déclenchée le 2026-02-10 à 14:32 UTC.

        À l'aide du Datadog MCP :
        1. Récupérer les logs d'erreur de payments-service des 30 dernières minutes
        2. Regrouper par message d'erreur : quelle est la principale défaillance ?
        3. Vérifier les événements Datadog pour les déploiements récents de payments-service
        4. Lire le code source pertinent et les commits récents pour le chemin d'exécution en échec
        5. Si c'est corrigible, ouvrir une pull request (PR) avec un correctif urgent. Sinon, publier les conclusions dans #incidents.
        ```
      </PromptBlock>

      Exemple d'enquête que Devin publie sur Slack :

      ```
      Analyse d'alerte : pic du taux d'erreur de payments-service

      Chronologie :
      - 14:28 UTC — Déploiement #492 publié (commit abc123f)
      - 14:31 UTC — Taux d'erreur passé de 0,3 % à 5,2 %
      - 14:32 UTC — Alerte déclenchée

      Cause racine : le déploiement #492 a refactorisé le gestionnaire de webhook Stripe
      (src/webhooks/stripe.ts) en async/await mais a supprimé le bloc try/catch
      autour de handlePaymentIntent(). Les rejets non gérés renvoient
      des erreurs 500 sur ~4 % des requêtes de paiement.

      Correctif : ajout d'une barrière d'erreur avec journalisation structurée et réponses 4xx
      appropriées pour les erreurs client.

      PR #493 ouverte → https://github.com/acme/payments/pull/493
      ```
    </Step>

    <Step title="Étendre le pipeline">
      Une fois les investigations de base en place, ajoutez davantage d’automatisation :

      **Personnalisez le playbook de triage.** Le code de bridge utilise déjà le [playbook modèle `!triage`](https://app.devin.ai/settings/playbooks/14fed18b89d44713a26e673cf258f548?utm_source=docs\&utm_medium=use-case-gallery). Dupliquez-le et adaptez la checklist d’investigation à la stack de votre équipe — ajoutez des runbooks spécifiques à chaque service, des procédures d’escalade et des conventions pour les PR de correctif d’urgence (hotfix).

      **Définissez le périmètre par sévérité.** Achemignez les alertes P1 pour une investigation immédiate et un correctif d’urgence. Achemignez les alertes P3 uniquement pour l’analyse de la cause racine. Utilisez des prompts ou des playbooks différents selon le niveau de sévérité.

      **Ajoutez du contenu dans [Knowledge](/fr/product-guides/knowledge)** sur vos services — seuils normaux, architecture, runbooks d’astreinte — afin que l’investigation de Devin parte du contexte propre à votre équipe plutôt que de zéro.
    </Step>
  </Steps>
</div>
