La cardinalité, c'est le nombre de combinaisons uniques de labels pour une métrique, et chaque combinaison est une série temporelle distincte gardée en mémoire. Mettre des identifiants utilisateur, des identifiants de requête, des adresses e-mail ou des chemins d'URL bruts dans les labels peut créer des millions de séries et faire tomber une instance Prometheus. Gardez des labels bornés et de faible arité, remplacez les segments de chemin dynamiques par des gabarits, poussez le détail par requête dans les logs ou les traces, et imposez des limites avec du relabeling et des plafonds d'échantillons.
Pourquoi les recruteurs posent cette question
Les explosions de cardinalité sont l'une des façons les plus courantes dont la supervision devient elle-même la panne, ce qui est un genre de désastre particulier. Le recruteur vérifie si vous savez où passe la frontière entre métriques, logs et traces, et si vous avez exploité une base de séries temporelles plutôt que seulement l'interroger.
Comment structurer votre réponse
- Définissez la cardinalité comme des ensembles de labels uniques, chacun coûtant une série vivante.
- Listez les coupables classiques qu'on ajoute en labels.
- Donnez la règle sur ce qui appartient à un label plutôt qu'à un champ de log.
- Décrivez les garde-fous : suppressions par relabeling, limites, et revue des nouvelles métriques.
Exemple de réponse
Chaque combinaison unique de valeurs de labels est sa propre série temporelle avec son empreinte mémoire et son bloc sur disque. Donc dès que quelqu'un ajoute user_id ou un chemin brut en label, vous passez de quelques centaines de séries à des millions. On a eu une instance Prometheus qui partait en OOM à répétition, et il s'est avéré qu'une équipe avait ajouté l'URL complète, chaîne de requête comprise, en label sur son compteur de requêtes. La règle que j'applique, c'est qu'une valeur de label doit venir d'un ensemble petit et fermé qu'on pourrait écrire sur un tableau blanc : méthode, classe de statut, gabarit d'endpoint, région. Tout ce qui n'est pas borné va dans une ligne de log ou un attribut de span, où le modèle de stockage est prévu pour ça. En pratique je l'impose avec des metric_relabel_configs pour supprimer les labels connus comme mauvais au moment du scrape, une limite d'échantillons par cible pour qu'un service ne puisse pas faire tomber l'instance entière, et une revue rapide dès qu'une nouvelle métrique apparaît dans une pull request.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Comment trouveriez-vous quelle métrique fait exploser votre nombre de séries ?
- Quand est-il juste de déplacer une métrique vers une agrégation basée sur les logs ?
- Que fait une limite d'échantillons quand une cible la dépasse ?
Autres questions pour Ingénieur SRE
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions