Voltar para o blog

Reduzindo o MTTR: criando um agente de IA para triagem e resolução automática de incidentes

Introdução

Em ambientes distribuídos, o problema raramente é apenas detectar que algo falhou. Prometheus, Grafana, CloudWatch, Datadog, Loki, OpenTelemetry e outras ferramentas conseguem identificar degradações em poucos segundos.

O desafio começa depois do alerta.

Um incidente típico pode exigir que um engenheiro:

  1. identifique qual aplicação foi afetada;
  2. descubra o namespace, cluster e ambiente;
  3. consulte métricas;
  4. analise logs;
  5. verifique eventos do Kubernetes;
  6. compare deployments recentes;
  7. identifique alterações em configuração;
  8. valide dependências como banco, Redis ou RabbitMQ;
  9. determine uma ação corretiva;
  10. execute a correção;
  11. confirme se o ambiente voltou ao estado saudável.

Cada uma dessas etapas consome tempo e aumenta o MTTR — Mean Time to Recovery ou Mean Time to Repair, métrica que representa quanto tempo uma organização leva, em média, para recuperar um serviço após uma falha.

É exatamente nesse espaço que agentes de Inteligência Artificial podem ser utilizados.

Em vez de utilizar IA apenas para resumir alertas, podemos construir um agente capaz de coletar evidências automaticamente, correlacionar métricas, logs, traces e mudanças recentes, executar runbooks previamente autorizados e validar se a intervenção realmente resolveu o problema.

O objetivo não deve ser:

"Dar acesso administrativo ao cluster para um LLM resolver qualquer incidente."

Uma arquitetura segura deve ser:

Alerta
   ↓
Coleta de contexto
   ↓
Correlação de evidências
   ↓
IA / mecanismo de decisão
   ↓
Policy Engine
   ↓
Runbook autorizado
   ↓
Execução controlada
   ↓
Validação
   ↓
Fechamento ou escalonamento

Essa diferença é fundamental.

O agente de IA deve ser tratado como parte da plataforma de automação operacional, e não como um administrador irrestrito da infraestrutura.


O que é um agente de IA para incidentes

Um agente de IA para incidentes é um sistema capaz de receber eventos operacionais, coletar contexto sobre o ambiente, analisar possíveis causas e decidir quais ações devem ser executadas dentro de um conjunto de permissões previamente definido.

Ele combina componentes tradicionais de observabilidade e automação com modelos de linguagem.

Uma implementação pode integrar:

Prometheus
Grafana
Alertmanager
Loki
Tempo
OpenTelemetry
Kubernetes API
AWS APIs
Git
ArgoCD
CI/CD
CMDB
Runbooks
LLM

O LLM não precisa executar diretamente comandos contra a infraestrutura.

Uma arquitetura mais segura utiliza ferramentas intermediárias.

Por exemplo:

LLM
 ↓
restartDeployment(namespace, deployment)
 ↓
Policy Engine
 ↓
Kubernetes API

Em vez de:

LLM
 ↓
shell("kubectl delete pod -A ...")

A primeira abordagem permite restringir exatamente quais operações podem ser realizadas.


Principais conceitos

MTTA

Mean Time to Acknowledge representa o tempo necessário para que um incidente seja reconhecido.

Um sistema de triagem automática pode reduzir esse tempo praticamente ao intervalo entre o disparo do alerta e o processamento pelo agente.


MTTD

Mean Time to Detect representa o tempo necessário para detectar a falha.

Essa parte normalmente é responsabilidade da stack de observabilidade.


MTTR

Mean Time to Recovery mede quanto tempo leva para restaurar o serviço.

É normalmente aqui que automação e agentes de IA apresentam maior potencial.


Runbook

Runbooks são procedimentos documentados para solucionar situações conhecidas.

Exemplo:

Problema:
Deployment sem pods disponíveis.

Diagnóstico:
- verificar replicas;
- verificar eventos;
- consultar logs;
- verificar recursos do cluster.

Remediação:
- reiniciar rollout, caso permitido;
- validar pods;
- validar endpoint.

Um agente pode transformar runbooks estáticos em workflows executáveis.


Tool Calling

Em uma arquitetura baseada em agentes, o modelo recebe ferramentas que pode solicitar.

Exemplo conceitual:

getPods(namespace)
getDeployment(name)
getPodLogs(pod)
getEvents(namespace)
getMetrics(workload)
restartDeployment(name)
rollbackDeployment(name)

Isso é significativamente mais seguro do que permitir execução arbitrária de shell.


Policy Engine

O Policy Engine determina se a ação sugerida pelo agente pode realmente ser executada.

Por exemplo:

restartDeployment -> permitido

scaleDeployment 3 → 5 -> permitido

scaleDeployment 3 → 100 -> negado

deleteNamespace -> negado

deleteDatabase -> negado

Ou ainda:

Produção:
restart -> automático
rollback -> aprovação humana
delete -> proibido

Arquitetura de referência

Uma arquitetura para Kubernetes pode ser estruturada assim:

                     ┌──────────────────┐
                     │   Prometheus     │
                     └────────┬─────────┘
                              │
                              ▼
                     ┌──────────────────┐
                     │   Alertmanager   │
                     └────────┬─────────┘
                              │ webhook
                              ▼
                  ┌─────────────────────────┐
                  │ Incident AI Controller  │
                  └────────────┬────────────┘
                               │
             ┌─────────────────┼─────────────────┐
             │                 │                 │
             ▼                 ▼                 ▼
          Kubernetes          Loki             Tempo
          API Server          Logs             Traces
             │
             ▼
       Prometheus API
             │
             ▼
          Git / CI/CD
             │
             ▼
       Context Builder
             │
             ▼
        AI Reasoning
             │
             ▼
        Policy Engine
             │
             ▼
      Remediation Executor
             │
             ▼
        Kubernetes / AWS

O Alertmanager pode encaminhar notificações por webhook para sistemas externos; as regras normalmente são avaliadas pelo Prometheus e posteriormente encaminhadas ao Alertmanager.


Fluxo de funcionamento

Imagine o seguinte alerta:

HighErrorRate

service=checkout-api
namespace=production
error_rate=18%

O agente recebe o alerta e inicia a coleta de evidências.

1. Consulta o Deployment

kubectl get deployment checkout-api -n production

Resultado:

READY   UP-TO-DATE   AVAILABLE
2/5     5            2

2. Consulta os pods

kubectl get pods -n production -l app=checkout-api

Resultado:

checkout-api-abc12   Running
checkout-api-def34   CrashLoopBackOff
checkout-api-ghi56   CrashLoopBackOff
checkout-api-jkl78   Running
checkout-api-mno90   CrashLoopBackOff

3. Consulta eventos

kubectl get events -n production \
  --sort-by=.metadata.creationTimestamp

O agente encontra:

Back-off restarting failed container

4. Consulta logs

kubectl logs checkout-api-def34 \
  -n production \
  --previous \
  --tail=200

Encontra:

Connection pool exhausted
database timeout after 5000ms

5. Consulta métricas

A telemetria mostra:

DB connections: 100/100
API latency p95: 4.8s
API error rate: 18%
CPU: 42%
Memory: 53%

O agente já consegue descartar CPU e memória como causas principais.


6. Correlaciona mudanças recentes

O agente consulta Git ou ArgoCD:

Deployment realizado 7 minutos antes.

Alteração:
DB_POOL_SIZE=50 → DB_POOL_SIZE=100

Cinco réplicas com pools de até 100 conexões poderiam potencialmente pressionar o limite do banco muito mais do que a configuração anterior.

A IA então produz uma hipótese:

Possível causa:

O último deployment aumentou o pool máximo de conexões.
O banco atingiu o limite máximo de conexões.
Pods começaram a apresentar timeout e CrashLoopBackOff.

Confiança: alta.

Mas a IA ainda não executa nada.

A decisão segue para o Policy Engine.


Problema → Solução → Configuração → Funcionamento

Antes

O incidente exigia que um engenheiro executasse manualmente:

kubectl get pods
kubectl describe pod
kubectl logs
kubectl get events

Depois consultasse Grafana, Loki, GitHub, ArgoCD e banco de dados.

Tempo médio:

Detecção:         1 minuto
Triagem:          8 minutos
Investigação:    15 minutos
Correção:         5 minutos
Validação:        5 minutos

