Pergunta de entrevista para Engenheiro de Confiabilidade de Sites

O que é alta cardinalidade num sistema de métricas, e como você mantém isso sob controle?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

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

Exemplo falado, em primeira pessoa

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 funciona

Perguntas 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

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot