Observability · 13/08/2026

Limites de Cardinalidade em OpenTelemetry Expõem o Trade-off Real: Segurança de Memória versus Precisão de Queries em Observabilidade

OpenTelemetry implementa limites de cardinalidade para proteger processos de crescimento de memória ilimitado, mas essa proteção silencia queries de filtro e agrupa atributos, quebrando SLOs e alertas sem sinais visuais de degradação.

O que está acontecendo

O metrics SDK do OpenTelemetry foi projetado com uma guardrail fundamental: quando um stream métrico recebe muitas combinações únicas de atributos, um limite de cardinalidade ativa automaticamente, evitando que a memória cresça indefinidamente. Esse mecanismo funciona bem em seu objetivo defensivo.

O problema não está na proteção em si, mas na sombra que ela deixa: quando esse limite é acionado (overflow), o valor total da métrica permanece correto, porém queries que filtram ou agrupam por atributos começam a undercount. Silenciosamente. Sem alertas embutidos. Sem mudanças visuais óbvias nos dashboards até que você investigue.

Essa assimetria quebra um contrato implícito que toda plataforma de observabilidade deve honrar: visibilidade não significa apenas coletar dados, significa garantir que dados filtrados reflitam a realidade operacional.

Insights e Riscos

O que muda na prática

Para Engenheiros de Plataforma / SRE:

Você precisa instrumentar observabilidade da observabilidade. Monitore o próprio metrics SDK para detectar quando overflow está acontecendo. Procure por:

Para Arquitetos de Observabilidade:

O limite de cardinalidade não é configurável por acaso. A maioria das implementações usa 2000 ou 2048 combinações únicas por métrica. Se suas topologias de atributo podem gerar 50k+ combinações, você está no caminho errado. Repensar a dimensionalidade:

Para DevOps/MLOps:

Quando você deploy um agente OpenTelemetry, estabeleça alertas assimétricos. Não confie em "métrica reporta X", confie em "métrica reporta X e nenhum overflow ocorreu". Ferramentas como Prometheus ou backends que suportam OpenTelemetry podem expor otelcol_metrics_cardinality_dropped ou métricas análogas. Alertar sobre isso com severidade alta.

Para ambientes de ML/dados, onde atributos como model_version, dataset_id, experiment_tag podem explodi em cardinalidade, considere usar span attributes para essas dimensões e reservar métricas para observáveis realmente agregáveis.

Conclusão direta

OpenTelemetry sacrifica uma certa ilusão de precisão granular para garantir que observabilidade não mate seu próprio processo. É uma troca defensável, mas somente se você a entender e detectar quando ela acontece. O risco real não está no mecanismo de proteção em si, está na falsa confiança que builds em cima de métricas filtradas sem verificar se o overflow está em ação.

Se você constrói SLOs, alertas ou dashboards que dependem fortemente de filtros por atributo, você está um overflow silencioso de distância de cegos operacionais. Como você está atualmente monitorando se seus limites de cardinalidade já foram acionados?

Fontes

#Cardinality-Limits #OpenTelemetry #Metrics-SDK #Observability-Architecture #Production-Safety

Voltar para a página inicial