MTTR aproximado: 34 minutos

Depois

Com o agente:

Detecção:          1 minuto
Coleta:           20 segundos
Correlação:       10 segundos
Remediação:       30 segundos
Validação:         2 minutos

MTTR: aproximadamente 4 minutos

O ganho não vem apenas da IA.

Grande parte da redução ocorre porque a coleta de informações e a execução dos runbooks foram automatizadas.


Exemplo em ambiente de produção

Considere uma empresa executando aproximadamente 40 microsserviços em Amazon EKS.

A arquitetura possui:

AWS
 └── EKS
     ├── APIs
     ├── Workers
     ├── RabbitMQ
     ├── Redis
     ├── PostgreSQL
     └── Observability
          ├── Prometheus
          ├── Grafana
          ├── Loki
          └── Tempo

O agente roda em um namespace dedicado:

incident-system

e possui acesso de leitura aos namespaces monitorados.

Operações destrutivas não são permitidas.

Ações automáticas permitidas poderiam incluir:

reiniciar Deployment
reiniciar StatefulSet específico
escalar workload dentro de limites definidos
reexecutar Job
remover Pod unhealthy
acionar rollback previamente definido

Dependendo do risco, algumas dessas ações podem exigir aprovação humana.


Exemplo YAML: ServiceAccount e RBAC

O Kubernetes permite utilizar ServiceAccounts junto com RBAC para conceder apenas as permissões necessárias ao workload, seguindo o princípio do menor privilégio.

Uma configuração inicial poderia ser:

apiVersion: v1
kind: Namespace
metadata:
  name: incident-system

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: incident-agent
  namespace: incident-system
automountServiceAccountToken: true

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: incident-agent
  namespace: production
rules:
  - apiGroups:
      - ""
    resources:
      - pods
      - pods/log
      - events
    verbs:
      - get
      - list
      - watch

  - apiGroups:
      - apps
    resources:
      - deployments
      - replicasets
    verbs:
      - get
      - list
      - watch
      - patch

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: incident-agent
  namespace: production
subjects:
  - kind: ServiceAccount
    name: incident-agent
    namespace: incident-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: incident-agent

O que essa configuração faz

O ServiceAccount:

incident-agent

é utilizado pelo agente.

O Role permite consultar:

pods
logs
events
deployments
replicasets

O verbo:

patch

permite alterar determinados objetos, sendo necessário, por exemplo, para mecanismos de restart baseados em atualização do template do Deployment.

Cuidados

Evite:

resources:
  - "*"

verbs:
  - "*"

principalmente em produção.

Também evite conceder ClusterRole se o agente precisar atuar somente em namespaces específicos.


Deployment do agente

apiVersion: apps/v1
kind: Deployment
metadata:
  name: incident-agent
  namespace: incident-system
spec:
  replicas: 2

  selector:
    matchLabels:
      app: incident-agent

  template:
    metadata:
      labels:
        app: incident-agent

    spec:
      serviceAccountName: incident-agent

      containers:
        - name: agent
          image: registry.example.com/platform/incident-agent:1.4.2

          ports:
            - name: http
              containerPort: 8080

          env:
            - name: ENVIRONMENT
              value: production

            - name: PROMETHEUS_URL
              value: http://prometheus.monitoring.svc:9090

            - name: LOKI_URL
              value: http://loki.monitoring.svc:3100

            - name: AUTO_REMEDIATION
              value: "true"

            - name: MAX_SCALE_FACTOR
              value: "2"

          resources:
            requests:
              cpu: 250m
              memory: 512Mi

            limits:
              cpu: "1"
              memory: 1Gi

          readinessProbe:
            httpGet:
              path: /health/ready
              port: http
            initialDelaySeconds: 5
            periodSeconds: 10

          livenessProbe:
            httpGet:
              path: /health/live
              port: http
            initialDelaySeconds: 15
            periodSeconds: 20

---
apiVersion: v1
kind: Service
metadata:
  name: incident-agent
  namespace: incident-system
spec:
  selector:
    app: incident-agent

  ports:
    - port: 80
      targetPort: http

Esse Deployment executa duas réplicas do agente para evitar que a própria ferramenta de resposta a incidentes dependa de um único pod.

