Skip to main content
A Plataforma AIOps do ChatCLI é um sistema autônomo que detecta problemas no Kubernetes, analisa causas raiz com IA e executa remediações automáticas — tudo orquestrado por CRDs nativos do Kubernetes. Esta página cobre a arquitetura interna em profundidade. Para configuração e exemplos de uso, veja K8s Operator.

Componentes da Plataforma v2

Notificações

NotificationPolicy e EscalationPolicy

SLO e SLA

ServiceLevelObjective e IncidentSLA

Aprovações

ApprovalPolicy e ApprovalRequest

Multi-Cluster

ClusterRegistration e federação

Auditoria

AuditEvent (trilha imutável)

Chaos Engineering

ChaosExperiment com safety checks

Motor de Decisão

Gate de confiança e circuit breaker, opt-in

Capacity e Custos

Previsão de capacidade, redução de ruído, custo de LLM por incidente

Web Dashboard

UI embutida na porta 8090 do operator

REST API e Dashboard

O operator expõe uma API REST HTTP na porta 8090 (valor api.port do chart, env CHATCLI_AIOPS_PORT), acessada pelo Service chatcli-operator no namespace do operator (não pelo Service da Instance). São mais de 40 endpoints cobrindo incidents, AI insights, remediações, runbooks, aprovações, SLOs, post-mortems, analytics (incluindo custo de LLM), clusters, federação, políticas e auditoria. Um Web Dashboard embutido é servido em / na mesma porta.
  • Autenticação: header X-API-Key. As chaves vêm do Secret chatcli-operator-secrets, chave api-keys (fallback: ConfigMap chatcli-operator-config), no namespace do operator, como uma lista YAML de {key, role, description}. Os papéis são viewer < operator < admin; qualquer outro valor de role é negado. Alterações são aplicadas em cerca de 30 segundos; uma entrada api-keys que não é YAML válido mantém em vigor o último conjunto de chaves válido, e um Secret sem a entrada cai para o ConfigMap. Crie-o você mesmo, ou deixe o chart do operator renderizá-lo (apiKeys.create: true com apiKeys.entries). Sem chaves configuradas, toda chamada em /api/ retorna 401, a menos que CHATCLI_OPERATOR_DEV_MODE=true (admin sem chave, só para desenvolvimento).
  • Rate limit: 30 requisições por minuto por host de cliente sem API key válida, 600 por minuto por chave válida (429 com Retry-After).
  • CORS: deny-all, a menos que CHATCLI_CORS_ALLOWED_ORIGINS / CHATCLI_CORS_ORIGIN estejam definidos. TLS: defina CHATCLI_AIOPS_TLS_CERT e CHATCLI_AIOPS_TLS_KEY para servir HTTPS (TLS 1.3).
  • Preview local: make dash-preview em operator/ serve o dashboard com dados sintéticos, sem cluster, em http://127.0.0.1:8085 com a API key preview.
Toda réplica do operator serve a API REST e o dashboard na 8090, então replicaCount > 1 funciona atrás do Service sem fixar as requisições na líder.
Para referência completa da API, consulte a API Reference. Quatro dashboards Grafana (JSON) estão em deploy/grafana/. O dashboards-configmap.yaml de lá traz só os dois ServiceMonitors (operator e servidor, este selecionando app.kubernetes.io/name: chatcli), não os dashboards: crie o ConfigMap nomeando cada arquivo JSON (veja Web Dashboard) ou importe os JSONs manualmente.

Visão Geral do Pipeline

Componentes Internos

1. WatcherBridge (watcher_bridge.go)

O WatcherBridge é o ponto de entrada do pipeline. Implementa a interface manager.Runnable do controller-runtime e roda como goroutine gerenciada pelo manager. Responsabilidades: Dedup por SHA256:
  • Sem componente temporal: Um problema contínuo (e.g. CrashLoopBackOff) gera apenas uma Anomaly
  • UID do recurso: um workload apagado e recriado ganha outro UID, então seus alertas não são engolidos pela entrada antiga
  • TTL: 30 minutos por padrão (Instance spec.aiops.dedupTTLMinutes, 5–1440) — hashes expirados são podados automaticamente
  • Invalidação: Quando um Issue é resolvido, contido ou escalado, 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
