Graphite, comme toute les bases de métrologie, stocke ses données avec diverses précisions: plus les données sont éloignées, moins elles sont précises, et ce afin de gagner en performance et surtout espace disque.
A noter que chaque métrique (par exemple cpu_idle sur le check Cpu de l'hôte serveur-1) aura sont propre fichier .wsp présent dans /opt/graphite/storage/whisper (dans un sous répertoire HOST-UUID/CHECK-UUID).
La définition des différentes précisions se font via le fichier /opt/graphite/conf/storage-schemas.conf.
Il va s'organiser en bloc. Chacun va avoir:
La précision livrée par défaut depuis la 02.06.02 est la suivante:
[ma_precision] pattern = .* retentions = 60s:7d,300s:30d,1800s:180d,86400s:547d |
Va appliquer pour tous les métriques la règle de stockage suivante:
A noter qu'un point coûte 12 octets:
Ici un fichier créé avec cette rétention aura donc la taille:
Soit une Taille totale = 328Ko, par métrique pressente sur le disque (le fichier .wsp).
Attention: il est important de noter que la précision d'un fichier de métrique est prise en compte à la création du fichier. Ainsi, un changement de la configuration de Graphite ne va pas redimensionner tous les métriques présents, mais seulement les nouveaux fichiers créés. |
La précision livrée par défaut avant la 02.06.02 était la suivante:
[ma_precision] pattern = .* retentions = 60s:7d,300s:30d,3600s:180d,86400s:650d |
Va appliquer pour tous les métriques la règle de stockage suivante:
A noter qu'un point coûte 12 octets:
Ici un fichier créé avec cette rétention aura donc la taille:
Soit une Taille totale = 283Ko, par métrique pressente sur le disque (le fichier .wsp).
Attention: il est important de noter que la précision d'un fichier de métrique est prise en compte à la création du fichier. Ainsi, un changement de la configuration de Graphite ne va pas redimensionner tous les métriques présents, mais seulement les nouveaux fichiers créés. |
Attention: il est important de noter que la précision n'est pas modifiée lors d'une mise à jour de Shinken Enterprise. |
Il est possible de modifier la précision spécifiquement à un ou plusieurs hôtes.
Il faut ajouter un bloc dans le fichier /opt/graphite/conf/storage-schemas.conf
[specifique] pattern = b6f742865f074584a605d31116833f3d.*.* retentions = 1m:1h,5m:2h,1h:30d,1d:1y,8640m:3y |
Le paramètre pattern est découpé comme suit : ID HOTE.ID CHECK.NOM DU METRIQUE
Le pattern doit être l'ID créé par Shinken |
Dans notre exemple, tous les checks et tous les métriques de checks de l'hôte "shinken" (ID : b6f742865f074584a605d31116833f3d) obtiennent la rétention "specifique"
Attention: il est important de noter que la précision d'un fichier de métrique est prise en compte à la création du fichier ou un lancement de la commande whisper-resize.py Ainsi, un changement de la configuration de Graphite ne va pas redimensionner tous les métriques présents, mais seulement les nouveaux fichiers créés. |
Pour la prise en compte du nouveau paramètre :
Une fois le fichier créé ou regénéré, pour avoir confirmation de la bonne prise en compte de ce nouveau bloc, dans le fichier /opt/graphite/storage/log/carbon-cache/carbon-cache-a/creates.log vous aurez les lignes suivantes :
29/06/2021 16:41:44 :: new metric b6f742865f074584a605d31116833f3d.92182da3c28c5193c0e36b4a68b5e896.connexion_time matched schema specifique 29/06/2021 16:41:44 :: new metric b6f742865f074584a605d31116833f3d.92182da3c28c5193c0e36b4a68b5e896.connexion_time matched aggregation schema default_average 29/06/2021 16:41:44 :: creating database file /opt/graphite/storage/whisper/b6f742865f074584a605d31116833f3d/92182da3c28c5193c0e36b4a68b5e896/connexion_time.wsp (archive=[(60, 60), (300, 24), (3600, 720), (86400, 365), (518400, 182)] xff=0.01 agg=average) |
Si vous utilisez Shinken depuis quelques temps et que vous souhaitez modifier la précision des métriques sans perdre les anciennes valeurs, vous pouvez utiliser le script whisper-resize.py
Dans un premier temps, modifier à votre convenance le paramètre retentions du bloc "everything_1min" dans le fichier /opt/graphite/conf/storage-schemas.conf
Pour que le paramètre soit pris en compte, il faut redémarrer carbon-cache :
/etc/init.d/carbon-cache restart |
Une fois carbon-cache redémarré il faut créé le script mass_modif_retention_graphite.sh qui va modifier tous les fichiers .wsp que vous avez :
#!/bin/bash
FOLDER="/opt/graphite/storage/whisper"
RETENTION="XXXXXX"
for i in $(find $FOLDER/$1 -iname "*.wsp"); do
if [ -a $i ];
then
/usr/bin/whisper-resize.py $FOLDER/$i $RETENTION;
/usr/bin/chown apache:apache $FOLDER/$i
fi;
done |
Il faut remplacer la variable RETENTION par celle que vous avez mis dans le fichier storage-schemas.conf avant exécution du script |
Rendre le script exécutable
chmod +x mass_modif_retention_graphite.sh |
Et le lancer en mettant une faible priorité tant au CPU qu'à la consommation disque:
ionice nice ./mass_modif_retention_graphite.sh |
Le script va créer pour chaque fichier converti un fichier .bak qui est une sauvegarde de l'ancien fichier, ce qui signifie que la taille nécessaire à cette conversion va nécessiter beaucoup d'espace disque. Vous pouvez annuler la création de ce fichier en ajoutant le paramètre "–nobackup" au script. L'ancien fichier sera supprimé uniquement en cas de succès de la conversion.
Dans le script, remplacer cette ligne :
/usr/bin/whisper-resize.py $FOLDER/$i $RETENTION; |
Par cette ligne :
/usr/bin/whisper-resize.py $FOLDER/$i $RETENTION --nobackup; |
Une fois la conversion terminé vous pouvez voir le changement directement dans l'interface de visualisation de Shinken
Si vous avez cette erreur au redémarrage de carbon-cache c'est que la configuration d'un fichier n'est pas bonne :
/etc/init.d/carbon-cache restart
Stopping carbon-cache... [FAILED]
Starting carbon-cache...Traceback (most recent call last):
File "/opt/graphite/bin/carbon-cache.py", line 30, in <module>
run_twistd_plugin(__file__)
File "/opt/graphite/lib/carbon/util.py", line 92, in run_twistd_plugin
runApp(config)
File "/usr/lib64/python2.7/site-packages/twisted/scripts/twistd.py", line 23, in runApp
_SomeApplicationRunner(config).run()
File "/usr/lib64/python2.7/site-packages/twisted/application/app.py", line 411, in run
self.application = self.createOrGetApplication()
File "/usr/lib64/python2.7/site-packages/twisted/application/app.py", line 489, in createOrGetApplication
ser = plg.makeService(self.config.subOptions)
File "/opt/graphite/lib/twisted/plugins/carbon_cache_plugin.py", line 21, in makeService
return service.createCacheService(options)
File "/opt/graphite/lib/carbon/service.py", line 127, in createCacheService
from carbon.writer import WriterService
File "/opt/graphite/lib/carbon/writer.py", line 34, in <module>
schemas = loadStorageSchemas()
File "/opt/graphite/lib/carbon/storage.py", line 139, in loadStorageSchemas
except InvalidConfiguration, e:
NameError: global name 'InvalidConfiguration' is not defined |
Si vous avez cette erreur, ça signifie que votre définition de précision n'est pas bonne :
Traceback (most recent call last):
File "/usr/bin/whisper-resize.py", line 45, in <module>
for retentionDef in args[1:]]
File "/usr/lib/python2.7/site-packages/whisper.py", line 88, in parseRetentionDef
(precision, points) = retentionDef.strip().split(':')
ValueError: too many values to unpack |