Os valores de CPU e memória são apenas uma referência inicial. Eles devem ser ajustados por métricas reais.

Também é importante evitar armazenar API keys diretamente em variáveis declaradas no Deployment.

Utilize Secrets ou um mecanismo externo de gestão de segredos.


Recebendo alertas do Alertmanager

Uma configuração simplificada do Alertmanager poderia encaminhar alertas críticos:

route:
  receiver: default

  routes:
    - receiver: incident-agent
      matchers:
        - severity="critical"

receivers:
  - name: default

  - name: incident-agent
    webhook_configs:
      - url: http://incident-agent.incident-system.svc/incidents
        send_resolved: true

Nesse modelo:

Prometheus
   ↓
Alertmanager
   ↓
Webhook
   ↓
Incident Agent

O agente recebe labels como:

alertname
service
namespace
severity
cluster
environment

Quanto melhores forem os labels dos alertas, melhor será a automação.

Um alerta apenas com:

something-is-broken

é pouco útil.

Um alerta contendo:

service=payment-api
namespace=production
cluster=eks-prod
team=payments
severity=critical
runbook=payment-error-rate

permite automação muito mais precisa.


Motor de decisão

O agente não deveria enviar simplesmente:

"Tem um alerta. O que faço?"

ao modelo.

Primeiro deve construir um contexto estruturado.

Por exemplo:

{
  "incident": {
    "alert": "HighErrorRate",
    "service": "checkout-api",
    "namespace": "production"
  },
  "metrics": {
    "error_rate": 18.4,
    "latency_p95_ms": 4800,
    "cpu_percent": 42,
    "memory_percent": 53
  },
  "kubernetes": {
    "desired_replicas": 5,
    "available_replicas": 2,
    "crashloop_pods": 3
  },
  "logs": ["connection pool exhausted", "database timeout"],
  "recent_changes": [
    {
      "type": "deployment",
      "minutes_ago": 7,
      "revision": "4fd92ab"
    }
  ]
}

A IA recebe dados normalizados em vez de milhares de linhas de logs.

Isso reduz:

  • consumo de tokens;
  • latência;
  • custo;
  • ruído;
  • probabilidade de interpretação incorreta.

Separando diagnóstico de execução

Uma decisão importante de arquitetura é separar:

Reasoning Engine

de:

Execution Engine

O primeiro pode sugerir:

{
  "diagnosis": "database_connection_exhaustion",
  "confidence": 0.94,
  "action": "rollback",
  "target_revision": "previous"
}

O executor valida:

A ação existe?

O serviço permite rollback automático?

O ambiente permite?

A mudança está dentro da janela permitida?

Existe incidente em andamento?

Já houve tentativa?

O rollback está dentro do limite configurado?

Somente então a operação é executada.


Autonomia por níveis

Nem todo incidente deve receber o mesmo nível de autonomia.

Uma arquitetura madura pode adotar:

NívelComportamento
0IA apenas resume o incidente
1IA investiga e sugere ações
2IA executa ações após aprovação
3IA executa runbooks seguros automaticamente
4IA executa múltiplas ações e valida resultado

O caminho mais seguro é evoluir gradualmente.

Não comece pelo nível máximo.


Segurança

A segurança provavelmente é o aspecto mais importante dessa arquitetura.

RBAC

O agente deve possuir apenas os recursos necessários.

O Kubernetes permite restringir as permissões do ServiceAccount através de RBAC.

Nunca utilize:

cluster-admin

como atalho para facilitar a implementação.


IAM

Caso o agente precise consultar AWS:

CloudWatch
EC2
RDS
EKS
SQS
SNS

utilize identidade associada ao workload.

No EKS, EKS Pod Identity permite associar uma IAM Role a um ServiceAccount, evitando distribuir credenciais AWS estáticas dentro dos containers.

Por exemplo, o agente pode ter:

cloudwatch:GetMetricData
cloudwatch:GetMetricStatistics
logs:StartQuery
logs:GetQueryResults

mas não:

ec2:TerminateInstances
rds:DeleteDBInstance
iam:*

NetworkPolicy

NetworkPolicies permitem controlar comunicação de Pods em nível de IP e porta, desde que o plugin de rede utilizado pelo cluster implemente sua aplicação.

