Skip to main content
Este cookbook cobre a configuração completa da plataforma AIOps do ChatCLI para um ambiente de produção real — desde a instalação até a validação com chaos engineering.

Pré-requisitos

  • Cluster Kubernetes 1.25+
  • Helm 3.x instalado
  • Prometheus Operator (para ServiceMonitor)
  • Grafana (para dashboards)
  • Pelo menos uma API key de LLM (OpenAI, Claude, Google AI)

1. Instalar o Operator

1

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

2

Verificar CRDs instalados

Devem aparecer 17 CRDs:
3

Criar Secret com API Keys

2. Criar Instância ChatCLI

Para habilitar coleta de métricas Prometheus durante análise de incidentes, adicione a variável PROMETHEUS_URL ao ConfigMap ou passe via Helm:

Secret TLS: SANs e CA corretos

Este é o passo onde a maioria das instalações quebra silenciosamente. O Instance CR referencia secretName: chatcli-tls, mas o Secret precisa ser gerado com dois cuidados que o openssl req -x509 padrão não faz.

Gerar o cert com subjectAltName

Sem SANs cobrindo o nome DNS usado pelo operator para dialar o gRPC, o handshake falha com:
Use um openssl.cnf explícito:
Verifique com:

Incluir ca.crt no Secret

Cert self-signed é seu próprio CA. Se o Secret tiver apenas tls.crt e tls.key, o operator vai conectar mas cair em:
O WatcherBridge lê automaticamente a chave ca.crt do Secret referenciado pelo Instance e usa como trust root — por isso o Secret precisa ter as três chaves:
Com ca.crt dentro do Secret, não é necessário montar ConfigMap de CA nem definir SSL_CERT_FILE / CHATCLI_GRPC_TLS_CA no deployment do operator. Essa variável é um caminho alternativo para cenários multi-Instance com CA compartilhado e exige montagem manual (extraEnv + volume).

E se o cert for emitido por cert-manager ou ACM?

O §2.1 acima cobre o caso self-signed gerado na mão, que é o mais frágil. Com cert-manager ou AWS ACM o setup simplifica, mas cada emissor tem pegadinha própria: Notas importantes:
  • Cert publicamente confiável → trust já existe. O código do operator (grpc_client.go) só anexa RootCAs quando há CA customizado; sem ele, Go usa o bundle ca-certificates do container. Por isso Let’s Encrypt e ACM Public “funcionam sem fazer nada” no lado CA — mas o spec.server.address tem que ser o FQDN público, não o Service interno, ou o SAN não bate.
  • cert-manager com CA interno é o caminho mais limpo em K8s. O Certificate CR abaixo emite tudo pronto para o WatcherBridge auto-trust — zero openssl manual:
    Com Certificate.issuerRef.kind: CA, o cert-manager automaticamente inclui ca.crt no Secret gerado — o WatcherBridge lê direto, sem configuração extra.
  • ACM Public não serve para gRPC pod-a-pod. A chave privada não é exportável; use somente quando TLS termina no ALB/NLB e o operator dialar o endpoint público.
  • ACM Private CA — exporte o bundle da Private CA (aws acm-pca get-certificate-authority-certificate) e inclua como ca.crt no Secret. Dali em diante segue o caminho auto-trust.

2.2 Vincular Repositórios de Código (Opcional)

Vincule os repositórios de código das aplicações monitoradas para diagnóstico code-aware. A IA receberá contexto de commits recentes, trechos de código de stack traces e arquivos de configuração.

3. Configurar Notificações

4. Configurar Escalação

5. Definir SLOs

6. Definir SLAs

7. Configurar Aprovações

8. Instalar Grafana Dashboards

9. Validar com Chaos Engineering

Execute chaos experiments apenas em ambientes com redundância. Nunca em single-replica deployments.
1

Executar em DryRun

2

Verificar resultado

3

Executar de verdade (após validação)

Edite dryRun: false e reaplique.

10. Configurar API Keys do Dashboard

Sem este ConfigMap, a API REST roda em dev mode (sem autenticação). Sempre configure API keys antes de expor externamente.

11. Acessar o Dashboard

O dashboard web mostra:
  • Overview com stats em tempo real
  • Incidents com filtros e ações (acknowledge, snooze)
  • SLOs com error budget e burn rates
  • Approvals pendentes
  • PostMortems com timeline
  • Clusters federados
  • Audit log pesquisável

11.1 Expor o Dashboard via Ingress (alternativa ao port-forward)

Para expor o dashboard fora do cluster, crie um Ingress apontando para o Service do operator. Quando monta-se sob sub-path, o rewrite-target com grupo de captura é obrigatório — os assets estáticos do dashboard são servidos de / e retornariam 404 sem isso:

12. Troubleshooting comum

Checklist de Produção

  • Operator instalado com 17 CRDs
  • Instance criada com TLS e auth
  • Secret chatcli-tls contém tls.crt, tls.key e ca.crt (self-signed: ca.crt=tls.crt)
  • tls.crt possui SANs para <instance>.<ns>.svc.cluster.local, <instance>.<ns>.svc e <instance>
  • spec.server.address no Instance bate com uma das SANs do cert
  • Logs do operator mostram Connected to Instance sem erros x509: até ~30s após Instance ficar Ready
  • Watcher monitorando deployments alvo
  • NotificationPolicy com Slack + PagerDuty
  • EscalationPolicy L1 - L2 - L3
  • SLOs com burn rate alerting (Google SRE model)
  • SLAs com response/resolution time por severity
  • ApprovalPolicy com auto/quorum para produção
  • Grafana dashboards instalados
  • Chaos experiment validado em dry-run
  • API Keys do operator configuradas (ConfigMap chatcli-operator-config)
  • Web Dashboard acessível
  • REST API com autenticação configurada (header X-API-Key)