High cardinality dans Prometheus et alertmanager fou

Posté par thomas-morel le 01/02/2025
RÉSOLU

thomas-morel

Membre depuis le 23/03/2020

Salut la team. On a de gros soucis de perf sur notre cluster Prometheus. Il est en PLS constante, et alertmanager spamme des alertes fantômes. Je suis presque sûr que c un souci de high cardinality mais j'arrive pas à spotter la source exacte.

On a des milliers de pods k8s qui bougent tout le temps, et chacun expose des metrics. On a pas mal de labels sur les metrics custom aussi, genre user_id, session_id, request_id... c'est le carnage.


# Exemple de métrique qui explose
my_app_http_requests_total{pod="...", namespace="...", user_id="...", session_id="...", path="..."}

Comment je peux trouver les labels qui me tuent prometheus et le rendre stable sans tout casser ?

Commentaires

julie-parent

Membre depuis le 29/01/2020

yo. ah la high cardinality c'est le cancer de prometheus. la première chose à faire c'est un bon nettoyage via relabel_configs. tu dois virer tous les labels qui ont une cardinalité trop élevée, genre user_id, session_id, request_id... ces trucs là sont à logger, pas à scraper dans prometheus.

gilles-descamps

Membre depuis le 02/04/2019

exactement. utiliser le prometheus TSDB status page pour voir les series par target et les labels qui génèrent le plus de series. tu peux aussi query l'api prometheus pour ça :

/api/v1/status/tsdb
ça va te donner des infos sur les blocs et la cardinalité.

jeannine07

Membre depuis le 17/06/2021

et alertmanager qui spamme c'est typique si t'as des alerts basées sur des requêtes avec ces labels à haute cardinalité. l'évaluation prend trop de temps, ou alors les labels changent tellement vite que ça crée des instances d'alertes à la volée.

thomas-morel

Membre depuis le 23/03/2020

ok les relabel_configs c'est chaud à faire sans tout péter. et le tsdb status j'ai regardé c'est un peu un bordel avec tous les labels mais je vois bien que c'est nos métriques custom qui pèsent. je dois virer complètement user_id etc ? même si on en a besoin pour debug ?

julie-parent

Membre depuis le 29/01/2020

oui carrément virer ces labels si c'est pour du debug. prometheus n'est pas un système de log ou de tracing. si tu veux ces infos pour debug, mets les dans les logs de ton app ou un outil de tracing type jaeger/opentelemetry. prometheus c'est pour l'état global et les agrégats.

gilles-descamps

Membre depuis le 02/04/2019

un bon pattern c de garder des labels d'identification stables genre pod name, service name, namespace. et tous les trucs volatiles c dehors. tu peux faire des relabel_configs avec action: drop sur des regex qui matchent tes labels problématiques.

jeannine07

Membre depuis le 17/06/2021

aussi check tes exporter configs. y'a des exporters qui par défaut sont trop verbeux. le kube-state-metrics par exemple peut être configuré pour ne pas exposer certains labels inutiles pour ton contexte.

thomas-morel

Membre depuis le 23/03/2020

ça me fait chier de jeter user_id mais je vois le point. ok je vais tenter de virer ces labels sur nos métriques custom avec un relabel_config global. et je vais regarder le kube-state-metrics si on peut l'alléger.

julie-parent

Membre depuis le 29/01/2020

fais gaffe avec le relabel_config global si t'as beaucoup de jobs, c'est mieux de le faire par job ou par scrape_config. ouais et pour kube-state-metrics c'est --metric-labels-allowlist et --metric-annotations-allowlist

gilles-descamps

Membre depuis le 02/04/2019

et une fois que t'as cleané, regarde le cardinality_limit dans prometheus.yml pour éviter que ça reparte en vrille. ça met une limite sur les series actives. --tsdb.max-series= au démarrage aussi.

thomas-morel

Membre depuis le 23/03/2020

ok la liste est longue. je vais commencer par les relabel_configs sur les métriques user_id/session_id. on verra après pour kube-state-metrics et les limites. énorme merci pour toutes les infos, ça va bien m'aider à remettre cette usine à gaz en état.

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