Um agente não precisa necessariamente conseguir acessar todos os workloads diretamente.

Exemplo:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: incident-agent
  namespace: incident-system
spec:
  podSelector:
    matchLabels:
      app: incident-agent

  policyTypes:
    - Ingress
    - Egress

  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: monitoring

      ports:
        - protocol: TCP
          port: 8080

  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: monitoring

    - to:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: kube-system

Esse exemplo deve ser adaptado à topologia do cluster, ao DNS utilizado e aos endpoints externos necessários.

NetworkPolicy não deve ser copiada diretamente sem validar o comportamento do CNI e as dependências reais do agente.


Observabilidade do próprio agente

Criar um sistema automático de resposta a incidentes sem observar o próprio sistema seria um erro.

O agente deve produzir métricas como:

incident_agent_incidents_total

incident_agent_investigation_duration_seconds

incident_agent_actions_total

incident_agent_actions_failed_total

incident_agent_auto_remediation_total

incident_agent_escalations_total

incident_agent_llm_requests_total

incident_agent_llm_tokens_total

Também é interessante acompanhar:

MTTA antes/depois

MTTR antes/depois

percentual de incidentes diagnosticados

percentual de remediações automáticas

taxa de remediações revertidas

taxa de falsos diagnósticos

Logs

Cada decisão precisa deixar uma trilha auditável.

Por exemplo:

{
  "incident_id": "inc-8472",
  "service": "checkout-api",
  "action": "restart_deployment",
  "reason": "pods_unhealthy_after_dependency_recovery",
  "approved": true,
  "automatic": true,
  "timestamp": "2026-09-26T15:10:32Z"
}

Essa estrutura pode ser enviada ao Loki.


Traces

OpenTelemetry pode ser utilizado para acompanhar o fluxo completo:

Alert received
      ↓
Collect Kubernetes data
      ↓
Collect Prometheus metrics
      ↓
Collect Loki logs
      ↓
Call LLM
      ↓
Policy validation
      ↓
Execute remediation
      ↓
Validate service

Isso é especialmente importante para descobrir por que o próprio sistema de automação demorou ou falhou durante um incidente.


Exemplo realista: Worker travado

Imagine workers consumindo mensagens do RabbitMQ:

RabbitMQ
   ↓
payment-worker
   ↓
PostgreSQL

O Prometheus identifica:

queue_messages_ready > 100000

O agente consulta:

réplicas atuais: 4
CPU: 82%
consumer throughput: 400 msg/s
incoming rate: 900 msg/s

O runbook permite aumentar o número de réplicas até 12.

A IA recomenda:

4 → 8 replicas

O Policy Engine verifica:

maxReplicas = 12

e autoriza.

Depois de cinco minutos:

incoming rate: 900 msg/s
consumer throughput: 1100 msg/s
queue depth: diminuindo

A remediação é considerada bem-sucedida.

Posteriormente, o agente pode devolver o workload ao estado original quando a fila normalizar, ou essa responsabilidade pode ficar com mecanismos como HPA ou KEDA.

Nesse caso, inclusive, a correção estrutural provavelmente seria utilizar autoscaling orientado pela profundidade da fila em vez de depender permanentemente do agente.

Essa distinção é importante:

IA não deve substituir automações determinísticas que já resolvem melhor o problema.


Desenvolvimento x produção

Em desenvolvimento, pode ser aceitável permitir:

reinício automático;
scale automático;
testes de rollback;
simulação de runbooks;
maior verbosidade de logs.

Em produção, são necessários controles adicionais:

RBAC mínimo;
IAM mínimo;
auditoria;
rate limiting;
timeouts;
circuit breakers;
aprovação para ações críticas;
limites de execução;
proteção contra loops;
controle de concorrência;
rollback do próprio runbook.

Também deve existir um kill switch.

Por exemplo:

AUTO_REMEDIATION=false

permitindo transformar imediatamente o sistema em somente leitura.


Troubleshooting

Agente não consegue listar pods

Teste:

kubectl auth can-i list pods \
  -n production \
  --as=system:serviceaccount:incident-system:incident-agent

Se retornar:

no

verifique Role e RoleBinding.


Verificando o agente

kubectl get pods -n incident-system

Depois:

kubectl describe pod \
  -n incident-system \
  -l app=incident-agent

Logs

kubectl logs \
  -n incident-system \
  -l app=incident-agent \
  --tail=200

Eventos

kubectl get events \
  -n incident-system \
  --sort-by=.metadata.creationTimestamp

Verificando permissões

kubectl auth can-i patch deployments \
  -n production \
  --as=system:serviceaccount:incident-system:incident-agent

Webhook não chega

Verifique o Service:

kubectl get svc -n incident-system

Depois:

kubectl get endpoints \
  -n incident-system \
  incident-agent

Verifique também:

NetworkPolicy
DNS
Service selector
containerPort
targetPort
readinessProbe

Boas práticas

Uma implementação madura deve seguir alguns princípios.

  1. Automatize primeiro os incidentes repetitivos. CrashLoopBackOff conhecido, pods unhealthy, workers travados, filas acumuladas e falhas temporárias conhecidas são melhores candidatos do que incidentes inéditos.
  1. Comece com IA somente para investigação. Compare os diagnósticos produzidos pela IA com os diagnósticos dos engenheiros antes de habilitar remediação.
  1. Use ferramentas tipadas. Prefira restartDeployment() a executeShell().
  1. Implemente limites. Um agente jamais deveria escalar 5 pods para 500 simplesmente porque interpretou uma métrica incorretamente.
  1. Controle repetição. Por exemplo:
máximo de 1 restart por deployment em 15 minutos.
  1. Implemente idempotência. Receber duas vezes o mesmo alerta não pode gerar duas remediações concorrentes.
  1. Preserve evidências. Colete logs e informações relevantes antes de reiniciar um workload.
  1. Meça resultados. Redução real de MTTR é mais importante do que quantidade de incidentes manipulados pela IA.

O que evitar

Dar cluster-admin ao agente

É a forma mais rápida de criar uma solução funcional e uma das piores decisões para produção.


Permitir shell arbitrário

Uma ferramenta:

execute_command(command)

transforma praticamente qualquer falha de interpretação em uma ação potencialmente perigosa.

Prefira operações específicas e previamente validadas.


Enviar todos os logs ao LLM

Além de caro, isso aumenta ruído.

Faça primeiro:

filtragem
 ↓
agregação
 ↓
extração de eventos relevantes
 ↓
LLM

Executar ações apenas pela "confiança" do modelo

Não utilize algo como:

confidence > 90%
→ executar qualquer ação

Confiança do modelo não substitui controles determinísticos.


Criar loops de remediação

Imagine:

Pod falha
↓
agente reinicia
↓
Pod falha
↓
agente reinicia
↓
Pod falha
↓
agente reinicia

Isso pode esconder a causa raiz.

Defina limites:

maxAttempts = 2
cooldown = 15m

Depois disso:

escalateToHuman()

Custos e FinOps

O custo de um agente inclui diferentes componentes:

CPU/memória do próprio workload
armazenamento de logs
consultas de métricas
consultas de logs
traces
chamadas ao modelo
tokens
APIs externas

O erro mais comum é enviar grandes volumes de telemetria diretamente para o modelo.

Por exemplo:

50.000 linhas de Loki
→ LLM

Normalmente é melhor fazer:

50.000 linhas
 ↓
query específica
 ↓
agrupamento
 ↓
50 eventos relevantes
 ↓
LLM

Isso pode reduzir significativamente tokens, latência e custos.


IA não substitui autoscaling

Existe uma distinção importante.

Se o problema for:

CPU > 80%

a solução provavelmente é HPA.

Se for:

fila RabbitMQ crescendo

KEDA pode ser mais apropriado.

Se for:

cluster sem capacidade

Karpenter pode resolver.

O agente deve entrar principalmente quando o problema exige correlação de múltiplas evidências ou escolha entre diferentes runbooks.

Uma plataforma madura tende a seguir:

Automação determinística
        ↓
Autoscaling
        ↓
Self-healing
        ↓
Runbooks
        ↓
Agente de IA
        ↓
Humano

e não:

Qualquer problema
      ↓
LLM

Quando utilizar

Essa abordagem faz sentido principalmente em ambientes com:

