Le blog tech de Nicolas Steinmetz (Time Series, IoT, Web, Ops, Data)
CérénIT a été contacté pour mener l’audit d’une instance InfluxDB 1.8 OSS utilisée dans un projet IoT lié à l’énergie. L’audit avait plusieurs objectifs :
De l’audit, on notera que :
Avant d’aller plus loin, précisons un peu cette notion de shard et les notions liées pour bien appréhender le sujet :
Nous pouvons représenter la logique instance > database > shard(s) > tsm files de la façon suivante :
Par défaut, InfluxDB applique les shard duration suivantes en fonction des retention policy :
Retention policy | Default shard duration |
---|---|
<= 2 days | 1 hour |
<= 6 months | 1 day |
> 6 months | 7 days |
Source : InfluxData - Shard group duration
Dès lors, une base de données avec une retention policy infinie aura une shard duration de 7 jours. Ainsi, si cette base contient 10 ans d’hisorique (soit 10 * 52 semaines = 520 semaines), elle contiendra 520 shards.
Du coup, InfluxData recommande les valeurs suivantes (au moins en 1.x ; on peut supposer que cela reste valable en 2.x):
Retention policy | Default shard duration |
---|---|
<= 1 day | 6 hour |
<= 7 days | 1 day |
<= 3 months | 7 days |
> 3 months | 30 days |
infinite | >= 52 weeks |
Source : Shard group duration recommendations
Selon cette perspective, la base de données avec 10 ans d’historique ne contiendra plus 520 shards mais 10 shards en prenant une shard duration de 52 semaines. L’écart entre la valeur par défaut et la valeur recommandée est plus que significatif.
Pour bien dimensionner vos shard duration, InfluxData recommande :
Pourquoi nous en arrivons là ? C’est assez simple :
Dès lors, un nombre important de shards va augmenter d’autant plus la consommation mémoire et le nombre de fichiers ouverts pour manipuler les données associées.
Si on recoupe ces données avec les recommendations pour InfluxDB Entreprise, à savoir 30/40 bases par data nodes et 1.000 shards par node, le bon réglage des retention policy et des shard durations n’est pas à négliger pour la bonne santé de votre instance.
En outre, s’il est possible de mettre à jour la retention policy et la shard duration en 1.x, cela ne s’appliquera que pour les nouveaux shards. Les anciens shards ne seront pas “restructurés” en fonction des nouvelles valeurs.
Pour mettre à jour les shards existants, il faut :
Ultime question, la version 2.x OSS change-t-elle la donne sur le sujet :
report
et report-disk
.En conclusion, ce qu’il faut retenir :
Mise à jour : le client reporte les gains suivants post restructuration des bases pour le serveur de recette et production :
podman machine
est supporté nativement sur Linux et MacOS/Intel et en remote client sur Windows/Intel.docker compose xxx
). Pour Windows & OSX, il est fourni avec Docker Desktop.tar
de NodeJS directement (ou indirectement), il est judicieux de mettre à jour votre version de npm
et node
et de vérifier vos dépendances.first()
et last()
ainsi que les nouvelles fonctions timestamp_floor()
et timestamp_ceil()
pour gérer les arrondis inférieurs/supérieurs. Enfin, l’API HTTP accepte des paramètres liés au “Out Of Order”.kubernetes_manifest
permet de définir ses propres manifests et donc permet d’utiliser des CRD non disponibles dans le provider officiel. Plus pratique que de générer les manifests via des templates et de faire du kubectl apply
par dessus.time_bucket_ng
qui permet de faire de nouvelles aggrégations et d’avoir prochainement un support des timezones. La seconde fonctionnalité expérimentale porte sur la capacité à bouger de la donnée entre plusieurs nodes en mode cluster.exec
.libssh-dev(el)
suivant votre distribution pour pouvoir installer ansible-pylibssh
. Mes premiers essais ne notent pas une amélioration sensible des performances… à voir sur d’autres machines et dans la durée…sudoers
est présent sur le système (en général: /etc/sudoers
). Les versions 1.8.2 à 1.8.31 et 1.9.0 à 1.9.5-p1 sont impactées, il faut passer en version 1.9.5-p2.