O passo a passo assume um operator instalado pelo chart Helm em
chatcli-system, uma Instance pronta com o watcher habilitado (o pipeline AIOps fala com a primeira Instance pronta do cluster, então rode uma por cluster), uma ApprovalPolicy que exige aprovação para esta mudança e uma NotificationPolicy que encaminha o Issue para o Slack. Anomalies, Issues, AIInsights, RemediationPlans, ApprovalRequests e PostMortems são criados no namespace do workload (production aqui), não no namespace do operator.Anatomia de um Incidente
Cenário: OOMKill em Produção
1. Detecção Automática
O Watcher detecta que pods dopayment-service estão sendo OOMKilled:
2. Issue Criado
O CorrelationEngine agrupa em um Issue as anomalias não correlacionadas do mesmo recurso nos últimos 10 minutos. O risk score é a soma dos pesos dos sinais (oom_kill 40 + memory_high 15 = 55), e um Issue aberto por uma anomalia oom_kill é sempre critical:
Ver detalhes do Issue
Ver detalhes do Issue
INC-YYYYMMDD-NNN é um label (uma sequência por namespace e por dia); o nome do Issue é <recurso>-<sinal>-<unix time>.3. Notificação Enviada
O NotificationReconciler compara o Issue com as suas NotificationPolicies e o envia aos canais delas (Slack, PagerDuty, Opsgenie, email, webhook ou Teams). Canais, roteamento, throttling e escalação estão em Notificações. Sem NotificationPolicy, nada é enviado.4. IA Analisa o Problema
auto-oom-kill-critical-deployment-<hash>), a menos que já exista um Runbook correspondente, e cria o RemediationPlan payment-service-oom-kill-1773933601-plan-1.
5. Aprovação Necessária
Antes de executar, o RemediationReconciler consulta as ApprovalPolicies. Aqui uma política exige aprovação para mudanças de recursos em produção, então o plano espera emWaitingApproval:
Mesmo sem ApprovalPolicy casando, o plano ainda pode ficar retido: pelo tier do cluster (quando
CHATCLI_OPERATOR_CLUSTER_NAME aponta para um ClusterRegistration cujo tier exige aprovação) ou pelo decision engine opt-in, que nunca executa sozinho um Issue critical. Essas solicitações usam as políticas sintéticas cluster-tier e decision-engine: um aprovador, timeout de 30 minutos.aprovador:motivo. O operator acrescenta a decisão em status.decisions e remove a annotation; uma regra de quorum precisa de uma annotation por aprovador até atingir requiredApprovers. Use platform.chatcli.io/reject para rejeitar.
Opção B — Aprovar via Web Dashboard:
Faça port-forward do Service do operator (kubectl -n chatcli-system port-forward svc/chatcli-operator 8090:8090), abra http://localhost:8090, informe uma API key com papel operator, vá em Approvals, digite seu nome e clique em Approve.
Opção C — Aprovar via REST API:
As três opções registram uma decisão em
status.decisions; o operator então aplica a regra (quorum, change window) e leva a solicitação a Approved ou Rejected. O dashboard e a REST gravam o aprovador como <nome> (api-key: <identidade>) e contam cada API key uma vez no quorum, então cada aprovador precisa da própria chave. Uma solicitação que não está mais pendente, ou que a mesma chave já decidiu, responde 409.6. Remediação Executada
Após a aprovação, o RemediationReconciler executa:- Captura um
ResourceSnapshotestruturado (replicas, imagens, requests+limits de CPU/memória, HPA min/max) - Cria um
ActionCheckpointantes de cada ação - Aplica
AdjustResources(memória 512Mi → 1Gi) - Verifica a saúde do deployment por até 90s
- Saudável (
readyReplicas >= desired) → Completed
7. Issue Resolvido
- A NotificationPolicy envia a resolução para o Slack
- O Pattern Store (ConfigMap
chatcli-pattern-storeemproduction) registra um sucesso paraoom_kill + Deployment + critical - As entradas de dedup do watcher para o recurso são limpas, e novas anomalias no mesmo recurso ficam suprimidas durante o cooldown de resolução (10 minutos por padrão, Instance
spec.aiops.resolutionCooldownMinutes;0desliga)
8. PostMortem Automático
Todo plano concluído gera um PostMortem chamadopm-<issue>:
Ver PostMortem completo
Ver PostMortem completo
detected (a descrição do Issue), tem um evento por ação do plano, action_executed quando deu certo e action_failed quando falhou (em planos agênticos, o passo cuja observação falhou) e termina com resolved (o resultado do plano).9. Revisão e Fechamento
Os dois endpoints exigem o papeloperator; o corpo (reviewer, notes) é opcional. Informe o namespace: sem ?namespace=, esses endpoints de PostMortem procuram em default.
Contained, PostMortem com requiresHumanAction: true), reconheça primeiro a ação pendente com POST /api/v1/postmortems/{name}/ack-human-action: um PostMortem fechado sem esse reconhecimento volta para Open.