Descoberta do Servidor:
1

Lista Instance CRs no cluster inteiro

2

Seleciona o primeiro Instance com Status.Ready=true

Só uma Instance por cluster conduz o AIOps: a bridge (e os reconcilers de AIInsight e Remediation, que compartilham o mesmo client) falam com a primeira Instance pronta que encontrar.
3

Conecta via gRPC com TLS 1.3

Alvo dns:///<nome>.<namespace>.svc.cluster.local:<porta>, com credencial e CA tirados do spec da Instance. O TLS é obrigatório: a Instance precisa de spec.server.tls.enabled: true e de um certificado válido para esse nome.
4

Retry

Se a conexão falha, tenta de novo no próximo ciclo de poll (30s). Depois de 3 tentativas de stream sem mensagens, a bridge derruba a conexão e redescobre a Instance.

2. AnomalyReconciler (anomaly_controller.go)

Observa Anomaly CRs e os correlaciona em Issues. Fluxo:
1

Recebe Anomaly CR

Anomaly recém-criado com Status.Correlated = false.
2

Anexa a um Issue ativo

Se já existe um Issue não terminal para o mesmo recurso (kind, nome, namespace), a Anomaly é anexada a ele; o risk score do Issue é recalculado a partir de todas as anomalias que o Issue tem na janela de correlação, incluindo a recém-anexada, e nunca diminui.
3

Verificações de supressão

Ignora a Anomaly quando o mesmo recurso foi resolvido dentro do cooldown de resolução (Instance spec.aiops.resolutionCooldownMinutes, padrão 10; 0 desliga o cooldown) ou quando o noise reducer a marca (repetitiva, flapping, sazonal).
4

Agrupa anomalias e calcula risk score e severidade

Chama CorrelationEngine.FindRelatedAnomalies() para as anomalias não correlacionadas do mesmo recurso nos últimos 10 minutos.
5

Cria o Issue CR

Nome <recurso>-<sinal>-<unix time>, com os labels platform.chatcli.io/inc-id (INC-YYYYMMDD-NNN), platform.chatcli.io/resource e platform.chatcli.io/signal.
6

Marca Anomaly como correlacionada

Define Correlated = true com referência ao Issue.

3. CorrelationEngine (correlation.go)

