Cardinalidade é o número de combinações únicas de label de uma métrica, e cada combinação é uma série temporal separada mantida em memória. Colocar ids de usuário, ids de requisição, endereços de email ou caminhos de URL crus em labels pode criar milhões de séries e derrubar uma instância do Prometheus. Mantenha labels limitados e de baixa aridade, transforme segmentos dinâmicos de caminho em template, empurre o detalhe por requisição para logs ou traces, e imponha limites com relabeling e teto de amostras.
Por que os entrevistadores perguntam isso
Explosões de cardinalidade são uma das formas mais comuns de o próprio monitoramento virar a queda, o que é um tipo especial de ruim. O entrevistador está checando se você sabe onde fica a fronteira entre métricas, logs e traces, e se você já operou um banco de séries temporais em vez de só ter consultado um.
Como estruturar sua resposta
- Defina cardinalidade como conjuntos únicos de label, cada um custando uma série viva.
- Liste os culpados clássicos que acabam virando label.
- Dê a regra do que pertence a um label versus a um campo de log.
- Descreva as proteções: descarte por relabel, limites e revisão de métricas novas.
Exemplo de resposta
Toda combinação única de valores de label é a sua própria série temporal, com a sua própria pegada de memória e o seu próprio chunk em disco. Então no momento em que alguém adiciona user_id ou um caminho cru como label, você vai de algumas centenas de séries para milhões. A gente teve uma instância de Prometheus tomando OOM repetidamente e descobriu que um time tinha adicionado a URL completa, incluindo query string, como label no contador de requisições deles. A regra que eu uso é que o valor de um label tem que vir de um conjunto pequeno e fechado que você conseguiria escrever num quadro branco: método, classe de status, template do endpoint, região. Qualquer coisa sem limite vai para uma linha de log ou um atributo de span, onde o modelo de armazenamento foi feito para isso. Na prática eu imponho com metric_relabel_configs para descartar labels sabidamente ruins no momento do scrape, um limite de amostras por target para que um serviço não derrube a instância inteira, e uma revisão rápida sempre que uma métrica nova aparece num pull request.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você descobriria qual métrica está puxando a sua contagem de séries?
- Quando é certo mover uma métrica para uma agregação baseada em logs?
- O que um limite de amostras faz quando um target o excede?
Mais perguntas para Engenheiro de Confiabilidade de Sites
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas