Skip to main content

Visão geral

O PagerDuty se integra ao Devin como um mecanismo de encaminhamento de alertas. Quando incidentes são disparados no PagerDuty, eles acionam sessões do Devin por meio da Devin API usando uma ponte leve via webhook. O Devin então investiga o incidente automaticamente — coletando telemetria, rastreando causas-raiz e, opcionalmente, abrindo PRs de correção. Esse padrão funciona especialmente bem quando combinado com a integração do Datadog MCP, em que o PagerDuty encaminha o alerta para o Devin, e o Devin usa o Datadog para investigar logs e métricas.

Configuração

1

Implante um serviço intermediário de webhook

Crie um serviço simples que receba payloads de incidentes do PagerDuty e chame a API do Devin para iniciar sessões de investigação.Crie um service user em Settings > Service Users com a permissão ManageOrgSessions. Armazene o token da API como DEVIN_API_KEY, o ID da sua organização como DEVIN_ORG_ID e um segredo compartilhado como WEBHOOK_SECRET no seu serviço intermediário. Você configurará esse mesmo segredo nos Custom Headers do webhook do PagerDuty na próxima etapa.
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);
Implante isso em qualquer ambiente que possa receber requisições HTTPS — como um Cloudflare Worker, AWS Lambda ou um pequeno contêiner.
2

Adicione uma integração de webhook no PagerDuty

  1. No PagerDuty, acesse Services > [your service] > Integrations
  2. Clique em Add Integration e selecione Generic Webhooks (v3)
  3. Defina a Webhook URL como o endpoint do seu serviço intermediário (por exemplo, https://your-bridge.example.com/pagerduty-alert)
  4. Em Custom Headers, adicione X-Webhook-Secret com o mesmo valor que você armazenou como WEBHOOK_SECRET no seu serviço intermediário
  5. Em Event Subscription, filtre pelo tipo de evento incident.triggered para acionar apenas em novos incidentes
3

Verifique o fluxo

Gere um incidente de teste no PagerDuty (ou use um serviço de teste) e confirme que:
  1. Seu serviço intermediário recebe o payload do webhook
  2. Uma nova sessão do Devin é criada em app.devin.ai
  3. Devin começa a investigar o incidente

Boas práticas

  • Comece com monitores no nível de aviso. Teste o pipeline com incidentes não críticos antes de encaminhar alertas P1 de produção para o Devin.
  • Filtre por serviço ou severidade. Use as assinaturas de eventos de webhook do PagerDuty ou adicione lógica à sua bridge para ignorar serviços de baixa prioridade ou muito ruidosos. Isso evita que o Devin fique sobrecarregado com alertas de baixo valor.
  • Use playbooks diferentes para cada severidade. Encaminhe alertas P1 para investigação imediata e hotfix. Encaminhe alertas P3 apenas para análise de causa raiz. Passe valores de playbook_id diferentes na solicitação à API do Devin com base na urgência.
  • Adicione tags às sessões para facilitar o rastreamento. O código de exemplo marca cada sessão com pagerduty-triage e o nome do serviço, facilitando a filtragem e a revisão no dashboard do Devin.

Combinando com Datadog

O PagerDuty geralmente é usado em conjunto com a integração do Datadog MCP. Nesse padrão:
  1. PagerDuty encaminha o alerta para o Devin (acionando a sessão de investigação)
  2. Devin usa o Datadog MCP para consultar logs, métricas e traces do serviço afetado
Isso dá ao Devin tanto o contexto do alerta do PagerDuty quanto dados detalhados de observabilidade do Datadog, resultando em investigações mais completas.
Add Knowledge sobre a arquitetura do seu serviço e os runbooks de plantão para que o Devin possa seguir automaticamente os procedimentos de investigação da sua equipe.