Visão Geral do Pipeline
Componentes da Plataforma v2
A plataforma AIOps foi expandida com componentes enterprise-grade:Notificações e Escalação
SLOs e SLAs
Workflow de Aprovação
Motor de Decisão com IA
Federação Multi-Cluster
Chaos Engineering
Auditoria e Compliance
Capacity e Custos
REST API e Dashboard
A plataforma expõe uma API REST completa na porta:8090 com 30+ endpoints cobrindo incidents, SLOs, approvals, analytics, clusters e audit. Um Web Dashboard embutido está disponível em http://operator:8090/.
Para referência completa da API, consulte a API Reference.
4 dashboards Grafana pré-configurados estão disponíveis em deploy/grafana/ para importação automática via sidecar.
Componentes Internos
1. WatcherBridge (watcher_bridge.go)
O WatcherBridge e o ponto de entrada do pipeline. Implementa a interface manager.Runnable do controller-runtime e roda como goroutine gerenciada pelo manager.
Responsabilidades:
- Sem componente temporal: Um problema contínuo (e.g. CrashLoopBackOff) gera apenas uma Anomaly
- TTL: 2 horas — hashes expirados são podados automaticamente
- Invalidação: Quando um Issue atinge estado terminal (Resolved/Escalated), as entradas de dedup para o recurso afetado são invalidadas, permitindo detecção imediata de recorrências
- Resultado: Evita duplicatas durante problema ativo; detecta recorrência após resolução
Lista Instance CRs no cluster
Seleciona o primeiro Instance com Status.Ready=true
Conecta via gRPC insecure (10s timeout)
Retry
2. AnomalyReconciler (anomaly_controller.go)
Observa Anomaly CRs e os correlaciona em Issues.
Fluxo:
Recebe Anomaly CR
Status.Correlated = false.Agrupa anomalias
CorrelationEngine.FindRelatedAnomalies() para agrupar.Calcula risk score e severidade
Cria ou atualiza Issue CR
Marca Anomaly como correlacionada
Correlated = true com referência ao Issue.3. CorrelationEngine (correlation.go)
Motor de correlação que agrupa anomalias em incidentes.
Algoritmo de Correlação:
oom_kill (30) + pod_restart (20) = risk 50 → Medium. Se adicionar error_rate (25) = risk 75 → High.
Mapeamento de Fonte:
4. IssueReconciler (issue_controller.go)
Gerencia o ciclo de vida completo de um Issue através de uma máquina de estados.
Estados e Transições:
handleDetected()
handleDetected()
- Define
detectedAtemaxRemediationAttempts(padrão: 5, configurável via Instanceaiops.maxRemediationAttempts) - Cria AIInsight CR com owner reference (Issue → AIInsight)
- Transiciona para
Analyzing - Requeue após 10 segundos
handleAnalyzing()
handleAnalyzing()
- Verifica se AIInsight tem
Analysispreenchida - Busca Runbook manual correspondente (
findMatchingRunbook— tiered matching) - Se encontrou Runbook manual →
createRemediationPlan()(manual tem precedência) - Se não encontrou Runbook manual mas AIInsight tem
SuggestedActions→generateRunbookFromAI()→createRemediationPlan()usando o Runbook auto-gerado - Se nenhum →
createAgenticRemediationPlan()(AgenticMode=true, sem ações pré-definidas — a IA decide cada passo) - Transiciona para
Remediating
findMatchingRunbook() -- Matching em camadas
findMatchingRunbook() -- Matching em camadas
- Tier 1: SignalType + Severity + ResourceKind (match exato, preferido)
- Tier 2: Severity + ResourceKind (fallback quando signal não bate)
SignalTyperesolvido de:issue.Spec.SignalType→ fallbackissue.Labels["platform.chatcli.io/signal"]
generateRunbookFromAI()
generateRunbookFromAI()
- Materializa
SuggestedActionsdo AI como Runbook CR reutilizável - Nome:
auto-{signal}-{severity}-{kind}(sanitizado) - Labels:
platform.chatcli.io/auto-generated=true - Trigger: SignalType + Severity + ResourceKind (para reutilização futura)
- Usa
CreateOrUpdatepara idempotência
handleRemediating()
handleRemediating()
- Busca RemediationPlan mais recente (
findLatestRemediationPlan) - Se
Completed→ IssueResolved+ invalida dedup do recurso- Se plano agêntico: gera PostMortem CR (timeline, causa raiz, impacto, lições) + Runbook reutilizável dos passos bem-sucedidos
- Se
Failede tentativas restantes → re-análise: coleta evidência de falha (collectFailureEvidence), limpa análise do AIInsight, volta para estadoAnalyzingcom failure context - Se
Failede max tentativas →Escalated+ invalida dedup do recurso
- Cada retry dispara re-análise do AI com contexto de falhas anteriores
- O AI recebe
previous_failure_contextcom evidência das tentativas que falharam - O prompt instrui: “Não repita as mesmas ações. Análise por que falharam e sugira uma abordagem fundamentalmente diferente”
- Gera novo Runbook auto-gerado com estratégia diferente (nome inclui attempt)
5. AIInsightReconciler (aiinsight_controller.go)
Observa AIInsight CRs e chama o AnalyzeIssue RPC para preencher a análise.
Fluxo:
Verifica análise existente
Status.Analysis já está preenchida (skip se sim).Verifica conectividade
Busca contexto
Coleta contexto K8s
KubernetesContextBuilder (deployment, pods, eventos, revisões).Lê failure context
platform.chatcli.io/failure-context (se re-análise).Monta request
AnalyzeIssueRequest com dados do Issue + contexto K8s + failure context.Chama AnalyzeIssue RPC
AnalyzeIssue RPC via ServerClient.Preenche status
Status.Analysis, Confidence, Recommendations, SuggestedActions. Limpa annotation failure-context após re-análise concluída.k8s_context.go):
Coleta contexto real do cluster para Deployments, StatefulSets, DaemonSets, Jobs, CronJobs e HPAs (max 12000 chars):
- Resource Status: replicas, conditions, containers, images + resources (cada tipo tem context builder dedicado)
- StatefulSet: replicas, update strategy, partition, PodManagementPolicy, VolumeClaimTemplates
- DaemonSet: desired/current/ready/available/unavailable, nodeSelector, tolerations
- Job/CronJob: active/succeeded/failed, completions, parallelism, schedule, lastSuccessful
- HPA: min/max replicas, current/desired, target utilization, current metrics, maxed-out detection
- Pod Details (até 5 pods, unhealthy primeiro): phase, restart count, container states
- Recent Events (últimos 15): tipo, reason, message, count
- Revision History: Últimas 5 revisões (ReplicaSets) com diff de imagens
log_analyzer.go):
Análise avançada de logs de aplicação (além do tail básico de 50 linhas):
- Stack Trace Extraction: detecta e extrai stack traces de Java (Exception/Caused by), Go (panic/goroutine), Python (Traceback), Node.js (Error at)
- Error Pattern Detection: 24+ padrões críticos categorizados (crash, connectivity, dns, auth, storage, tls, database, cache, messaging)
- Structured Log Parsing: extrai error/warn entries de logs JSON (campos level, msg, error, timestamp, logger)
- Init Container Logs: analisa logs de init containers (revela falhas de startup)
- Sidecar Logs: analisa logs de sidecars (istio-proxy, envoy, datadog-agent, etc.)
- Critical Lines: extrai linhas FATAL/PANIC com 3 linhas de contexto antes/depois
- Temporal Window: busca logs por janela temporal (10min antes do incidente), não apenas tail
metrics_collector.go):
Queries ao Prometheus para dados quantitativos durante análise:
- CPU/Memory: usage trends 30min antes → durante → 15min depois do incidente
- Request/Error Rate: HTTP requests e 5xx por segundo
- Latency: P50, P95, P99 histogram percentiles
- HPA Metrics: current vs desired replicas, CPU target
- Network: receive/transmit bytes/s
- Trend Analysis: detecta spikes, drops, sustained_high/low com cálculo de % de mudança
- Habilitado via:
PROMETHEUS_URLenv var no operator
gitops_detector.go):
Detecta e integra com ferramentas GitOps:
- Helm Releases: detecta via Secrets type
helm.sh/release.v1, status (deployed/failed/pending-upgrade), chart version, revisão anterior para rollback - ArgoCD Applications: sync status (Synced/OutOfSync), health (Healthy/Degraded), conditions, last sync result
- Flux Kustomizations: ready status, source ref, conditions, last applied
source_controller.go):
Diagnóstico code-aware quando SourceRepository CRD está configurado:
- Git Correlation: encontra commits nos 30min antes do incidente
- Suspected Commit: identifica o commit mais provável (score por proximidade temporal + volume de mudanças)
- Code Extraction: extrai trechos de código referenciados em stack traces (file path + line number → código fonte)
- Config Analysis: lê Dockerfile, values.yaml, Chart.yaml para contexto de deploy
cascade_analyzer.go):
Análise de cascade failures cross-service:
- Dependency Graph: descobre dependências via Services + EndpointSlices
- Temporal Correlation: encontra issues ativos no mesmo namespace e cross-namespace em janela de 15-20min
- Cascade Chain: ordena serviços por tempo de detecção (primeiro = root cause)
- Root Cause Service: identifica o serviço origem do cascade
blast_radius.go):
Predição de impacto antes da execução de ações:
- PDB Check: verifica se a ação violaria PodDisruptionBudgets
- Quota Check: verifica ResourceQuotas (>90% usado = warning)
- Node Capacity: conta pods no node para ações de cordon/drain
- Affected Services: descobre quais Services seriam impactados
- Risk Level: classifica como low/medium/high/critical
6. RemediationReconciler (remediation_controller.go)
Executa as ações definidas em um RemediationPlan.
Ações Suportadas (54 tipos em 9 categorias):
Deployment / Genérico (19 ações):
7. ServerClient (grpc_client.go)
Cliente gRPC compartilhado entre WatcherBridge e AIInsightReconciler.
Interação Server e Operator
GetAlerts RPC
O servidor expoe os alertas do K8s Watcher via gRPC:ObservabilityStore de cada target do MultiWatcher, filtra por namespace se específicado, e retorna alertas ativos.
AnalyzeIssue RPC
O servidor recebe o contexto do Issue e chama o LLM para análise:- Contexto do Issue (nome, namespace, recurso, severidade, risk score, descrição)
- Lista de 19 ações disponíveis organizadas por categoria (Workload, GitOps, Autoscaling, Infra, Storage, Security, Networking, Advanced)
- Instruções para retornar JSON estruturado com campos
analysis,confidence,recommendationseactions
- Remove markdown codeblocks (
```json ... ```) - Parseia JSON em
analysisResult - Clamp confidence entre 0.0 e 1.0
- Se parsing falhar → usa resposta raw como analysis com confidence 0.5
AgenticStep RPC
O servidor recebe o contexto do Issue, histórico de passos anteriores e contexto K8s atualizado, e decide a próxima ação:- Role + Issue details: contexto do incidente (tipo, severidade, recurso)
- Kubernetes context: estado real do cluster (refreshado a cada step via KubernetesContextBuilder)
- Tool definitions: 18 ações mutantes disponíveis + “Observe” (sem ação, espera próximo contexto)
- Conversation history: cada step anterior formatado com reasoning → action → observation
- Instructions: respond JSON, budget (step N of M), regras de segurança
resolved=true, a resposta inclui dados para geração do PostMortem (summary, root_cause, impact, lessons_learned, prevention_actions).
PostMortem Generation
Quando qualquer remediação resolve um Issue (standard ou agêntica), oIssueReconciler gera automaticamente:
PostMortem CR
Criado viageneratePostMortem():
- Trending: detecção de incidentes recorrentes (contagem nos últimos 30 dias, PostMortems relacionados)
- Cascade Chain: cadeia de cascade failure se houver issues correlacionados cross-service
- Git Correlation: commit suspeito (SHA, autor, arquivos alterados, confiança)
- GitOps Context: estado do Helm/ArgoCD/Flux no momento do incidente
Runbook Auto-gerado (Agentic)
Criado viagenerateAgenticRunbook():
- Nome:
agentic-{signal}-{severity}-{kind}(sanitizado) - Steps: apenas os passos com ação bem-sucedida
- Labels:
auto-generated=true,source=agentic - Usa
CreateOrUpdate(reutilizado para incidentes futuros do mesmo tipo)
Prometheus Metrics do Operator
O operator expoe métricas Prometheus para observabilidade:Testes
O operator possui 130 testes (185 com subtests) cobrindo todos os componentes:Executar Testes
Diagrama de Ownership (Garbage Collection)
- Instance e owner de todos os recursos Kubernetes que cria (Deployment, Service, ConfigMap, SA, PVC)
- Issue e owner de AIInsight, RemediationPlan e PostMortem (cascade delete)
- Anomalies são independentes (não tem owner) para preservar histórico
Checklist de Implantação AIOps
Instalar Operator via Helm (CRDs + RBAC + Deployment + Dashboard)
Criar Secret com API keys
Criar Instance CR
watcher.enabled: true e targets configurados.Verificar servidor
kubectl get instances — confirme que o servidor ChatCLI está rodando.Verificar pipeline AIOps
kubectl get anomalies -A— anomalias sendo detectadaskubectl get issues -A— issues sendo criadoskubectl get aiinsights -A— IA analisando
(Opcional) Criar Runbooks manuais
Monitorar métricas