Arquitetura
- Single-Target (legado)
- Multi-Target (atual)
ResourceWatcher possui seus próprios collectors (incluindo PrometheusCollector opcional) e todos compartilham um único clientset Kubernetes, minimizando conexões.
Modos de Uso
- Deployment Unico (legado)
- Multiplos Deployments (YAML)
- Servidor com Watcher
Arquivo de Configuração Multi-Target
Campos do Target
| Campo | Descrição | Obrigatório |
|---|---|---|
deployment | Nome do deployment | Sim |
namespace | Namespace (padrão: default) | Nao |
metricsPort | Porta do endpoint Prometheus (0 = desabilitado) | Nao |
metricsPath | Path HTTP das métricas (padrão: /metrics) | Nao |
metricsFilter | Filtros glob para métricas (vazio = todas) | Nao |
Flags Completas
chatcli watch
| Flag | Descrição | Padrão | Env Var |
|---|---|---|---|
--config | Arquivo YAML multi-target | ||
--deployment | Deployment único (legado) | CHATCLI_WATCH_DEPLOYMENT | |
--namespace | Namespace do deployment | default | CHATCLI_WATCH_NAMESPACE |
--interval | Intervalo entre coletas | 30s | CHATCLI_WATCH_INTERVAL |
--window | Janela temporal de dados | 2h | CHATCLI_WATCH_WINDOW |
--max-log-lines | Linhas de log por pod | 100 | CHATCLI_WATCH_MAX_LOG_LINES |
--kubeconfig | Caminho do kubeconfig | Auto-detectado | CHATCLI_KUBECONFIG |
--provider | Provedor de LLM | .env | LLM_PROVIDER |
--model | Modelo de LLM | .env | |
-p <prompt> | One-shot: envia e sai | ||
--max-tokens | Limite de tokens na resposta |
chatcli server (flags do watcher)
| Flag | Descrição | Padrão | Env Var |
|---|---|---|---|
--watch-config | Arquivo YAML multi-target | CHATCLI_WATCH_CONFIG | |
--watch-deployment | Deployment único (legado) | CHATCLI_WATCH_DEPLOYMENT | |
--watch-namespace | Namespace | default | CHATCLI_WATCH_NAMESPACE |
--watch-interval | Intervalo de coleta | 30s | CHATCLI_WATCH_INTERVAL |
--watch-window | Janela de observação | 2h | CHATCLI_WATCH_WINDOW |
--watch-max-log-lines | Max linhas de log | 100 | CHATCLI_WATCH_MAX_LOG_LINES |
--watch-kubeconfig | Caminho do kubeconfig | Auto-detectado | CHATCLI_KUBECONFIG |
O que e Coletado
Collectors por Target
| Collector | Dados Coletados |
|---|---|
| Deployment | Replicas (ready/available/updated), strategy, conditions |
| Pod Status | Fase, readiness, restarts, termination info, container status |
| Events | Eventos K8s (Warning/Normal), mensagem, razao, timestamp |
| Logs | Ultimas N linhas por container por pod |
| Metrics | CPU e memória por pod (via metrics-server) |
| HPA | Min/max replicas, métricas atuais, replicas desejadas |
| Prometheus | Métricas de aplicação do endpoint /metrics dos pods |
Prometheus Collector (Novo)
OPrometheusCollector scrapa métricas Prometheus diretamente dos pods:
- Descobre pods do deployment e seleciona 1 pod Ready
- Faz HTTP GET em
http://podIP:port/path(timeout: 5s) - Parseia o formato Prometheus text exposition (stdlib, sem dependencias)
- Filtra por glob patterns configurados
- Ignora NaN, Inf e linhas de comentario
Gestão de Budget de Contexto (MultiSummarizer)
Com múltiplos targets, o MultiSummarizer garante que o contexto não estoure a janela do LLM:Algoritmo
Pontua cada target
0 = healthy, 1 = warning, 2 = critical- Critical: CrashLoopBackOff, OOMKilled, alerts criticos
- Warning: replicas < desired, error logs, alerts warning
- Healthy: tudo ok
Aloca contexto
- Score >= 1 — contexto completo (~1-3 KB por target)
- Score == 0 — one-liner compacto (~80 chars por target)
Exemplo com 20 Targets (2 com problemas)
Detecção de Anomalias
| Anomalia | Condição | Severidade |
|---|---|---|
| CrashLoopBackOff | Pod com mais de 5 restarts | Critical |
| OOMKilled | Container terminado por falta de memória | Critical |
| PodNotReady | Pod não está no estado Ready | Warning |
| DeploymentFailing | Deployment com Available=False | Critical |
Observability Store
Os dados coletados sao armazenados em um ring buffer por target com janela temporal configuravel:- Snapshots: Estado completo periodico (pods, deployment, HPA, events, metrics, app metrics)
- Logs: Logs recentes de cada pod com classificação (info/warning/error)
- Alertas: Anomalias detectadas com severidade e timestamps
Rotação Automática
Dados mais antigos que a janela temporal (--window) sao automaticamente descartados, mantendo o uso de memória constante independente do número de targets.
Comando /watch
Dentro do ChatCLI interativo (local ou remoto), use /watch para ver o estado:
- Single-Target
- Multi-Target
One-Shot com Contexto K8s
Exemplos de Perguntas
Requisitos
- Kubernetes Cluster: Acesso via kubeconfig ou in-cluster config
- Permissões RBAC: Leitura de pods, eventos, logs, deployments, HPA, ingresses
- metrics-server (opcional): Para coleta de CPU/memória
- Prometheus endpoints (opcional): Apps que expoe
/metricsno formato Prometheus text
RBAC
- Single-namespace (Role + RoleBinding)
- Multi-namespace (ClusterRole + ClusterRoleBinding)
Integração com AIOps
Os alertas do K8s Watcher alimentam automaticamente o pipeline AIOps do Operator. Quando o Operator detecta alertas viaGetAlerts RPC, ele cria Anomaly CRs que são correlacionados em Issues, analisados por IA e remediados automaticamente.