Prometheus OOMKilled sur gros infra Kubernetes

veronique28 21/05/2024
RÉSOLU
veronique28
Auteur Actif
Avatar de veronique28
veronique28
Auteur Actif

yo tout le monde ! j'ai un souci récurrent avec mon Prometheus qui se fait OOMKilled sur mon cluster k8s. on a genre 5000 pods à scraper, plein de custom metrics, et même avec 32 Go de RAM il crash. j'ai essayé de jouer avec le scrape interval mais ça change rien de fou. on est sur prometheus 2.37. J'ai l'impression qu'il y a un truc qui explose la cardinalité.

21/05/2024 à 16:34

9 commentaires

clemence-gilbert
Membre Actif
Avatar de clemence-gilbert
clemence-gilbert
Membre Actif

salut. la cardinalité c'est le cancer de prometheus. tu as regardé les métriques de prometheus lui-même ? prometheus_tsdb_head_series et prometheus_tsdb_head_chunks c'est les métriques clés. si prometheus_tsdb_head_series est énorme c'est ça le problème. faut trouver la métrique qui a trop de labels.

Modifié le 23/05/2026 à 16:20
xbousquet
Membre
Avatar de xbousquet
xbousquet
Membre

grave. souvent c'est les labels à haute cardinalité genre pod_name ou instance_id qui viennent des discoverys kubernetes. faut les virer ou les réécrire avec des relabel_configs dans la partie metric_relabel_configs pour garder que l'info pertinente.

Modifié le 23/05/2026 à 16:20

tu peux aussi checker la rétention. si tu gardes trop longtemps les données avec une haute résolution ça bouffe de la ram. par défaut c 15 jours. si tu as besoin de plus pense à utiliser un long term storage type Thanos ou Mimir.

24/05/2024 à 08:40
veronique28
Auteur Actif
Avatar de veronique28
veronique28
Auteur Actif

j'ai regardé prometheus_tsdb_head_series il est à 8 millions c'est énorme je crois. j'ai vu des séries avec des labels container_id et request_id qui sont partout. ça sent le relabeling obligatoire. je vais essayer de purger ces labels là.

Modifié le 23/05/2026 à 16:20
clemence-gilbert
Membre Actif
Avatar de clemence-gilbert
clemence-gilbert
Membre Actif

oui container_id et request_id c'est le classique. utilise un action: drop sur les métriques qui ont ces labels si tu en as pas besoin. ou un action: replace pour les généraliser. genre regex: (.*)request_id(.*) et replacement: $1 pour virer la valeur.

Modifié le 23/05/2026 à 16:20
xbousquet
Membre
Avatar de xbousquet
xbousquet
Membre

et n'oublie pas le __name__ des métriques. si tu as des métriques générées par des libs qui sont pas trop fan de prometheus ça peut aussi contribuer. faut monitorer les exporters et les applications qui balancent des métriques avec trop de dims.

Modifié le 23/05/2026 à 16:20
veronique28
Auteur Actif
Avatar de veronique28
veronique28
Auteur Actif

ok je suis en train d'implémenter des metric_relabel_configs massifs pour virer container_id et request_id. j'ai aussi set la rétention à 7 jours au lieu de 15. je relance le pod et je vois. merci pour les tips les gars !

Modifié le 23/05/2026 à 16:20
clemence-gilbert
Membre Actif
Avatar de clemence-gilbert
clemence-gilbert
Membre Actif

good luck. pense à bien tester tes relabel_configs avec le promtool test rules avant de déployer ça en prod. c facile de casser la collecte si c mal fait.

Modifié le 23/05/2026 à 16:20
veronique28
Auteur Actif
Avatar de veronique28
veronique28
Auteur Actif

ha ouais bonne idée pour le test rules. j'ai relancé et la mémoire est plus stable. prometheus_tsdb_head_series est tombé à 2 millions. beaucoup mieux ! merci à vous tous !

Modifié le 23/05/2026 à 16:20

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