Prometheus qui rame et crash à cause de la cardinalité

Posté par imbert-julien le 06/11/2025
RÉSOLU

imbert-julien

Membre depuis le 29/11/2018

Yo ! Notre Prometheus commence à avoir des soucis sérieux. Le scrape est lent, les requêtes Grafana prennent une plombe et de temps en temps il OOM (Out Of Memory). On a un truc qui cloche avec la cardinalité. Je pense à une app qui envoie trop de labels dynamiques. Comment vous feriez pour débusquer le coupable et nettoyer tout ça ?

# Exemple de métrique qui me semble suspecte (mais y'en a d'autres)
my_app_request_duration_seconds_bucket{endpoint="/api/v1/user/{id}", method="GET", status="200", user_id="12345", transaction_id="abc-123"}

Commentaires

cecile-guyon

Membre depuis le 02/02/2020

Salut. Clairement

user_id

et

transaction_id

en labels c le cancer de la cardinalité. c des trucs à mettre dans tes logs pas dans tes métriques. Pour débusquer, tu peux utiliser l'interface UI de Prometheus, section "Status" -> "Target" et regarde la colonne "Series". Tu verras quel target te génère le plus de séries. Souvent ça pointe le doigt sur l'app fautive

imbert-julien

Membre depuis le 29/11/2018

Ah oui pas con la section "Targets". J'avais oublié ça. Je vais regarder ça tout de suite. Mais pour le nettoyage, une fois que j'ai identifié l'app, vous faites comment ? Renommer le label avec un

label_replace

ou direct virer le label avec un

labeldrop

dans la config du scrape ?

cecile-guyon

Membre depuis le 02/02/2020

Si c'est

user_id

ou

transaction_id

faut le dropper direct, pas le remplacer. C'est vraiment des identifiants uniques par requête ou par utilisateur, ça a rien à faire en label Prometheus. Tu peux le faire via

relabel_configs

dans ton

scrape_config

. Utilise

action: drop

avec

regex

pour cibler les labels problématiques. N'oublie pas de tester tes configs avec

promtool check config

suzanne-texier

Membre depuis le 12/04/2019

Ouais drop c'est le mieux. Autre truc: utilise le

cardinality_exporter

ou un outil similaire. Ça te donne une vue agrégée de la cardinalité par nom de métrique et par label. C'est super pratique pour visualiser d'un coup d'oeil où sont les problèmes sans fouiller target par target

imbert-julien

Membre depuis le 29/11/2018

Ok

cardinality_exporter

je connaissais pas je vais regarder ça. Et ouais je suis d'accord, ces labels sont clairement à virer. Je vais mettre des

relabel_configs

pour les dropper. Merci les gars, je vous tiens au jus après le déploiement de la nouvelle config

cecile-guyon

Membre depuis le 02/02/2020

fais gaffe quand tu redémarres prometheus. si tu drop des millions de séries d'un coup, ça peut prendre un peu de temps à nettoyer la base de données. sois patient et surveille bien les logs

imbert-julien

Membre depuis le 29/11/2018

Bon c'est déployé et ça marche. Les

user_id

et

transaction_id

sont bien droppés. La cardinalité a chuté de ouf, le scrape est plus rapide et Grafana répond mieux. Plus de OOM pour l'instant. Merci beaucoup pour l'aide, ça m'a sauvé la mise !

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire