Prometheus qui rame et crash à cause de la cardinalité

imbert-julien 06/11/2025
RÉSOLU
imbert-julien
Auteur Actif
Avatar de imbert-julien
imbert-julien
Auteur Actif

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"}
06/11/2025 à 21:33

7 commentaires

cecile-guyon
Membre Actif Secouriste
Avatar de cecile-guyon
cecile-guyon
Membre Actif Secouriste

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

07/11/2025 à 20:27
imbert-julien
Auteur Actif
Avatar de imbert-julien
imbert-julien
Auteur Actif

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 ?

08/11/2025 à 19:18
cecile-guyon
Membre Actif Secouriste
Avatar de cecile-guyon
cecile-guyon
Membre Actif Secouriste

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

09/11/2025 à 17:36
suzanne-texier
Membre Actif
Avatar de suzanne-texier
suzanne-texier
Membre Actif

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

10/11/2025 à 16:59
imbert-julien
Auteur Actif
Avatar de imbert-julien
imbert-julien
Auteur Actif

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

11/11/2025 à 15:42
cecile-guyon
Membre Actif Secouriste
Avatar de cecile-guyon
cecile-guyon
Membre Actif Secouriste

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

12/11/2025 à 13:37
imbert-julien
Auteur Actif
Avatar de imbert-julien
imbert-julien
Auteur Actif

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 !

13/11/2025 à 11:11

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