Pular para o conteúdo principal
A plataforma AIOps do ChatCLI inclui um dashboard web embutido (SPA self-contained) e 4 dashboards Grafana pré-configurados para observabilidade completa do pipeline de operações autônomas.

Web Dashboard

Visão Geral

O Web Dashboard é uma Single Page Application embutida diretamente no binário do operator via Go embed.FS — não requer Node.js, npm ou qualquer build frontend separado.
CaracterísticaDetalhe
TecnologiaHTML/CSS/JS vanilla (zero dependências externas)
EmpacotamentoGo embed.FS — compilado no binário
Porta8090 (configurável via CHATCLI_AIOPS_PORT)
TemaDark theme (fundo escuro, texto claro)
ResponsivoAdapta-se a desktop, tablet e mobile
Auto-refreshIntervalo configuravel: Off, 10s, 30s (padrão), 1m, 2m, 5m — com botao de refresh manual
Tabelas ordenáveisClique no cabeçalho de qualquer coluna para ordenar (▲ ascendente / ▼ descendente)
Ordenação estávelListas mantêm ordem consistente entre refreshes (incidentes/audit por timestamp, SLOs por nome)
AutenticaçãoMesma API key do REST API (header X-API-Key)
URLhttp://<operator-host>:8090/
O dashboard consume a mesma API REST documentada em API Reference. Todas as operações disponíveis no dashboard (acknowledge, snooze, approve, reject) são chamadas REST autenticadas.

Arquitetura

┌─────────────────────────────────────────────────────────┐
│                    Operator Binary                       │
│                                                         │
│  ┌──────────────────┐  ┌─────────────────────────────┐  │
│  │  embed.FS         │  │  HTTP Server (:8090)        │  │
│  │  ├── index.html   │  │  ├── /          → SPA       │  │
│  │  ├── styles.css   │  │  ├── /api/v1/  → REST API  │  │
│  │  └── app.js       │  │  ├── /healthz  → Health    │  │
│  │                    │  │  └── /readyz   → Ready     │  │
│  └──────────────────┘  └─────────────────────────────┘  │
│                                                         │
│  ┌──────────────────────────────────────────────────┐   │
│  │  Kubernetes Client (informers + watch)            │   │
│  │  Issues, Anomalies, AIInsights, Plans, PostMortems│   │
│  └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘

Views do Dashboard

