Skip to main content

Vue d’ensemble

PagerDuty s’intègre à Devin en tant que mécanisme d’acheminement des alertes. Lorsque des incidents se produisent dans PagerDuty, ils activent des sessions Devin via l’API Devin au moyen d’une passerelle webhook légère. Devin enquête ensuite automatiquement sur l’incident — en récupérant la télémétrie, en identifiant les causes racines et, si nécessaire, en ouvrant des PR de correctif. Cette approche fonctionne particulièrement bien lorsqu’elle est combinée à l’intégration Datadog MCP, où PagerDuty achemine l’alerte vers Devin et Devin utilise Datadog pour examiner les journaux et les métriques.

Configuration

1

Déployer un service passerelle webhook

Mettez en place un petit handler qui reçoit les payloads d’incident PagerDuty et appelle l’API Devin pour lancer des sessions d’investigation.Créez un utilisateur de service dans Settings > Service Users avec l’autorisation ManageOrgSessions. Stockez le jeton d’API dans DEVIN_API_KEY, l’ID de votre organisation dans DEVIN_ORG_ID et un secret partagé dans WEBHOOK_SECRET sur votre service passerelle. Vous configurerez ce même secret dans les Custom Headers du webhook PagerDuty à l’étape suivante.
const express = require('express');
const crypto = require('crypto');
const app = express();
app.use(express.json());

function verifySignature(req) {
  const secret = Buffer.from(req.headers['x-webhook-secret'] || '');
  const expected = Buffer.from(process.env.WEBHOOK_SECRET || '');
  if (!expected.length) throw new Error('WEBHOOK_SECRET environment variable is not set');
  if (secret.length !== expected.length) return false;
  return crypto.timingSafeEqual(secret, expected);
}

app.post('/pagerduty-alert', async (req, res) => {
  if (!verifySignature(req)) return res.status(401).send('Bad signature');

  const event = req.body?.event;
  if (!event || event.event_type !== 'incident.triggered') {
    return res.sendStatus(200);
  }

  const incident = event.data;
  const title = incident.title || 'Unknown incident';
  const service = incident.service?.summary || 'unknown-service';
  const urgency = incident.urgency || 'high';
  const incidentUrl = incident.html_url || '';

  const orgId = process.env.DEVIN_ORG_ID;
  const response = await fetch(
    `https://api.devin.ai/v3/organizations/${orgId}/sessions`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.DEVIN_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      prompt: [
        `PagerDuty incident triggered: "${title}"`,
        `Service: ${service}`,
        `Urgency: ${urgency}`,
        `Incident URL: ${incidentUrl}`,
        ``,
        `Investigate this incident:`,
        `1. Check recent logs and metrics for ${service}`,
        `2. Identify the root cause of the issue`,
        `3. If the root cause is a code issue, open a hotfix PR`,
        `4. Post your findings to #incidents on Slack`,
      ].join('\n'),
      tags: ['pagerduty-triage', `service:${service}`],
    }),
  });

  const { session_id } = await response.json();
  console.log(`Started Devin session ${session_id} for: ${title}`);
  res.sendStatus(200);
});

app.listen(3000);
Déployez ce service partout où il peut recevoir du trafic HTTPS — par exemple dans un Cloudflare Worker, une AWS Lambda ou un petit conteneur.
2

Ajouter une intégration webhook dans PagerDuty

  1. Dans PagerDuty, accédez à Services > [votre service] > Integrations
  2. Cliquez sur Add Integration et sélectionnez Generic Webhooks (v3)
  3. Renseignez la Webhook URL avec l’endpoint de votre service passerelle (par ex. https://your-bridge.example.com/pagerduty-alert)
  4. Dans Custom Headers, ajoutez X-Webhook-Secret avec la même valeur que celle stockée dans WEBHOOK_SECRET sur votre service passerelle
  5. Dans Event Subscription, filtrez sur le type d’événement incident.triggered pour ne déclencher le webhook que pour les nouveaux incidents
3

Vérifier le pipeline

Déclenchez un incident de test dans PagerDuty (ou utilisez un service de test) et confirmez que :
  1. Votre passerelle reçoit le payload du webhook
  2. Une nouvelle session Devin est créée sur app.devin.ai
  3. Devin commence à analyser l’incident

Bonnes pratiques

  • Commencez par des monitors de niveau warning. Testez le pipeline avec des incidents non critiques avant d’acheminer des alertes P1 de production vers Devin.
  • Filtrez par service ou par gravité. Utilisez les abonnements aux événements webhook de PagerDuty ou ajoutez une logique dans votre passerelle pour ignorer les services peu prioritaires ou trop bruyants. Cela évite que Devin soit submergé par des alertes peu utiles.
  • Utilisez des playbooks différents selon la gravité. Acheminez les alertes P1 pour une investigation immédiate et un correctif d’urgence. Acheminez les alertes P3 uniquement pour une analyse des causes racines. Transmettez des valeurs playbook_id différentes dans la requête à l’API Devin selon le niveau d’urgence.
  • Étiquetez les sessions pour en faciliter le suivi. L’exemple de code étiquette chaque session avec pagerduty-triage et le nom du service, ce qui facilite le filtrage et l’examen dans le tableau de bord Devin.

Combiner avec Datadog

PagerDuty est souvent utilisé avec l’intégration Datadog MCP. Dans cette configuration :
  1. PagerDuty achemine l’alerte vers Devin (ce qui active la session d’investigation)
  2. Devin utilise le Datadog MCP pour interroger les journaux, les métriques et les traces du service concerné
Devin dispose ainsi à la fois du contexte de l’alerte fourni par PagerDuty et des données d’observabilité détaillées de Datadog, ce qui permet des investigations plus approfondies.
Ajoutez dans Knowledge des informations sur l’architecture de votre service et vos runbooks d’astreinte afin que Devin puisse suivre automatiquement les procédures d’investigation de votre équipe.