Polylane:AI 助理將 MTTR 由 45 min 降至不足 15 min
Polylane: IA que corta MTTR de 45 min para <15 min
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
- 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
來源:DEV Community · dev.to