O dashboard possui 10 views acessíveis via navegação por tabs:
Visão geral da plataforma com métricas agregadas.Componentes:
ComponenteDescrição
Stats Cards6 cards: Active Issues, Resolved, Remediations (sucesso/total), Success Rate, PostMortems, Pending Approvals
Compliance & SLAPorcentagem de compliance em tempo real, MTTD, MTTR, violações de SLA response/resolution, stats de aprovação
Capacity WarningsBanner de alerta mostrando recursos em risco de esgotamento (urgente/planejado), com recomendações
Remediação por EstrategiaGrafico de barras horizontais mostrando taxa de sucesso por tipo de ação
Pie Chart (Severidade)Distribuicao de incidentes por severidade (Critical/High/Medium/Low)
Incidentes RecentesLista dos 10 incidentes mais recentes com estado, severidade e timestamp
TimelineGrafico temporal de incidentes nas ultimas 24h (barras empilhadas por severidade)
O Overview fornece consciencia situacional abrangente com metricas de compliance, capacidade e efetividade de remediação.
Tabela interativa de todos os incidentes com filtros e ações.Funcionalidades:
FuncionalidadeDescrição
FiltrosSeveridade, estado, namespace, período (dropdowns no topo)
TabelaColunas: Nome, Severidade, Estado, Recurso, Namespace, Detectado em, Duração
OrdenaçãoClique no header da coluna para ordenar (asc/desc)
ExpansãoClique na linha para expandir detalhes: análise IA, recomendações, plano de remediação
AcknowledgeBotão para reconhecer incidente (requer role operator)
SnoozeBotão com seletor de duração (30m, 1h, 2h, 4h, 24h)
PaginaçãoNavegação por páginas com 20 itens por página
Badges de severidade:
SeveridadeCor
CriticalVermelho (#ef4444)
HighLaranja (#f97316)
MediumAmarelo (#eab308)
LowAzul (#3b82f6)
Badges de estado:
EstadoCor
DetectedCinza (#6b7280)
AnalyzingAzul (#3b82f6)
RemediatingAmarelo (#eab308)
ResolvedVerde (#22c55e)
EscalatedVermelho (#ef4444)
Cards de SLOs com indicadores visuais de error budget e burn rate.Componentes por SLO:
ComponenteDescrição
CardNome do SLO, serviço, tipo de SLI, target vs. current
Error Budget GaugeBarra de progresso circular mostrando % consumido do error budget. Verde (<70%), Amarelo (70-90%), Vermelho (>90%)
Burn Rate Chips4 chips: 1h, 6h, 24h, 72h. Cor indica se burn rate excede threshold (Google SRE model)
EstadoBadge: healthy (verde), at_risk (amarelo), breached (vermelho)
HistóricoSparkline dos últimos 7 dias de compliance
Thresholds de Burn Rate (Google SRE):
JanelaThresholdSignificado
1h14.4xConsome 100% do budget em 5 dias
6h6.0xConsome 100% do budget em 5 dias (confirmação)
24h3.0xConsome 100% do budget em 10 dias
72h1.0xConsome 100% do budget em 30 dias
Lista de aprovações pendentes com ações de aprovar/rejeitar.Funcionalidades:
FuncionalidadeDescrição
Lista PendentesAprovações pendentes no topo, com destaque visual
ContextoCada aprovação mostra: incidente associado, ação proposta, severidade, confidence da IA
ApproveBotão verde. Abre modal com campo obrigatório para nome do aprovador e campo opcional para motivo.
RejectBotão vermelho. Abre modal com campos obrigatórios para nome e motivo da rejeição.
HistóricoTab para ver aprovações históricas (approved/rejected/expired)
ExpiraçãoTimer countdown mostrando tempo restante para expiração
Visualize todas as analises geradas pela IA para entender como ela raciocinou sobre cada incidente.Funcionalidades:
FuncionalidadeDescrição
FiltroFiltrar por nome do incidente para ver insights de um issue específico
TabelaColunas: Incidente, Provider, Modelo, Confianca, Recomendações, Ações, Gerado em
ConfiancaScore de confianca colorido: verde (≥85%), amarelo (70-84%), vermelho (<70%)
ExpansaoClique na linha para expandir: texto completo da analise, lista de recomendações, ações sugeridas com parâmetros
Analise de LogsVisao expandida mostra achados estruturados dos logs (stack traces, padroes de erro)
Analise de CascataMostra cadeia de cascata entre servicos quando detectada
Contexto GitOpsExibe status do Helm/ArgoCD/Flux no momento da análise
Blast RadiusMostra impacto previsto das ações de remediação sugeridas
Esta view e essencial quando um incidente e escalado para ação humana — mostra exatamente o que a IA encontrou, porque recomendou ações especificas, e quais dados de enriquecimento informaram sua analise.Endpoint da API: GET /api/v1/aiinsights
Acompanhe todos os planos de remediação com detalhes de execução, tanto baseados em runbook quanto em modo agentico.Funcionalidades:
FuncionalidadeDescrição
FiltrosDropdown de estado (Pending/Executing/Verifying/Completed/Failed/RolledBack), filtro por nome do incidente
TabelaColunas: Nome, Incidente, Tentativa, Estado, Modo (Runbook/Agentic), Ações/Steps, Inicio, Duracao
Indicador de modoModo agentico destacado em vermelho; Modo runbook em texto padrão
ExpansaoClique para expandir: descrição da estrategia, lista de ações planejadas, resultado
Detalhes agenticosPara planos agenticos: contagem de steps na tabela, conversa completa via API de detalhe
DuracaoCalculada automaticamente do início ao fim
Badges de estadoMesmo esquema de cores dos incidentes: Completed (verde), Executing (amarelo), Failed (vermelho), RolledBack (laranja)
Endpoint da API: GET /api/v1/remediations
Visualize todos os runbooks — tanto criados manualmente quanto gerados automaticamente pela IA após remediações bem-sucedidas.Funcionalidades:
FuncionalidadeDescrição
TabelaColunas: Nome, Tipo de Sinal, Severidade, Tipo de Recurso, Steps, Max Tentativas, Criado
Badge de sinalBadge colorido mostrando o tipo de sinal que dispara o runbook (oom_kill, pod_not_ready, deploy_failing, etc.)
ExpansaoClique na linha para expandir: descrição completa, criterios de trigger, e lista ordenada de steps
Detalhes dos stepsCada step mostra: badge do tipo de acao, descrição, e parâmetros em JSON
Auto-geradoRunbooks são criados automaticamente quando a IA remedia um incidente com sucesso — capturam a estratégia vencedora para reutilizacao
Runbooks servem como a “memoria institucional” da IA — quando um incidente similar ocorre no futuro, a plataforma o corresponde a um runbook existente em vez de comecar do zero, reduzindo significativamente o MTTR.Endpoint da API: GET /api/v1/runbooks
Lista de post-mortems com detalhes expansíveis.Funcionalidades:
FuncionalidadeDescrição
ListaTodos os post-mortems com estado (open/in_review/closed), incidente associado, duração
ExpansãoClique para expandir: timeline completa, causa raiz, impacto, ações executadas
Lessons LearnedSeção com lições aprendidas (geradas pela IA)
Prevention ActionsChecklist de ações preventivas sugeridas
Developer FeedbackFormulário inline para o desenvolvedor avaliar a remediação (1-5 estrelas), sobrescrever root cause e adicionar comentários. Após submetido, exibe o feedback com rating visual
ReviewBotão para marcar como “em revisão”
CloseBotão para fechar o post-mortem após revisão
FonteBadge indicando se foi gerado por remediação agentic ou standard
Cards de clusters monitorados com status de saúde.Componentes por cluster:
ComponenteDescrição
CardNome do cluster, provedor (EKS/GKE/AKS), versão K8s
StatusBadge: healthy (verde), degraded (amarelo), unreachable (vermelho)
MétricasNúmero de nodes, incidentes ativos, namespaces monitorados
RecursosBarras de uso de CPU e memória (capacity vs. usage)
TargetsLista de watcher targets com contadores de alertas por namespace
Last SyncTimestamp da última sincronização com indicador de freshness
Log de auditoria pesquisável com exportação.Funcionalidades:
FuncionalidadeDescrição
BuscaCampo de texto para buscar em tipo, recurso, ator, descrição
FiltrosTipo de evento, severidade, período
TabelaColunas: Timestamp, Tipo, Severidade, Ator, Recurso, Descrição
SeveridadeÍcones e cores: info (azul), warning (amarelo), critical (vermelho)
ExportarBotão para exportar em JSON ou CSV (requer role admin)
Paginação50 itens por página
Auto-scrollNovos eventos aparecem no topo com animação de highlight

Grafana Dashboards

A plataforma AIOps inclui 4 dashboards Grafana pré-configurados em formato JSON, prontos para importação.

1. AIOps Overview (aiops-overview.json)

Dashboard principal com visão geral operacional. Painéis:
PainelTipoDescrição
Active IssuesStatNúmero de issues não resolvidos (gauge com thresholds: verde <5, amarelo 5-15, vermelho >15)
MTTRStatTempo médio de resolução em minutos
Success RateGaugeTaxa de sucesso de remediação (0-100%)
Issues by SeverityPie ChartDistribuição de issues por severidade (Critical/High/Medium/Low)
Issues by StateBar ChartContagem de issues por estado (Detected/Analyzing/Remediating/Resolved/Escalated)
Remediation ActionsTime SeriesAções de remediação ao longo do tempo, separadas por tipo (Restart/Scale/Rollback/Adjust/Delete/Patch)
Resolution DurationHistogramDistribuição do tempo de resolução com buckets de 1min, 2min, 5min, 10min, 30min
Issues Over TimeTime SeriesIncidentes criados vs. resolvidos por hora
Variáveis de template:
VariávelTipoValores
namespaceQueryTodos os namespaces com issues
severityCustomAll, Critical, High, Medium, Low
intervalInterval1m, 5m, 15m, 1h

2. SLO Burn Rate (slo-burn-rate.json)

Dashboard dedicado a SLOs seguindo o modelo Google SRE. Painéis:
PainelTipoDescrição
Error Budget GaugeGaugePorcentagem de error budget restante por SLO. Thresholds: verde >30%, amarelo 10-30%, vermelho <10%
Burn Rate 1hTime SeriesBurn rate na janela de 1 hora com linha de threshold em 14.4x
Burn Rate 6hTime SeriesBurn rate na janela de 6 horas com linha de threshold em 6.0x
Burn Rate 24hTime SeriesBurn rate na janela de 24 horas com linha de threshold em 3.0x
Burn Rate 72hTime SeriesBurn rate na janela de 72 horas com linha de threshold em 1.0x
SLA ComplianceStatPorcentagem atual de compliance por SLO
SLA ViolationsTableLista de violações com timestamp, SLO afetado, duração e impacto no budget
Budget Consumption Over TimeTime SeriesConsumo acumulado de error budget ao longo da janela de 30 dias
Threshold lines (anotações): Cada gráfico de burn rate inclui uma linha horizontal vermelha tracejada no threshold correspondente (modelo Google SRE de multi-window, multi-burn-rate alerting).

3. Incident Timeline (incident-timeline.json)

Dashboard focado no fluxo temporal de incidentes e notificações. Painéis:
PainelTipoDescrição
Critical IncidentsStatContagem de incidentes critical ativos (vermelho pulsante se >0)
Escalated IncidentsStatContagem de incidentes escalados
Resolved TodayStatIncidentes resolvidos nas últimas 24h
Incident TimelineTimeline/AnnotationsVisualização temporal de incidentes com cores por severidade
Notifications by ChannelBar ChartContagem de notificações enviadas por canal (Slack/PagerDuty/Webhook/Email)
Approval DecisionsPie ChartDistribuição de decisões de aprovação (Approved/Rejected/Expired)
Federation StatusTableStatus de clusters federados com last sync, incidentes ativos e health
MTTD Over TimeTime SeriesMean Time to Detect ao longo do tempo

4. Remediation Stats (remediation-stats.json)

Dashboard detalhado sobre o desempenho das remediações. Painéis:
PainelTipoDescrição
Success Rate GaugeGaugeTaxa de sucesso geral de remediação. Thresholds: verde >90%, amarelo 75-90%, vermelho <75%
Actions by TypeBar Chart (horizontal)Total de ações executadas agrupadas por tipo (RestartDeployment, ScaleDeployment, etc.)
Actions by ResultStacked BarAções por resultado (success/failed) ao longo do tempo
Duration p50StatMediana do tempo de remediação
Duration p90StatPercentil 90 do tempo de remediação
Duration p99StatPercentil 99 do tempo de remediação
Duration DistributionHistogramDistribuição do tempo de remediação com buckets
Operator ReconciliationTime SeriesContagem de reconciliações por controller (Issue/Anomaly/AIInsight/Remediation)
Reconciliation ErrorsTime SeriesErros de reconciliação por controller
Reconciliation DurationHeatmapDuração das reconciliações por controller (detecta gargalos)

Instalação dos Dashboards Grafana

Via Grafana Sidecar (Recomendado)

Se você usa o Grafana Helm chart com sidecar habilitado, crie ConfigMaps com o label grafana_dashboard: "1":
# Criar ConfigMaps para cada dashboard
kubectl create configmap grafana-aiops-overview \
  --from-file=aiops-overview.json=operator/dashboards/aiops-overview.json \
  -n monitoring

kubectl create configmap grafana-slo-burn-rate \
  --from-file=slo-burn-rate.json=operator/dashboards/slo-burn-rate.json \
  -n monitoring

kubectl create configmap grafana-incident-timeline \
  --from-file=incident-timeline.json=operator/dashboards/incident-timeline.json \
  -n monitoring

kubectl create configmap grafana-remediation-stats \
  --from-file=remediation-stats.json=operator/dashboards/remediation-stats.json \
  -n monitoring

# Adicionar label para o sidecar descobrir
kubectl label configmap grafana-aiops-overview grafana_dashboard=1 -n monitoring
kubectl label configmap grafana-slo-burn-rate grafana_dashboard=1 -n monitoring
kubectl label configmap grafana-incident-timeline grafana_dashboard=1 -n monitoring
kubectl label configmap grafana-remediation-stats grafana_dashboard=1 -n monitoring
O sidecar do Grafana detecta automaticamente ConfigMaps com o label grafana_dashboard: "1" e importa os dashboards sem restart.

Via Importação Manual

  1. Acesse Grafana > Dashboards > Import
  2. Faça upload do arquivo JSON ou cole o conteúdo
  3. Selecione o datasource Prometheus
  4. Clique em Import

ServiceMonitor para Prometheus Operator

Configure o scraping de métricas do operator:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: chatcli-operator
  namespace: chatcli-system
  labels:
    app.kubernetes.io/name: chatcli-operator
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: chatcli-operator
  endpoints:
    - port: metrics
      interval: 30s
      path: /metrics
  namespaceSelector:
    matchNames:
      - chatcli-system

Referência de Métricas Prometheus

O operator expõe as seguintes métricas Prometheus para alimentar os dashboards Grafana:
MétricaTipoLabelsDescrição
chatcli_operator_issues_totalCounterseverity, stateTotal de issues criados por severidade e estado
chatcli_operator_active_issuesGaugenamespaceNúmero de issues ativos (não resolvidos)
chatcli_operator_issue_resolution_duration_secondsHistogramseverityDuração da detecção até resolução
chatcli_operator_remediation_actions_totalCountertype, resultTotal de ações de remediação por tipo e resultado
chatcli_operator_remediation_duration_secondsHistogramtypeDuração das ações de remediação por tipo
chatcli_operator_anomalies_totalCountersignal_type, namespaceTotal de anomalias detectadas
chatcli_operator_anomalies_suppressed_totalCounterstrategyAnomalias suprimidas pelo Noise Reducer por estratégia
chatcli_operator_ai_analysis_duration_secondsHistogramprovider, modelDuração das análises por IA
chatcli_operator_ai_analysis_confidenceHistogramproviderDistribuição de confidence das análises
chatcli_operator_ai_tokens_totalCounterprovider, directionTotal de tokens consumidos (direction: input/output)
chatcli_operator_ai_cost_dollarsCounterproviderCusto acumulado em dólares por provedor
chatcli_operator_slo_current_ratioGaugeslo_name, serviceRatio atual do SLO (0-1)
chatcli_operator_slo_error_budget_remainingGaugeslo_nameError budget restante em minutos
chatcli_operator_slo_burn_rateGaugeslo_name, windowBurn rate por janela (1h/6h/24h/72h)
chatcli_operator_approvals_totalCounterdecisionTotal de decisões de aprovação (approved/rejected/expired)
chatcli_operator_notifications_totalCounterchannel, resultNotificações enviadas por canal e resultado
chatcli_operator_postmortems_totalCountersourceTotal de post-mortems gerados por fonte (agentic/standard)
chatcli_operator_reconcile_totalCountercontroller, resultTotal de reconciliações por controller e resultado
chatcli_operator_reconcile_duration_secondsHistogramcontrollerDuração das reconciliações por controller
chatcli_operator_reconcile_errors_totalCountercontrollerTotal de erros de reconciliação por controller
chatcli_operator_cluster_healthGaugecluster, providerHealth do cluster (1=healthy, 0.5=degraded, 0=unreachable)
chatcli_operator_capacity_cpu_usage_percentGaugeresource, namespaceUso atual de CPU em porcentagem
chatcli_operator_capacity_memory_usage_percentGaugeresource, namespaceUso atual de memória em porcentagem
chatcli_operator_capacity_exhaustion_daysGaugeresource, namespace, typeDias projetados até esgotamento (type: cpu/memory, -1 se estável)

Queries Prometheus Úteis

Exemplos de queries PromQL para usar nos dashboards ou alertas:
histogram_quantile(0.5,
  rate(chatcli_operator_issue_resolution_duration_seconds_bucket{severity="critical"}[24h])
)
sum(chatcli_operator_remediation_actions_total{result="success"})
/
sum(chatcli_operator_remediation_actions_total)
* 100
# Alerta: burn rate 1h > 14.4x E burn rate 6h > 6x (Google SRE model)
chatcli_operator_slo_burn_rate{window="1h"} > 14.4
and
chatcli_operator_slo_burn_rate{window="6h"} > 6.0
increase(chatcli_operator_ai_cost_dollars[1h])
# Ratio de supressão
sum(rate(chatcli_operator_anomalies_suppressed_total[1h]))
/
(sum(rate(chatcli_operator_anomalies_total[1h])) + sum(rate(chatcli_operator_anomalies_suppressed_total[1h])))
* 100
chatcli_operator_capacity_exhaustion_days > 0
and
chatcli_operator_capacity_exhaustion_days &lt; 7

Acesso ao Dashboard

1

Verificar o operator

Confirme que o operator está rodando:
kubectl get pods -n chatcli-system -l app.kubernetes.io/name=chatcli-operator
2

Port-forward (desenvolvimento)

Para acesso local durante desenvolvimento:
kubectl port-forward -n chatcli-system svc/chatcli-operator 8090:8090
Acesse: http://localhost:8090/
3

Ingress (produção)

Para acesso em produção, configure um Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: chatcli-dashboard
  namespace: chatcli-system
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - hosts: ["aiops.empresa.com"]
      secretName: aiops-tls
  rules:
    - host: aiops.empresa.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: chatcli-operator
                port:
                  number: 8090
4

Configurar API Key

Configure ao menos uma API key antes de expor o dashboard externamente:
apiVersion: v1
kind: ConfigMap
metadata:
  name: chatcli-operator-config
  namespace: chatcli-system
data:
  api-keys: |
    - key: "ck_live_abc123..."
      role: admin
      description: "CI/CD Pipeline"
    - key: "ck_live_def456..."
      role: operator
      description: "NOC Team"
Após criar o ConfigMap, reinicie o operator para carregar as chaves:
kubectl rollout restart deployment chatcli-operator -n chatcli-system
Nunca exponha o dashboard sem autenticação (API key) em produção. O modo dev (sem chaves) permite acesso irrestrito, incluindo operações de escrita como acknowledge, approve e reject.

Próximo Passo

API REST Reference

Referência completa de todos os endpoints consumidos pelo dashboard.

Capacity & Custos

Detalhes do Capacity Planner, Noise Reducer e Cost Tracker.

AIOps Platform

Arquitetura completa do pipeline de operações autônomas.

K8s Operator

Configuração e deployment do operator Kubernetes.