跳到正文
DEV Community· LeoJulieta·· 3 小時前AI 評分25

Polylane:AI 助理將 MTTR 由 45 min 降至不足 15 min

Polylane: IA que corta MTTR de 45 min para <15 min

AI 導讀

Acme Corp 的 SRE 團隊部署 Polylane AI on-call 助理後,將事故平均解決時間(MTTR)由 45 min 降至不足 15 min。指南示範把 Polylane 接入 Cloudflare、Slack 和 PagerDuty,並以 sandbox 驗證、人工批准及審計記錄控制自動化操作。

正文

Polylane no Product Hunt: o assistente AI on‑call que acelera a resposta a incidentes na Cloudflare


Introdução

Imagine reduzir o tempo médio de resolução (MTTR) de incidentes críticos de 45 min para menos de 15 min sem precisar contratar mais engenheiros. Foi isso que a equipe de SRE da Acme Corp conseguiu ao colocar o Polylane em produção logo após o lançamento no Product Hunt, que já soma mais de 3,5 k estrelas.

Neste guia prático você vai aprender, passo a passo, como integrar o Polylane à sua conta Cloudflare, conectar Slack e PagerDuty, garantir a segurança das ações automatizadas e monitorar os resultados com métricas reais. Tudo pronto para ser copiado e colado nos seus repositórios.


Visão geral da arquitetura

graph TD
    A[Telemetria] -->|Alertas| B[Polylane (LLM)]
    B --> C{Validação Sandbox}
    C -->|Aprovado| D[API Cloudflare]
    C -->|Rejeitado| E[Log de auditoria]
    D --> F[Slack / PagerDuty]
    D --> G[GitHub Actions (auto‑deploy)]
    style B fill:#f9f,stroke:#333,stroke-width:2px
    style C fill:#ff9,stroke:#333,stroke-width:2px
  • Fontes de telemetria – Datadog, Prometheus, Cloudflare Logs, etc.
  • Polylane – orquestração baseada em LLM (GPT‑4 ou Claude).
  • Sandbox – validação de comandos antes de chamar a API da Cloudflare.
  • Destinos – Slack (notificações), PagerDuty (escalonamento) e GitHub Actions (deploy de playbooks).

1. Configurando o ambiente

1.1. Pré‑requisitos

Item Versão mínima
Node.js 18.x
npm 9.x
Cloudflare API Token Permissões Zone:Read, Zone:Edit, Cache Purge
Slack App Scopes chat:write, commands
PagerDuty Integration Key Escalation policy configurada
Conta no Product Hunt (opcional) —

1.2. Instalação do Polylane

# Clone o repositório oficial
git clone https://github.com/polylane/ai-on-call.git
cd ai-on-call

# Instale as dependências
npm ci

# Crie o .env (exemplo abaixo)
cat > .env <<EOF
CLOUDFLARE_API_TOKEN=your_cloudflare_token
SLACK_BOT_TOKEN=xoxb-...
PAGERDUTY_INTEGRATION_KEY=your_key
OPENAI_API_KEY=sk-...
EOF

1.3. Deploy rápido com GitHub Actions

Crie o workflow .github/workflows/deploy.yml:

name: Deploy Polylane
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Node
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm ci
      - run: npm run lint
      - name: Deploy to Vercel
        uses: amondnet/vercel-action@v20
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
          vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}

Commit e push – o GitHub Actions provisiona a versão mais recente em poucos minutos.


2. Criando o playbook de resposta a incidentes

Um playbook é apenas um arquivo YAML que descreve quais ações o LLM pode executar. Exemplo para um ataque DDoS detectado via Cloudflare Analytics:

# playbooks/ddos-response.yaml
name: Resposta a DDoS
trigger:
  - metric: "cf.threat_score"
    operator: ">"
    value: 80
actions:
  - name: "Ativar modo Under Attack"
    api: "zones/:zone_id/settings/security_level"
    method: "PATCH"
    payload:
      value: "under_attack"
  - name: "Bloquear IPs suspeitos"
    api: "firewall/access_rules/rules"
    method: "POST"
    loop: "top_100_ip_addresses"
    payload:
      mode: "block"
      configuration:
        target: "ip"
        value: "{{ item }}"
      notes: "Bloqueio automático por Polylane"
approval: "human"   # requer confirmação no Slack

2.1. Testando o playbook localmente

npm run test-playbook -- -f playbooks/ddos-response.yaml

O output mostrará cada chamada que seria feita à API da Cloudflare, permitindo revisão antes da produção.


3. Integração com Slack e PagerDuty

3.1. Notificação automática no Slack

// src/slack.js
import { WebClient } from '@slack/web-api';
const slack = new WebClient(process.env.SLACK_BOT_TOKEN);

export async function sendAlert(channel, title, blocks) {
  await slack.chat.postMessage({
    channel,
    text: title,
    blocks,
  });
}

Chame a função a partir do handler de incidentes:

await sendAlert('#sre-oncall', '🚨 DDoS detectado', [
  { type: 'section', text: { type: 'mrkdwn', text: '*Ação sugerida:* Ativar Under Attack' } },
  { type: 'actions', elements: [
    { type: 'button', text: { type: 'plain_text', text: 'Aprovar' }, value: 'approve' },
    { type: 'button', text: { type: 'plain_text', text: 'Rejeitar' }, value: 'reject' },
  ]},
]);

3.2. Escalonamento via PagerDuty

# src/pagerduty.yml
routing_key: ${PAGERDUTY_INTEGRATION_KEY}
event_action: trigger
payload:
  summary: "Incidente Cloudflare – DDoS"
  source: "polylane"
  severity: "critical"

Envie o payload com curl ou usando a SDK oficial:

curl -X POST "https://events.pagerduty.com/v2/enqueue" \
  -H "Content-Type: application/json" \
  -d @src/pagerduty.yml

4. Segurança e controle de mudanças

  1. Sandbox de validação – antes de qualquer chamada, o Polylane executa um dry‑run e verifica se o payload corresponde a um schema aprovado.
  2. Política de aprovação – o campo approval: "human" no playbook força o fluxo a esperar a confirmação do operador no Slack.
  3. Audit log – todas as requisições são gravadas em um bucket S3 (ou Cloudflare R2) com timestamp, usuário que aprovou e resposta da API.

Exemplo de registro de auditoria:

{
  "timestamp":"2026-10-23T14:12:07Z",
  "playbook":"ddos-response",
  "action":"firewall/access_rules/rules",
  "payload":{"mode":"block","configuration":{"target":"ip","value":"203.0.113.45"}},
  "approved_by":"@julia_sre",
  "api_response":{"id":"f1b2c3d4","status":"success"}
}

5. Métricas de desempenho

Métrica Como coletar Meta recomendada
MTTR Timestamp de alerta → timestamp de resolução (store no Prometheus) < 15 min
Falsos positivos Contagem de rejeições humanas < 5 %
Tempo de aprovação Diferença entre notificação Slack e clique < 2 min
Custo de API Soma de chamadas Cloudflare API (billing endpoint) ≤ US$ 0,10 por incidente

Dashboard rápido no Grafana (JSON importável):

{
  "dashboard": {
    "title": "Polylane – SRE Metrics",
    "panels": [
      { "type":"stat", "title":"MTTR (min)", "targets":[{"expr":"avg_over_time(mttr_seconds[1h])/60"}] },
      { "type":"graph", "title":"Tempo de aprovação", "targets":[{"expr":"histogram_quantile(0.95, sum(rate(approval_latency_seconds_bucket[5m])) by (le)"}] }
    ]
  }
}


Herramienta mencionada: Groq Cloud

來源:DEV Community · dev.to