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
- Recurso Único
- Múltiplos Recursos (YAML)
- Servidor com Watcher
Arquivo de Configuração Multi-Target
Campos do Target
| Campo | Descrição | Obrigatório |
|---|---|---|
deployment | Nome do recurso a monitorar | Sim |
kind | Tipo do recurso: Deployment, StatefulSet, DaemonSet, Job, CronJob (padrão: Deployment) | Não |
namespace | Namespace (padrão: default) | Não |
metricsPort | Porta do endpoint Prometheus (0 = desabilitado) | Não |
metricsPath | Path HTTP das métricas (padrão: /metrics) | Não |
metricsFilter | Filtros glob para métricas (vazio = todas) | Não |
Flags Completas
chatcli watch
| Flag | Descrição | Padrão | Env Var |
|---|---|---|---|
--config | Arquivo YAML multi-target | ||
--deployment | Nome do recurso a monitorar | CHATCLI_WATCH_DEPLOYMENT | |
--kind | Tipo do recurso: Deployment, StatefulSet, DaemonSet, Job, CronJob | Deployment | |
--namespace | Namespace do recurso | 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 |
| Node Health | Condições do node (Ready, DiskPressure, MemoryPressure, PIDPressure, NetworkUnavailable), cordoned, CPU/mem usage, pod count vs capacity, versão kubelet |
Node Health Collector
ONodeCollector monitora automaticamente a saude dos nodes onde os pods do target estão rodando:
- Descobre nodes — via label selector dos pods do target, identifica em quais nodes eles estão schedulados
- Coleta condições — todas as 5 condições oficiais do Kubernetes (
Ready,DiskPressure,MemoryPressure,PIDPressure,NetworkUnavailable) - Coleta métricas — CPU e memória do node via metrics-server (quando disponível)
- Pod capacity — conta pods ativos vs capacidade máxima do node
- Cordoned — detecta nodes marcados como
unschedulable
| Condição | Severidade | Exemplo de mensagem |
|---|---|---|
| NotReady | CRITICAL | Node worker-1 is NotReady |
| DiskPressure | CRITICAL | Node worker-1 has DiskPressure |
| MemoryPressure | CRITICAL | Node worker-1 has MemoryPressure |
| PIDPressure | WARNING | Node worker-1 has PIDPressure |
| NetworkUnavailable | CRITICAL | Node worker-1 has NetworkUnavailable |
| Cordoned | WARNING | Node worker-1 is cordoned (unschedulable) |
| Pod capacity >90% | WARNING | Node worker-1 pod capacity at 95/110 (>90%) |
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 dependências)
- 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 são armazenados em um ring buffer por target com janela temporal configurável:- 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) são 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 (ClusterRoleBinding + ClusterRole compartilhada)
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.
A partir da v2 da plataforma AIOps, os alertas do Watcher também alimentam:
- NotificationPolicy para roteamento automático para Slack, PagerDuty, OpsGenie, Email, Webhook e Teams
- ApprovalPolicy para gate de aprovação antes de remediações em produção
- ServiceLevelObjective para cálculo de burn rate e error budget
- NoiseReducer para supressão de alertas repetitivos, sazonais e flapping
Próximo Passo
Modo Servidor
Configurar o servidor com watcher
K8s Operator
K8s Operator (AIOps)
AIOps Platform
AIOps Platform (deep-dive)
Deploy no Kubernetes
Deploy no Kubernetes