# ============================================================================= # P5.3/P6.x — o Prometheus passa a raspar as APLICAÇÕES do Athletic Map. # # ── O QUE ESTAVA FALTANDO (achado em 2026-09-20) ──────────────────────────── # # O `athleticmap-backends` só seleciona Services com `app: backend` — o backend # monolítico antigo. Resultado: 4 alvos raspados no cluster inteiro. Nenhum dos # 13 serviços, nenhum runtime, nem o BFF, nem o `servico-captacao` entregavam # métrica ao Prometheus. # # Consequência prática: os contadores que o código já publica # (`atm_provisionamento_teto_atingido_total`, `atm_webhook_assinatura_recusado_total`) # não existiam em lugar nenhum, e alerta sobre eles não teria como funcionar. # # ── POR QUE UMA LISTA, E NÃO "TUDO" ───────────────────────────────────────── # # Selecionar todo Service com porta `http` pegaria o `frontend-spa` (nginx, que # não tem `/actuator/prometheus`) e encheria o log do Prometheus de 404. # A lista é explícita: quem entra, entra por nome. # # ── POR QUE DOIS ServiceMonitor, E NÃO UM (2026-09-21) ────────────────────── # # Num tenant consolidado os 13 Services `servico-` APONTAM PARA O # RUNTIME: raspar os 13 e mais os 3 runtimes significa raspar o MESMO pod 14 # vezes, com 14 nomes de `service` diferentes. Medido: 85 alvos e 119 mil séries, # e no Grafana a mesma JVM aparecia como catorze coisas. # # Então a seleção é por NAMESPACE: onde há runtime, raspa-se o runtime; onde os # 13 serviços ainda rodam de verdade (o `escolinha`), raspa-se os 13. # **Tenant que migrar muda de lista aqui** — é o mesmo passo do PgBouncer. # # ── CUIDADO COM A MEMÓRIA DO PROMETHEUS ───────────────────────────────────── # # O nó é único e o Prometheus tem limite de 1536Mi (usava 758Mi em 2026-09-20). # Cada app Spring publica ~300 séries. Por isso: intervalo de 60s (e não 30s) e # uma LISTA DO QUE GUARDAR — o resto é descartado na ingestão. Se um dia faltar # uma métrica no Grafana, é aqui que ela precisa entrar. # ============================================================================= apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: athleticmap-runtimes namespace: monitoring labels: release: monitoring spec: # Tenants JA consolidados: o que roda sao os 3 runtimes (+ BFF). namespaceSelector: matchNames: [demo-prod, piloto-prod, acme-prod] selector: matchExpressions: - key: app operator: In values: - runtime-core - runtime-operacao - runtime-saude - servico-bff endpoints: - port: http path: /actuator/prometheus interval: 60s scrapeTimeout: 20s metricRelabelings: # Guarda o que se usa: as métricas do domínio (`atm_*`), o essencial da # JVM e do HTTP, o pool do banco, e o `up` (que o Prometheus gera). - sourceLabels: [__name__] regex: "atm_.*|up|jvm_memory_used_bytes|jvm_memory_max_bytes|jvm_threads_live_threads|process_cpu_usage|system_cpu_usage|http_server_requests_seconds_count|http_server_requests_seconds_sum|http_server_requests_seconds_max|hikaricp_connections_active|hikaricp_connections_pending|hikaricp_connections_max|flyway_migrations_.*|application_ready_time_seconds" action: keep --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: athleticmap-servicos namespace: monitoring labels: release: monitoring spec: # Tenants que ainda rodam os servicos separados. O `escolinha` e o mostruario # (decisao do dono, 2026-09-19); o `plataforma` tem os proprios servicos. namespaceSelector: matchNames: [escolinha-prod, plataforma-prod] selector: matchExpressions: - key: app operator: In values: - servico-administrativo - servico-agenda - servico-assistencia-social - servico-bff - servico-cadastro - servico-campeonato - servico-captacao - servico-configuracao - servico-documentos - servico-financeiro - servico-nutricao - servico-organizacao - servico-pedagogico - servico-planejamento - servico-saude endpoints: - port: http path: /actuator/prometheus interval: 60s scrapeTimeout: 20s metricRelabelings: # Guarda o que se usa: as métricas do domínio (`atm_*`), o essencial da # JVM e do HTTP, o pool do banco, e o `up` (que o Prometheus gera). - sourceLabels: [__name__] regex: "atm_.*|up|jvm_memory_used_bytes|jvm_memory_max_bytes|jvm_threads_live_threads|process_cpu_usage|system_cpu_usage|http_server_requests_seconds_count|http_server_requests_seconds_sum|http_server_requests_seconds_max|hikaricp_connections_active|hikaricp_connections_pending|hikaricp_connections_max|flyway_migrations_.*|application_ready_time_seconds" action: keep