Visao Geral
A plataforma AIOps do ChatCLI gerencia incidentes através de uma máquina de estados bem definida com 6 estados para incidentes e 6 estados para planos de remediação. Entender este ciclo de vida e essencial para operadores que precisam intervir quando a remediação automática falha.
Estados do Incidente
| Estado | Descrição | Terminal? |
|---|
Detected | Anomalia correlacionada em um incidente, aguardando análise | Não |
Analyzing | IA realizando análise de causa raiz | Não |
Remediating | Plano de remediação em execução | Não |
Resolved | Incidente resolvido com sucesso | Sim |
Escalated | Todas as tentativas automaticas esgotadas — requer intervencao humana (auto-resolve se o recurso recuperar) | Semi-terminal |
Failed | Tentativa única falhou sem retry configurado | Sim |
Fluxo da Máquina de Estados
Detected → Analyzing → Remediating → Resolved
↓ ↓
Escalated Failed/RolledBack
(apos max ↓
tentativas) Re-analise (ate 5x)
↓
Escalated
↓
Auto-resolve se o recurso
recuperar (configuravel)
Fase de Deteccao (Detected)
Quando o watcher bridge detecta anomalias, o correlation engine as agrupa em incidentes:
- Pontuacao de sinal — cada tipo de sinal tem um peso (OOMKill=40, ErrorRate=30, PodRestart=25, etc.)
- Calculo do risk score — agregado de todas as anomalias correlacionadas
- Determinacao da severidade — Critical (risk > 80), High (> 60), Medium (> 40), Low (demais)
- Geracao do ID do incidente — formato:
INC-AAAAMMDD-NNN
- Maximo de tentativas de remediação configurado para 5 (padrão, configuravel via Instance
aiops.maxRemediationAttempts)
Fase de Análise (Analyzing)
O sistema cria um AIInsight CR para análise via IA. Durante a deteccao, TODOS os runbooks candidatos são injetados no contexto da IA para validacao.
- Descoberta de runbooks candidatos (em camadas):
- Camada 1: Todos os runbooks com SignalType + Severity + ResourceKind
- Camada 2: Fallback por Severity + ResourceKind
- Multiplos runbooks podem existir por trigger (causas raiz diferentes geram runbooks diferentes)
- IA válida candidatos: O LLM recebe todos os runbooks candidatos e avalia cada um contra a análise de causa raiz atual:
RUNBOOK_APPROVED: <nome> → usa aquele runbook específico (caminho rapido)
RUNBOOK_REJECTED → ignora todos os candidatos, usa sugestoes da IA ou modo agentico
- Nenhum dos dois → usa primeiro candidato como default (compatibilidade)
- Se não ha candidatos e a IA tem ações sugeridas → gera um novo runbook
- Se não ha candidatos e nem ações da IA → entra no Modo Agentico (IA passo-a-passo)
- Transiciona para
Remediating
O remediation controller executa o plano usando um loop ReAct (Reason-Act-Observe):
- Snapshot pre-voo capturado para capacidade de rollback
- Para cada acao no plano:
- OBSERVE — verifica se o recurso já está saudavel (apos a ação anterior). Se sim, para imediatamente sem executar as ações restantes (early exit)
- ACT — executa a ação com checkpoint
- Se a ação falha → rollback automático ao estado pre-voo
- Verificacao final de saude (polling por até 90 segundos)
- Em caso de sucesso →
Resolved + PostMortem gerado
- Em caso de falha → rollback automático tentado → re-analise com contexto da falha
Exemplo: plano com 3 ações (AdjustResources + DeletePod + RollbackDeployment)
Ação 1: AdjustResources → SUCCESS (memory 1Mi → 64Mi)
Ação 2: OBSERVE → recurso healthy (ReadyReplicas == Desired)
→ EARLY EXIT! Pula DeletePod e RollbackDeployment
→ Evidence: "Resource healthy after 1/3 actions — skipped remaining 2"
Isso evita que ações contraditórias sejam executadas (ex.: AdjustResources seguido de RollbackDeployment que desfaria o ajuste) e reduz o impacto operacional ao mínimo necessario.
Mecanismo de Retry
Quando a remediação falha:
- Tentativa < MaxAttempts (5): O sistema re-analisa com o contexto da falha injetado, potencialmente selecionando um runbook ou estratégia diferente
- Todas as tentativas esgotadas: Transiciona para
Escalated
Estado Escalated — O Que os Operadores Devem Fazer
Quando um incidente atinge Escalated, o sistema esgotou todas as opções automaticas. Veja o que acontece e o que você precisa fazer:
O que o sistema faz automaticamente:
- Dispara a EscalationPolicy correspondente a severidade do incidente
- Envia notificações para L1 on-call (Slack, PagerDuty, etc.)
- Se não houver reconhecimento dentro do timeout configurado, escala para L2, depois L3
- Gera eventos de auditoria para compliance
O que os operadores devem fazer:
-
Reconhecer o incidente (para a progressao da escalacao):
curl -X POST https://operator:8090/api/v1/incidents/INC-20260319-001/acknowledge \
-H "X-API-Key: $API_KEY" \
-d '{"acknowledgedBy": "seu-email@empresa.com"}'
-
Investigar e corrigir o problema manualmente
-
Resolver o incidente via um dos tres metodos:
Metodo 1: REST API (recomendado para automacao/scripts)
curl -X POST https://operator:8090/api/v1/incidents/INC-20260319-001/resolve \
-H "X-API-Key: $API_KEY" \
-d '{"resolution": "Corrigido memory leak no payment-service v2.4.1, hotfix implantado manualmente"}'
Metodo 2: Web Dashboard
Navegue até a pagina de detalhes do incidente e clique no botao “Resolve”. Insira a descrição da resolucao no dialogo.
Metodo 3: Kubernetes Direto (avancado)
kubectl patch issue INC-20260319-001 -n production --type=merge \
-p '{"status":{"state":"Resolved","resolution":"Correcao manual aplicada"}}'
Auto-Resolve para Issues Escalados
Quando um incidente atinge Escalated, o sistema continua monitorando o recurso a cada 30 segundos. Se o recurso recuperar (todas as replicas saudaveis), o incidente e automaticamente resolvido com a mensagem:
“Auto-resolved: resource recovered while awaiting human intervention”
Isso cobre os casos onde:
- Um operador corrige o problema manualmente (kubectl rollout undo, etc.) sem usar a API
- O recurso se auto-corrige (ex: problema de rede transitorio se resolve)
- Um pipeline de CI/CD implanta uma correcao enquanto o incidente ainda está aberto
O auto-resolve pode ser desabilitado via Instance CRD: spec.aiops.enableAutoResolve: false
Parâmetros AIOps Configuraveis
Todos os parâmetros de timing e retry são configuraveis via a seção aiops do Instance CRD:
apiVersion: platform.chatcli.io/v1alpha1
kind: Instance
metadata:
name: chatcli-prod
spec:
provider: OPENAI
model: gpt-5.4
aiops:
maxRemediationAttempts: 5 # padrão: 5, range: 1-10
resolutionCooldownMinutes: 10 # padrão: 10, range: 0-120
dedupTTLMinutes: 60 # padrão: 60, range: 5-1440
enableAutoResolve: true # padrão: true
| Parâmetro | Padrão | Descrição |
|---|
maxRemediationAttempts | 5 | Quantas vezes a IA pode tentar antes de escalar |
resolutionCooldownMinutes | 10 | Após resolver, quanto tempo suprimir novas anomalias para o mesmo recurso |
dedupTTLMinutes | 60 | Quanto tempo o cache de dedup do bridge mantem hashes de alertas |
enableAutoResolve | true | Auto-resolver issues Escalados quando o recurso recupera |
agenticMaxSteps | 10 | Steps maximos por tentativa em modo agentico (range: 3-30) |
Runbooks auto-gerados pela IA (tanto standard quanto agenticos) herdam automaticamente o valor de maxRemediationAttempts da configuração do Instance. Runbooks criados manualmente via YAML ou API usam o default do CRD (maxAttempts: 3) a menos que especificado explicitamente.
Cada incidente pode ter multiplos planos de remediação (um por tentativa):
| Estado | Descrição |
|---|
Pending | Validacao de segurança em andamento |
Executing | Ações sendo executadas sequencialmente |
Verifying | Verificacao de saude pos-acao (ate 90s) |
Completed | Todas as ações bem-sucedidas e saude verificada |
Failed | Ação falhou, rollback não possível |
RolledBack | Ação falhou, rollback ao estado pre-voo bem-sucedido |
Quando nenhum runbook corresponde, o sistema usa remediação agentica dirigida por IA:
- IA propoe uma acao via AgenticStep RPC
- Acao e executada e o resultado e observado
- IA analisa a observacao e propoe a proxima acao
- Loop continua até resolver ou detectar convergencia
Guardrails de seguranca:
- Max steps: 10 (configuravel via
AgenticMaxSteps)
- Max tempo: 10 minutos por plano agentico
- Deteccao de convergencia:
- Ultimas 3 observações identicas → parada forcada
- Padrão alternante A→B→A→B → parada forcada
- 5 ações consecutivas falharam → parada forcada
Limiares de Confianca do Decision Engine
O decision engine determina se a remediação pode prosseguir automaticamente:
| Severidade | Limiar de Auto-Aprovação | Ação |
|---|
| Low | Confianca ≥ 0.95 | Auto-execução |
| Medium | Confianca ≥ 0.85 | Auto-execução + notificação |
| High | Confianca ≥ 0.80 | Requer aprovação |
| Critical | Sempre | Aprovação manual obrigatoria |
Ajustes: Taxa de sucesso historico, correspondencia de padrão, hora do dia e contagem de issues ativas modificam o score base de confianca.
Circuit breaker: Se 3+ remediações falharam na ultima hora, a auto-remediação e bloqueada inteiramente.
Rollback Engine
O rollback engine fornece redes de segurança em dois níveis:
- Snapshot pre-voo — capturado antes de QUALQUER acao. Restaura o estado completo do recurso.
- Checkpoints por acao — capturados antes de CADA acao. Permite rollback parcial.
Gatilhos de rollback automatico:
- Execução da ação falha
- Verificacao de saude expira (90 segundos)
Alvos de rollback suportados:
- Deployment: replicas, imagens de container, limites de recursos
- StatefulSet: replicas, imagens, recursos, partition
- DaemonSet: imagens, recursos, max unavailable
- Job/CronJob: suspend, deadline, backoff limit, parallelism
- Node: uncordon (restaurar schedulable)
A plataforma suporta 46+ tipos de ação de remediação entre tipos de recurso:
Deployment (18 ações)
ScaleDeployment, RollbackDeployment, RestartDeployment, PatchConfig, AdjustResources, DeletePod, HelmRollback, ArgoSyncApp, AdjustHPA, RestartStatefulSetPod, CordonNode, DrainNode, ResizePVC, RotateSecret, ExecDiagnostic, UpdateIngress, PatchNetworkPolicy, ApplyManifest
StatefulSet (9 ações)
ScaleStatefulSet, RestartStatefulSet, RollbackStatefulSet, AdjustStatefulSetResources, DeleteStatefulSetPod, ForceDeleteStatefulSetPod, UpdateStatefulSetStrategy, RecreateStatefulSetPVC, PartitionStatefulSetUpdate
DaemonSet (7 ações)
RestartDaemonSet, RollbackDaemonSet, AdjustDaemonSetResources, DeleteDaemonSetPod, UpdateDaemonSetStrategy, PauseDaemonSetRollout, CordonAndDeleteDaemonSetPod
Job (9 ações)
RetryJob, AdjustJobResources, DeleteFailedJob, SuspendJob, ResumeJob, AdjustJobParallelism, AdjustJobDeadline, AdjustJobBackoffLimit, ForceDeleteJobPods
CronJob (10 ações)
SuspendCronJob, ResumeCronJob, TriggerCronJob, AdjustCronJobResources, AdjustCronJobSchedule, AdjustCronJobDeadline, AdjustCronJobHistory, AdjustCronJobConcurrency, DeleteCronJobActiveJobs, ReplaceCronJobTemplate
Sistema de Aprendizado de Runbooks
Quando um node apresenta problemas, o watcher detecta a condição e emite anomalias automaticamente:
Node MemoryPressure detectado
→ Anomaly CR criado (signal: memory_high, severity: critical)
→ Issue correlacionada com pods afetados
→ IA analisa: "Node worker-2 com MemoryPressure, pods do echo-app impactados"
→ Remediação: CordonNode (impede novos pods) + DrainNode (evacua pods existentes)
→ Kubernetes re-schedula pods em nodes saudáveis
→ Verificação: pods healthy em novos nodes → Resolved
As ações CordonNode e DrainNode respeitam PodDisruptionBudgets e fazem eviction graceful. O contexto de node (CPU, memoria, pod count, condições) e incluido na análise da IA, permitindo decisões mais precisas.
A plataforma constroi uma biblioteca de estrategias aprendidas ao longo do tempo. Cada remediação bem-sucedida gera um runbook reutilizavel que pode ser aplicado a incidentes futuros com a mesma causa raiz.
Como os Runbooks São Nomeados
Nomes de runbooks incluem um hash da análise de causa raiz da IA, garantindo que causas diferentes produzam runbooks diferentes:
auto-{sinal}-{severidade}-{tipo}-{hash}
Exemplos:
auto-oom-kill-critical-deployment-a3f2b1 (causa: tail /dev/zero)
auto-oom-kill-critical-deployment-c7d4e9 (causa: memory limit muito baixo)
auto-pod-not-ready-low-deployment-e8b3d2 (causa: imagem invalida)
Selecao Multi-Runbook
Quando multiplos runbooks correspondem ao mesmo trigger (sinal + severidade + tipo), a IA recebe TODOS os candidatos e seleciona o mais apropriado:
Novo incidente OOMKill em Deployment
↓
3 runbooks candidatos encontrados (causas raiz diferentes)
↓
Todos os 3 injetados no contexto da IA com seus steps e descricoes
↓
IA analisa a causa raiz atual e responde:
"RUNBOOK_APPROVED: auto-oom-kill-critical-deployment-c7d4e9"
(porque este incidente e causado por memory limits baixos, correspondendo ao runbook)
↓
Runbook selecionado executado → resolucao rapida sem loop agentico
Se nenhum dos candidatos corresponde a causa raiz atual, a IA responde com RUNBOOK_REJECTED, gera uma nova estratégia do zero, e um novo runbook e criado com hash único — expandindo a biblioteca para incidentes futuros.
Ciclo de Vida do Runbook
| Estagio | O que Acontece |
|---|
| Criado | Auto-gerado após remediação bem-sucedida pela IA |
| Encontrado | Descoberto por criterios de trigger (sinal + severidade + tipo) |
| Validado | IA avalia se o runbook se aplica a causa raiz atual |
| Executado | Steps executados sequencialmente com capacidade de rollback |
| Biblioteca cresce | Cada nova causa raiz adiciona um novo runbook a biblioteca |
Com o tempo, a plataforma se torna mais rapida e precisa — falhas comuns são resolvidas via runbooks (segundos) em vez de análise completa da IA (minutos).
Geracao de PostMortem
Quando um incidente e resolvido (automaticamente ou manualmente), um PostMortem CR e auto-gerado contendo:
- Timeline — eventos cronologicos da deteccao a resolucao
- Analise de causa raiz — gerada por IA com score de confianca
- Ações executadas — histórico completo de remediação
- Avaliacao de impacto — pods, servicos e SLOs afetados
- Licoes aprendidas — recomendações da IA para prevencao
- Correlacao com Git — deploys recentes que podem ter causado o problema
- Analise de cascata — incidentes relacionados entre servicos
PostMortems podem ser revisados e fechados via os endpoints Review PostMortem e Close PostMortem.
Cada severidade de incidente pode ter uma configuração de SLA:
- Tempo de resposta — tempo máximo da deteccao até a primeira analise
- Tempo de resolucao — tempo máximo da deteccao até a resolucao
- Horario comercial — opcionalmente pausar o relogio do SLA fora do horario comercial
- Politica de escalacao — disparada automaticamente na violacao do SLA