Salut ! C'est classique ça. C'est quoi la taille moyenne de tes blocs au niveau raw data ? Et tu as combien de séries par block ?
T'as regardé tes options de compaction comme `compaction.concurrency` et `compaction.retention.resolution-raw` ? Des fois baisser la concu aide un peu.
Les blocs raw sont énormes, genre 2-3Go par bloc pour des périodes d'une journée. Beaucoup de séries actives. `compaction.concurrency` est à 2. `retention.resolution-raw` est à 2 ans.
question bête mais `compaction.consistency-delay` est à combien ? si c'est trop bas ça peut tenter de compacter des blocs encore en écriture ou pas complètement uploadés.
Pour 2-3Go par bloc et autant de séries, 2 de concurrency c'est ptete déjà trop pour des machines modestes. Tu pourrais essayer de le mettre à 1, ou de passer sur des instances plus grosses avec plus de CPU et RAM.
La downsampling est activée ? Si oui, à quelles résolutions ? Et est-ce que les problèmes sont plus sur le raw ou sur les résolutions downsamplées ?
Oui downsampling activée pour 5m et 1h. Le problème est clairement sur le raw, quand il aggrège des blocs d'une journée en blocs d'une semaine/mois. `consistency-delay` est à 30m, la valeur par défaut.
vérifie si tu n'as pas des blocs corrompus dans ton bucket s3. `thanos tools bucket verify` peut te donner des indices. un bloc corrompu peut faire planter le compacteur ou le faire ramer indéfiniment.
J'ai lancé un `bucket verify` hier, rien trouvé. Tout est clean côté S3. Les logs du compacteur montrent juste qu'il bosse dur mais il met des heures pour un seul bloc.
C'est ptete le nombre de fichiers qu'il doit manipuler. Essaye d'ajuster `compaction.block-sync-concurrency`. Ça gère le nombre de blocs qui sont téléchargés/uploadés simultanément de S3.
Autre approche : as-tu pensé à séparer les compacteurs ? Un pour le raw, qui tourne sur une grosse machine dédiée, et un ou plusieurs pour les résolutions downsamplées. Ça isole le problème.
Est-ce que ton S3 bucket n'est pas throttlé ? Regarde les métriques S3 Request Metrics pour voir si tu as des erreurs ou des latences élevées sur les GET/PUT.
S3 est niquel on a pas de throttling. La latence est bonne. Je vais essayer de baisser `block-sync-concurrency` et `compaction.concurrency` à 1 pour voir.
Si tu as beaucoup de séries, ça peut aussi venir de la cardinalité élevée de certaines métriques. Le compacteur doit manipuler beaucoup plus de données. Une purge de métriques inutiles ou avec trop de labels pourrait aider.
On a déjà fait le ménage sur la cardinalité en amont. En baissant la concu et en donnant plus de RAM/CPU au compacteur ça aide un peu mais c'est pas encore l'idéal. Il reste quand même très gourmand.
Pour les très vieux blocs tu pourrais même avoir une job de compacteur qui tourne moins souvent, genre une fois par mois, sur une instance éphémère super beefy juste pour ça. C'est du FinOps mais ça aide.
L'idée du job éphémère est pas mal pour les vieux trucs. Avec la baisse de concu et une plus grosse machine ça stabilise les choses. Le coût est plus élevé mais au moins ça finit la compaction. Thx à tous pour les idées !
Vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
jean25
Membre depuis le 04/04/2019
actif
Hello les cost killers ! on a un Thanos compact qui tourne et franchement il est en train de tuer nos serveurs de compactions. dès qu'il commence à bosser sur des vieux blocs (plusieurs mois) le cpu monte à 100% et la ram prend tout. on est sur la 0.29.0 de thanos. des idées pour optimiser ça ?