muitos microsserviços;
Kubernetes;
grande volume de alertas;
plantão/on-call;
runbooks já conhecidos;
problemas recorrentes;
stack madura de observabilidade;
SRE ou Platform Engineering;
alta exigência de disponibilidade.

Ela é particularmente interessante quando grande parte do MTTR ocorre na coleta e correlação manual de informações.


Quando não utilizar

Uma solução de IA pode ser desnecessária quando:

existem poucos serviços;
há poucos incidentes;
o ambiente é simples;
não existem runbooks;
a observabilidade ainda é deficiente;
as falhas podem ser corrigidas com scripts simples.

Se um CronJob de 30 linhas resolve o problema com comportamento previsível, adicionar um agente de IA provavelmente aumenta complexidade sem entregar valor proporcional.


Evolução recomendada

Uma evolução segura seria:

Fase 1
Alertas
   ↓
IA gera resumo

Fase 2
Alertas
   ↓
IA coleta métricas/logs
   ↓
IA sugere diagnóstico

Fase 3
IA sugere runbook
   ↓
Humano aprova

Fase 4
IA executa automaticamente
runbooks de baixo risco

Fase 5
IA investiga
   ↓
executa
   ↓
valida
   ↓
reverte se necessário

Essa progressão permite construir confiança operacional baseada em resultados reais.


Resumo prático

O verdadeiro valor de um agente de IA para incidentes não está em permitir que um modelo execute comandos livremente.

Está em combinar:

Observabilidade
+
Contexto
+
Runbooks
+
Automação
+
IA
+
Políticas
+
Auditoria

para transformar um processo como:

alerta
→ engenheiro acorda
→ abre Grafana
→ procura serviço
→ abre Kubernetes
→ consulta pods
→ lê logs
→ verifica Git
→ encontra causa
→ executa correção
→ monitora recuperação

em:

alerta
↓
coleta automática
↓
correlação
↓
diagnóstico
↓
policy
↓
runbook
↓
remediação
↓
validação

mantendo o engenheiro no circuito apenas quando necessário.


Conclusão

Reduzir MTTR não significa simplesmente responder mais rápido aos alertas.

Significa diminuir o número de decisões manuais necessárias entre a detecção de uma falha e a recuperação do serviço.

Agentes de IA podem desempenhar um papel importante nesse processo porque conseguem correlacionar informações provenientes de Kubernetes, Prometheus, Loki, OpenTelemetry, Git, CI/CD, bancos de dados e provedores de cloud dentro de um único fluxo de investigação.

Porém, a arquitetura mais segura não é aquela em que a IA recebe acesso irrestrito à infraestrutura.

O modelo mais robusto é:

Observabilidade
      ↓
Incident Controller
      ↓
Context Builder
      ↓
AI Reasoning
      ↓
Policy Engine
      ↓
Runbook Executor
      ↓
Infraestrutura
      ↓
Validation Engine

Nesse desenho, a IA ajuda a decidir; políticas determinísticas definem o que é permitido; executores controlados realizam as mudanças; e a observabilidade confirma se a intervenção funcionou.

Essa abordagem também altera o papel de SRE e Platform Engineering. Em vez de executar continuamente os mesmos procedimentos manuais, os times passam a transformar conhecimento operacional em runbooks automatizados, políticas e mecanismos de recuperação.

O resultado mais interessante não é simplesmente um "bot que resolve alertas".

É a criação de uma camada de self-healing orientada por contexto, capaz de automatizar incidentes conhecidos, acelerar a investigação dos desconhecidos e manter controles claros de segurança e governança.

Quando combinada com autoscaling, observabilidade, Infrastructure as Code, GitOps, políticas de segurança e engenharia de confiabilidade, essa arquitetura pode transformar a resposta a incidentes de um processo predominantemente reativo para um sistema progressivamente automatizado — reduzindo MTTR sem transformar autonomia em ausência de controle.

Quer aplicar isso no seu ambiente?

Agende uma conversa de 30 minutos sem compromisso. Eu olho o seu cenário e digo por onde começar.

Agendar uma conversa

Receba os novos artigos por e-mail

Um e-mail quando sair artigo novo sobre infraestrutura, backend e IA. Sem spam, cancele quando quiser.