Visão 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 é essencial para operadores que precisam intervir quando a remediação automática falha.Estados do Incidente
Fluxo da Máquina de Estados
Fase de Detecção (Detected)
Quando o watcher bridge detecta anomalias, o correlation engine as agrupa em incidentes:
- Pontuação de sinal — cada tipo de sinal tem um peso (OOMKill=40, ErrorRate=30, PodRestart=25, etc.)
- Cálculo do risk score — agregado de todas as anomalias correlacionadas
- Determinação da severidade — Critical (risk > 80), High (> 60), Medium (> 40), Low (demais)
- Geração do ID do incidente — formato:
INC-AAAAMMDD-NNN - Máximo de tentativas de remediação configurado para 5 (padrão, configurável via Instance
aiops.maxRemediationAttempts)
Fase de Análise (Analyzing)
O sistema cria um AIInsight CR para análise via IA. Durante a detecção, TODOS os runbooks candidatos são injetados no contexto da IA para validação.
- 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 rápido)RUNBOOK_REJECTED→ ignora todos os candidatos, usa sugestões 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
Fase de Remediação (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á saudável (após 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
- Verificação final de saude (polling por até 90 segundos)
- Em caso de sucesso →
Resolved+ PostMortem gerado - Em caso de falha → rollback automático tentado → re-análise com contexto da falha
AdjustResources seguido de RollbackDeployment que desfaria o ajuste) e reduz o impacto operacional ao mínimo necessário.
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 atingeEscalated, o sistema esgotou todas as opções automáticas. 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
-
Reconhecer o incidente (para a progressão da escalação):
- Investigar e corrigir o problema manualmente
-
Resolver o incidente via um dos tres metodos:
Método 1: REST API (recomendado para automacao/scripts)
Método 2: Web Dashboard Navegue até a página de detalhes do incidente e clique no botão “Resolve”. Insira a descrição da resolução no diálogo. Método 3: Kubernetes Direto (avancado)
Auto-Resolve para Issues Escalados
Quando um incidente atingeEscalated, 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 correção enquanto o incidente ainda está aberto
spec.aiops.enableAutoResolve: false
Parâmetros AIOps Configuraveis
Todos os parâmetros de timing e retry são configuraveis via a seçãoaiops do Instance CRD:
Estados do Plano de Remediação
Cada incidente pode ter múltiplos planos de remediação (um por tentativa):Modo de Remediação Agentico
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
- Max steps: 10 (configurável via
AgenticMaxSteps) - Max tempo: 10 minutos por plano agentico
- Detecção 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 Confiança do Decision Engine
O decision engine determina se a remediação pode prosseguir automaticamente:
Ajustes: Taxa de sucesso histórico, correspondência de padrão, hora do dia e contagem de issues ativas modificam o score base de confiança.
Circuit breaker: Se 3+ remediações falharam na última hora, a auto-remediação é bloqueada inteiramente.
Rollback Engine
O rollback engine fornece redes de segurança em dois níveis:- Snapshot pré-voo — capturado antes de QUALQUER ação. Restaura o estado completo do recurso.
- Checkpoints por acao — capturados antes de CADA acao. Permite rollback parcial.
- Execução da ação falha
- Verificação de saude expira (90 segundos)
- 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)
Tipos de Ação de Remediação
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
Node Failure — Fluxo de Remediação
Quando um node apresenta problemas, o watcher detecta a condição e emite anomalias automaticamente:CordonNode e DrainNode respeitam PodDisruptionBudgets e fazem eviction graceful. O contexto de node (CPU, memória, pod count, condições) e incluido na análise da IA, permitindo decisões mais precisas.
A plataforma constrói uma biblioteca de estratégias aprendidas ao longo do tempo. Cada remediação bem-sucedida gera um runbook reutilizável 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:Seleção Multi-Runbook
Quando múltiplos runbooks correspondem ao mesmo trigger (sinal + severidade + tipo), a IA recebe TODOS os candidatos e seleciona o mais apropriado: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
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).
Geração de PostMortem
Quando um incidente e resolvido (automaticamente ou manualmente), um PostMortem CR e auto-gerado contendo:- Timeline — eventos cronológicos da detecção a resolução
- Análise de causa raiz — gerada por IA com score de confiança
- Ações executadas — histórico completo de remediação
- Avaliação de impacto — pods, serviços e SLOs afetados
- Lições aprendidas — recomendações da IA para prevenção
- Correlação com Git — deploys recentes que podem ter causado o problema
- Análise de cascata — incidentes relacionados entre servicos
PostMortems com requiresHumanAction
Quando o Issue pai está em estado Contained, tanto o Issue quanto o PostMortem são gerados com os fields tipados em status (GAP-07 fix):
- O
PostMortemReconcilerse recusa a transitar paraClosedenquanto a anotaçãoaiops.chatcli.io/human-action-acknowledgednão fortrue(mesmo se alguém forçarkubectl patch) - Quando o auto-resolve dispara (humano restaura replicas), o controller limpa os dois fields e adiciona condition
RequiresHumanAction: False— o CR nunca mente sobre o estado atual - A REST API expõe os fields como top-level no
IncidentItem(spec.requiresHumanAction,spec.requiredAction) para dashboards renderizarem direto sem precisar fetch do PostMortem matching
Migração de schema (v1alpha1) — Na 1.122.x os fields viviam em
PostMortemSpec, violando a convenção K8s (Spec = user input, Status = controller-derived facts). Pior: o valor era null em runtime porque o controller escrevia via Status().Update() enquanto o CRD declarava em Spec. O fix moveu para PostMortemStatus e adicionou em IssueStatus. O hook de upgrade de CRD (GAP-06) atualiza o schema automaticamente — não há ação manual necessária.requiresHumanAction=true.
Correlação com Chaos Engineering
Issues que disparam durante umaChaosExperiment ativa no mesmo namespace recebem automaticamente os labels:
platform.chatcli.io/source=chaos-experimentplatform.chatcli.io/chaos-experiment=<nome-do-experimento>
Veja Chaos Engineering para detalhes da CR e do controller.
Integração com SLA
Cada severidade de incidente pode ter uma configuração de SLA:- Tempo de resposta — tempo máximo da detecção até a primeira análise
- Tempo de resolução — tempo máximo da detecção até a resolução
- Horario comercial — opcionalmente pausar o relogio do SLA fora do horario comercial
- Política de escalação — disparada automaticamente na violação do SLA