Motor de correlação que agrupa anomalias em incidentes. Algoritmo de Correlação:
Risk Scoring (soma dos pesos, limitada a 100): Classificação de Severidade:
Exemplo: um Deployment com pod_restart (25) + memory_high (15) = risk 40 → Medium. Somando error_rate (30) = risk 70 → High. Um Issue aberto por uma anomalia oom_kill é Critical qualquer que seja o score. Mapeamento de Fonte: a source do Issue espelha a da Anomaly (watcher, prometheus, events, logs, webhook); uma source desconhecida vira prometheus.

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: Contained significa que o plano silenciou o workload (por exemplo ScaleDeployment para 0 com containment=true) sem corrigi-lo: o Issue carrega status.requiresHumanAction: true e status.requiredAction, e só vai para Resolved quando o workload é restaurado. Issues Escalated são reavaliados a cada 30 segundos e se auto-resolvem quando o recurso volta a ficar saudável, a menos que a Instance defina spec.aiops.enableAutoResolve: false. A checagem de saúde entende Deployments, StatefulSets, DaemonSets, Jobs (saudáveis quando Complete) e Nodes (saudáveis quando Ready); um Issue em qualquer outro kind não é auto-resolvido. Failed é terminal. As configurações de AIOps (spec.aiops) vêm da Instance que o WatcherBridge usa: o WatcherBridge marca cada Anomaly com platform.chatcli.io/instance e platform.chatcli.io/instance-namespace, o Issue herda esses labels e, sem eles, vale a primeira Instance pronta.
  1. Define detectedAt e maxRemediationAttempts (padrão: 5, configurável via Instance aiops.maxRemediationAttempts; lido da Instance que o WatcherBridge usa)
  2. Cria AIInsight CR <issue>-insight com owner reference (Issue → AIInsight), anotado com os Runbooks candidatos
  3. Transiciona para Analyzing
  4. Roda as verificações de federação (detecção de cascata, correlação cross-cluster), em best effort
  5. Requeue após 10 segundos
  1. Verifica se AIInsight tem Analysis preenchida
  2. Busca Runbook manual correspondente (findMatchingRunbook — tiered matching)
  3. Se encontrou Runbook manual → createRemediationPlan() (manual tem precedência)
  4. Se não encontrou Runbook manual mas AIInsight tem SuggestedActions → generateRunbookFromAI() → createRemediationPlan() usando o Runbook auto-gerado
  5. Se nenhum → createAgenticRemediationPlan() (AgenticMode=true, sem ações pré-definidas — a IA decide cada passo)
  6. Transiciona para Remediating
  • Tier 1: SignalType + Severity + ResourceKind (match exato, preferido)
  • Tier 2: Severity + ResourceKind (fallback quando signal não bate)
  • SignalType resolvido de: issue.Spec.SignalType → fallback issue.Labels["platform.chatcli.io/signal"]
  • Os Runbooks são buscados em todos os namespaces, não só no do Issue: primeiro o namespace do Issue, depois os demais, cada Runbook uma vez
  • Materializa SuggestedActions do AI como Runbook CR reutilizável
  • Nome: auto-{signal}-{severity}-{kind}-{hash} (sanitizado; hash = 6 primeiros caracteres hex do SHA256 da análise, então causas raiz diferentes geram Runbooks diferentes)
  • Labels: platform.chatcli.io/auto-generated=true
  • Trigger: SignalType + Severity + ResourceKind (para reutilização futura)
  • Usa CreateOrUpdate para idempotência
  1. Busca RemediationPlan mais recente (findLatestRemediationPlan)
  2. Se Completed → Issue Resolved (ou Contained quando o plano aplicou uma ação de contenção) + PostMortem CR (timeline, causa raiz, impacto, lições) + invalida dedup do recurso
    • Se plano agêntico: também gera um Runbook reutilizável dos passos bem-sucedidos
  3. Se Failed e tentativas restantes → re-análise: coleta evidência de falha (collectFailureEvidence), limpa análise do AIInsight, volta para estado Analyzing com failure context
  4. Se Failed e max tentativas → Escalated + invalida dedup do recurso
Retry com Escalação de Estratégia:
  • Cada retry dispara re-análise do AI com contexto de falhas anteriores
  • O AI recebe previous_failure_context com evidência das tentativas que falharam
  • O prompt instrui: “Não repita as mesmas ações. Analise por que falharam e sugira uma abordagem fundamentalmente diferente”
  • Gera um novo Runbook auto-gerado quando a nova análise é diferente (o nome carrega um hash da análise)
Prioridade de Remediação:

5. AIInsightReconciler (aiinsight_controller.go)

Observa AIInsight CRs e chama o AnalyzeIssue RPC para preencher a análise. Fluxo:
1

Verifica análise existente

Verifica se Status.Analysis já está preenchida (skip se sim).
2

Verifica conectividade

Verifica se servidor está conectado (requeue 15s se não).
3

Busca contexto

Busca Issue pai para contexto.
4

Coleta contexto K8s

Coleta contexto K8s via KubernetesContextBuilder (deployment, pods, eventos, revisões).
5

Lê failure context

Lê failure context de annotation platform.chatcli.io/failure-context (se re-análise).
6

Monta request

Monta AnalyzeIssueRequest com dados do Issue + contexto K8s + failure context.
7

Chama AnalyzeIssue RPC

Chama AnalyzeIssue RPC via ServerClient.
8

Preenche status

