Incidents
Detecção, ack, snooze, timeline, remediação e resolução
Runbooks
CRUD completo de runbooks
Analytics
MTTD, MTTR, trends, top resources, capacity, compliance, custo
SLOs
Targets, error budget e burn rate
Federation
Status multi-cluster, correlações entre clusters
Health
Endpoints de liveness e readiness
Base URL
/) escuta no pod do operator, porta 8090, exposta como porta api do Service chatcli-operator no namespace do operator (chatcli-system por padrão). Ela não é servida pelo Service de uma Instance (esse é o servidor gRPC na 50051).
A porta vem do value
api.port do chart (padrão 8090), que define a variável de ambiente CHATCLI_AIOPS_PORT do operator. Para servir HTTPS (TLS 1.3 no mínimo), defina CHATCLI_AIOPS_TLS_CERT e CHATCLI_AIOPS_TLS_KEY com arquivos de certificado e chave dentro do container do operator (chart: security.apiTLS.certFile / security.apiTLS.keyFile). O chart do operator não tem value extraVolumes, então os arquivos precisam chegar por outro meio (por exemplo, um patch no Deployment); a alternativa é terminar o TLS em um Ingress ou gateway na frente do Service. Sem as duas variáveis, a API é HTTP puro.Várias réplicas do operator. Toda réplica serve a API REST e o dashboard na 8090, então um Service com várias réplicas pode mandar a requisição para qualquer pod. Leituras são respondidas por qualquer réplica; um resolve manual aceito por uma réplica que não é a líder é concluído pelo reconciler de Issue da líder.
Fluxo de requisição
Autenticação
Toda requisição em/api/ precisa do header X-API-Key com uma chave válida:
Roles
As roles seguem a ordemviewer < operator < admin; cada endpoint exige uma role mínima (veja a tabela de endpoints). Essas três strings são as únicas roles válidas: uma chave com qualquer outra role (por exemplo superadmin ou readonly) é aceita como chave, mas recebe 403 em todos os endpoints.
viewer
Somente leitura. Todos os endpoints GET. Ideal para dashboards e ferramentas de observabilidade.
operator
Operação diária. Tudo o que
viewer faz, mais as ações POST (acknowledge, snooze, resolve, approve, reject, review/close/feedback de postmortem) e criar/atualizar runbooks.admin
Acesso total. Tudo o que
operator faz, mais DELETE /runbooks/{name}.Configurando as API keys
As chaves são lidas do namespace do operator (chatcli-system por padrão), nesta ordem:
- Secret
chatcli-operator-secrets, chaveapi-keys(recomendado) - ConfigMap
chatcli-operator-config, chaveapi-keys(fallback, usado só quando o Secret não existe)
{key, role, name, description}. O name é opcional: é a identidade registrada nas decisões de aprovação tomadas com a chave (na falta dele vale o description, e depois uma impressão digital key-<hash>), e um quorum conta cada chave uma vez, então dê a cada aprovador a sua própria chave. O chart do operator só gera o Secret com apiKeys.create: true (as chaves ficam então guardadas no release do Helm); fora isso, é você quem cria:
Rate limiting
A API aceita 30 requisições por minuto por host de cliente para requisições sem API key válida (token bucket, rajadas de até 30, reposto continuamente a 0,5 req/s), e 600 requisições por minuto por API key válida (rajadas de até 600, repostas a 10 req/s), com a chave identificada por um digest. O limite roda antes da autenticação; o limite por chave é o mesmo para todas as roles. Headers de forwarding não são honrados, então atrás de um proxy todo chamador sem chave divide o bucket do host do proxy. Buckets ociosos são descartados depois de 10 minutos. Ao estourar, o operator retorna429 Too Many Requests com o envelope de erro padrão (rate limit exceeded: N requests per minute) e um header Retry-After com os segundos até o bucket voltar a ter um token (2 no limite por host, 1 no limite por chave). Nenhum header X-RateLimit-* é enviado. Implemente backoff nos clientes de produção e mantenha dashboards ou coletores que consultam muitos endpoints dentro do orçamento.
CORS
Requisições cross-origin de navegador são negadas por padrão: nenhum header CORS é enviado até uma origem ser configurada. Configure com variáveis de ambiente no operator (ou os values equivalentes do chart emsecurity.*):
Os headers de requisição permitidos são
Content-Type, X-API-Key e Authorization; a resposta de preflight fica em cache por 1 hora. O dashboard servido pelo próprio operator é same-origin e não precisa de configuração de CORS.
Formato de resposta
Todas as respostas seguem um padrão Kubernetes-like:- Lista
- Recurso único
- Erro
Códigos de erro
Paginação
Os endpoints de lista suportam paginação via query parameters:integer
padrão:"1"
Número da página (começa em 1)
integer
padrão:"20"
Itens por página (valores acima de 100 são limitados a 100)
metadata.totalCount para você calcular o total de páginas. Valores inválidos voltam aos padrões.
A maioria das listas aceita namespace (omitido = todos os namespaces). Incidents, postmortems, eventos de auditoria e os endpoints de analytics também aceitam os filtros de tempo from / to (RFC 3339, por exemplo 2026-03-19T00:00:00Z), aplicados ao horário de criação do recurso (o horário do evento, na auditoria). Datas que não fazem parse são ignoradas.
Endpoints
Todos os paths são relativos a/api/v1.
/healthz e /readyz (fora de /api/v1) não exigem chave — veja Health endpoints.
Versionamento
A API usa versionamento por path (/api/v1/). Hoje só existe a v1.
Próximos passos
Visão geral do AIOps Platform
Como a plataforma detecta, analisa e remedia incidentes
Kubernetes Operator
Deploy do operator, CRDs e configuração
Ciclo de vida do incidente
Fluxo completo: detecção → análise → remediação → resolução
AIOps em produção
Cookbook: setup completo com TLS, RBAC, notificações e SLOs