Prometheus OOMKilled sur gros infra Kubernetes

Posté par veronique28 le 21/05/2024
RÉSOLU

veronique28

Membre depuis le 30/12/2020

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é.

Commentaires

clemence-gilbert

Membre depuis le 06/05/2024

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.

xbousquet

Membre depuis le 28/04/2024

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.

eugene-bruneau

Membre depuis le 28/04/2024

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.

veronique28

Membre depuis le 30/12/2020

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à.

clemence-gilbert

Membre depuis le 06/05/2024

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.

xbousquet

Membre depuis le 28/04/2024

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.

veronique28

Membre depuis le 30/12/2020

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 !

clemence-gilbert

Membre depuis le 06/05/2024

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.

veronique28

Membre depuis le 30/12/2020

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 !

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