Preenche Status.Analysis, Confidence, Recommendations, SuggestedActions. Limpa annotation failure-context após re-análise concluída.
KubernetesContextBuilder (k8s_context.go): Coleta contexto real do cluster para Deployments, StatefulSets, DaemonSets, Jobs, CronJobs e HPAs (max 15000 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
LogAnalyzer (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
MetricsCollector (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_URL env var no operator
GitOpsDetector (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
SourceCodeAnalyzer (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
  • Credenciais: chaves do Secret token, username + password, ou ssh-key + known_hosts; as credenciais HTTPS passam por um helper GIT_ASKPASS e nunca são gravadas no .git/config; o SSH confere as chaves do host contra o known_hosts (spec.sshHostKeyPolicy: acceptNew confia na primeira chave quando o Secret não tem nenhuma). Veja Repositórios de código
CascadeAnalyzer (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
BlastRadiusPredictor (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
AnalyzeIssueRequest:

6. RemediationReconciler (remediation_controller.go)

Executa as ações definidas em um RemediationPlan. Ações Suportadas (54 tipos, mais Custom, que é sempre rejeitado): Deployment / Genérico (19 ações + Custom): StatefulSet (9 ações): DaemonSet (7 ações): Job (9 ações): CronJob (10 ações):
Safety Checks (pré-execução): Scale to 0 bloqueado (Deployment e StatefulSet), a menos que a ação traga containment=true, que marca um passo deliberado de contenção e leva o Issue para Contained. AdjustResources limit não pode ser menor que request (todos os tipos). DeletePod/DeleteStatefulSetPod recusa se só existe 1 pod. ForceDeleteStatefulSetPod exige nome explícito do pod. RecreateStatefulSetPVC exige confirm=true. Custom actions bloqueadas. Blast radius prediction verifica violações de PDB, resource quotas e serviços afetados — agora generalizado para todos os workload types via getPodTemplateLabels.Rollback Automático (pós-falha): Antes de qualquer ação, um ResourceSnapshot estruturado captura o estado completo do recurso. Para Deployments: réplicas, imagens, CPU/memória, HPA. Para StatefulSets: réplicas, containers, updateStrategy, partition. Para DaemonSets: containers, updateStrategy, maxUnavailable. Para Jobs: suspend, parallelism, backoffLimit, activeDeadlineSeconds, containers. Para CronJobs: suspend, schedule, concurrencyPolicy, limites de histórico, containers. Se uma ação falha ou a verificação de saúde expira (90s), o RollbackEngine restaura automaticamente o recurso ao estado pré-remediação. Funciona para Deployments, StatefulSets, DaemonSets, Jobs, CronJobs, Nodes e HPAs.
Fluxo de Execução (Standard):
Fluxo de Execução (Agentic):

7. ServerClient (grpc_client.go)

Cliente gRPC compartilhado entre o WatcherBridge, o AIInsightReconciler e o RemediationReconciler.

Interação Server e Operator

RPCs StreamAlerts e GetAlerts

O servidor empurra os alertas do K8s Watcher por StreamAlerts (streaming do servidor com heartbeats; veja Modo Servidor) e continua expondo-os para leituras pontuais via gRPC:
O handler no servidor itera sobre os ObservabilityStore de cada target do MultiWatcher, filtra por namespace se especificado, e retorna alertas ativos.

AnalyzeIssue RPC

O servidor recebe o contexto do Issue e chama o LLM para análise:
Prompt Estruturado: O servidor constrói um prompt que inclui:
  1. Contexto do Issue (nome, namespace, recurso, severidade, risk score, descrição)
  2. O catálogo de ações (os 54 tipos de ação, com parâmetros e regras por tipo de recurso)
  3. Instruções para retornar JSON estruturado com campos analysis, confidence, recommendations e actions
Parsing da Resposta:
  1. Remove markdown codeblocks (```json ... ```)
  2. Parseia JSON em analysisResult
  3. Clamp confidence entre 0.0 e 1.0
  4. 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:
Prompt do AgenticStep: O servidor constrói um prompt estruturado com:
  1. Role + Issue details: contexto do incidente (tipo, severidade, recurso)
  2. Kubernetes context: estado real do cluster (refreshado a cada step via KubernetesContextBuilder)
  3. Tool definitions: o catálogo de ações + “Observe” (sem ação, espera próximo contexto)
  4. Conversation history: cada step anterior formatado com reasoning → action → observation
  5. Instructions: respond JSON, budget (step N of M), regras de segurança
Quando resolved=true, a resposta inclui dados para geração do PostMortem (summary, root_cause, impact, lessons_learned, prevention_actions). Quando diverges_from_insight é true e divergence_reason está vazio, o operator registra o passo como rejeitado e não executa a ação proposta.

PostMortem Generation

Quando qualquer plano de remediação é concluído (standard ou agêntico, incluindo uma contenção que deixa o Issue Contained), o IssueReconciler gera automaticamente:

PostMortem CR

Criado via generatePostMortem(), com o nome pm-<issue> no namespace do Issue: Além dos campos acima, o PostMortem é enriquecido automaticamente com:
  • 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
O PostMortem CR é owned pelo Issue (cascade delete).

Runbook Auto-gerado (Agentic)

Criado via generateAgenticRunbook():
  • 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 expõe métricas Prometheus na porta de métricas (8080, HTTP sem TLS, path /metrics; serviceMonitor.enabled no chart cria um ServiceMonitor). As métricas do pipeline: Aprovações, SLA/SLO, notificações, escalação, federação e experimentos de chaos têm suas próprias métricas chatcli_operator_*, listadas nas respectivas páginas; o controller-runtime adiciona as métricas padrão de reconcile.

Testes

Os testes unitários do operator rodam sobre o client fake do controller-runtime e cobrem todos os componentes desta página:

Executar Testes

A suíte de integração (operator/integration) prova o que o client fake não consegue: schemas e campos obrigatórios dos CRDs, subresource de status, owner references e controllers reagindo às escritas uns dos outros. Os cenários são uma Instance provisionando seu workload só quando há credencial configurada, uma anomalia percorrendo Anomaly → Issue → AIInsight → RemediationPlan → Deployment escalado → plano concluído → Issue resolvido → PostMortem, uma ApprovalPolicy segurando o plano até um humano aprovar, e um IncidentSLA registrando uma violação de resolução. O CI roda a suíte com KUBEBUILDER_ASSETS exportado e a conta na cobertura.

Diagrama de Ownership (Garbage Collection)

  • Instance é owner dos recursos namespaced que cria (Deployment, Service, ConfigMaps, SA, PVC, Role/RoleBinding do watcher); um ClusterRoleBinding de watcher entre namespaces é removido pelo finalizer da Instance
  • Issue é owner de AIInsight, RemediationPlan e PostMortem (cascade delete)
  • Anomalies são independentes (não têm owner) para preservar histórico

Checklist de Implantação AIOps

1

Instalar Operator via Helm (CRDs + RBAC + Deployment + Dashboard)

2

Criar os Secrets de que a Instance precisa

  • as chaves do provedor LLM (por exemplo ANTHROPIC_API_KEY), referenciadas por spec.apiKeys.name
  • um token do servidor (ou material JWT): um servidor dentro do cluster escuta em 0.0.0.0 e se recusa a rodar sem credencial, e o operator não cria o Deployment sem ela (AuthenticationConfigured=False)
  • um Secret TLS (tls.crt, tls.key, opcionalmente ca.crt) válido para <instance>.<namespace>.svc.cluster.local: o operator sempre fala com o servidor via TLS 1.3
3

Criar Instance CR

Um target do watcher fora do namespace da Instance usa a ClusterRole pré-provisionada chatcli-watcher (criada pelo chart).Crie uma Instance para o AIOps por cluster: o pipeline se conecta à primeira Instance pronta que encontrar, no cluster inteiro.
4

Verificar servidor

kubectl get instances -A — READY precisa estar true; confira as conditions AuthenticationConfigured e ServerReachable com kubectl describe instance chatcli -n chatcli.
5

Verificar pipeline AIOps

  • kubectl get anomalies -A — anomalias sendo detectadas
  • kubectl get issues -A — issues sendo criados
  • kubectl get aiinsights -A — IA analisando
6

(Opcional) Habilitar o dashboard e a API REST

Crie o Secret chatcli-operator-secrets (chave api-keys) em chatcli-system, depois rode kubectl -n chatcli-system port-forward svc/chatcli-operator 8090:8090 e abra http://localhost:8090.
7

(Opcional) Criar Runbooks manuais

Crie Runbooks manuais para cenários específicos.
8

Monitorar métricas

Monitore métricas do operator via Prometheus (serviceMonitor.enabled=true no chart).

Próximo Passo

K8s Operator

Configuração e exemplos

K8s Watcher

Detalhes de coleta e budget

Modo Servidor

RPCs StreamAlerts, GetAlerts, AnalyzeIssue e AgenticStep

Monitoramento K8s

Receita: Monitoramento K8s com IA