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
- Sandbox de validação – antes de qualquer chamada, o Polylane executa um dry‑run e verifica se o payload corresponde a um schema aprovado.
- Política de aprovação – o campo
approval: "human"no playbook força o fluxo a esperar a confirmação do operador no Slack. - 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