Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Scroll Ignore
scroll-viewporttrue
scroll-pdftrue
scroll-officetrue
scroll-chmtrue
scroll-docbooktrue
scroll-eclipsehelptrue
scroll-epubtrue
scroll-htmlfalse
Panel
titleSommaire

Table of Contents
stylenone

Les précisions de stockages

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

Définition des précisions de stockage

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:

  • pattern: une règle d'expression régulière d'application du bloc.
    • Attention: vu que les métriques sont stockés sous forme de uuid dans Graphite, seuls les noms de métriques seront utilisables ici, pas les noms d'hôtes ou de checks
  • priority: une priorité d'application du bloc, plus la valeur est haute, moins il est prioritaire
  • retentions: une règle de rétention: suite de couple précision:durée, qui donne la précision d'un point, et la durée de stockage pour cette précision.

Précision livrée par défaut à partir de la v02.06.02


Warning

Lors de la définition d'une règle de rétention, le temps entre les points d'une période doit impérativement être un multiple du temps entre les point de la période suivante, sinon la règle ne sera pas applicable et sera ignoré.

Exemple :

  • J'ai un point toutes les 2 minutes pendant 1h puis un point toutes les 15 minutes pendant 1 semaine. Ce n'est pas possible, car 15 minutes n'est pas un multiple de 2 minutes.
  • Il faudra alors changer pour prendre 1 points par minutes sur la première période ou 1 point toutes les 10 minutes sur la deuxième période par exemple.
  • Il faut également faire attention à ce que toutes les règles de la rétention respectent cette condition.

Précision livrée par défaut à partir de la v02.06.02

La précision livrée par défaut depuis la 02.06.02 est la suivante:

Code Block
themeEmacs
[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:

  • un point toutes les 60s, sur 7 jours
  • un point toutes les 5min, sur 30 jours
  • un point par 30min, sur 3 mois
  • un point par jour, sur 1 an et demi

A noter qu'un point coûte 12 octets:

  • 4 pour la date ( taille d'un int32 )
  • 8 pour la valeur ( taille d'un double64 )


Ici un fichier créé avec cette rétention aura donc la taille:

  • 60s:7d:
    • nombres de points: 7 j * 86400s / 60s = 10080 points
    • taille= 12o * 10080 = 120ko
  • 300s:30d:
    • nombre de points : 30 j*86400 / 300s = 8640 points
    • taille = 12o * 8640 = 101Ko
  • 1800s:

La précision livrée par défaut depuis la 02.06.02 est la suivante:

Code Block
themeEmacs
[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:

  • un point toutes les 60s, sur 7 jours
  • un point toutes les 5min, sur 30 jours
  • un point par 30min, sur 3 mois
  • un point par jour, sur 1 an et demi

A noter qu'un point coûte 12 octets:

  • 4 pour la date ( taille d'un int32 )
  • 8 pour la valeur ( taille d'un double64 )
Ici un fichier créé avec cette rétention aura donc la taille:
  • 60s:7d:
    • nombres de points: 7 j * 86400s / 60s = 10080 points
    • taille= 12o * 10080 = 120ko
  • 300s:30d:
    • nombre de points : 30 j*86400 / 300s = 8640 points
    • taille = 12o * 8640 = 101Ko
  • 1800s:180d:
    • nombre de points : 180 j * 86400 / 1800s = 8640points
    • taille = 12o * 8640 = 101Ko
  • 86400s:547d
    • nombre de points : 547 j * 86400 / 86400s = 547 points
    • taille = 12o * 547 = 6Ko


Soit une Taille totale = 328Ko, par métrique pressente sur le disque (le fichier .wsp).

Info
titleLa précision est définie à la création d'un métrique

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.

Précision livrée par défaut AVANT la v02.06.02

La précision livrée par défaut avant la 02.06.02 était la suivante:

Code Block
themeEmacs
[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:

  • un point toutes les 60s, sur 7 jours
  • un point toutes les 5min, sur 30 jours
  • un point par heure, sur 6 mois
  • un point par jour, sur 2 ans

A noter qu'un point coûte 12 octets:

  • 4 pour la date ( taille d'un int32 )
  • 8 pour la valeur ( taille d'un double64 )


Ici un fichier créé avec cette rétention aura donc la taille:

  • 60s:7d:
    • nombres de points: 7 j * 86400s / 60s = 10080 points
    • taille= 12o * 10080 = 120ko
  • 300s:30d:
    • nombre de points : 30 j*86400 / 300s = 8640 points
    • taille = 12o * 8640 = 103Ko
  • 3600s:180d:
    • nombre de points : 180 j * 86400 / 3600s = 4320points
    • taille = 12o * 4320 = 52Ko
  • 86400s:650d
    • nombre de points : 650 j * 86400 / 86400s = 650 points
    • taille = 12o * 650 = 8Ko


Soit une Taille totale = 283Ko, par métrique pressente sur le disque (le fichier .wsp).

Info
titleLa précision est définie à la création d'un métrique

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.

Info
titleLa précision n'est pas modifiée lors d'une mise à jour

Attention: il est important de noter que la précision n'est pas modifiée lors d'une mise à jour de Shinken Enterprise.

Précision spécifique à un hôte

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

Code Block
themeEmacs
[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


Warning

Le pattern doit être l'ID créé par Shinken

Warning

Lors de la définition d'une règle de rétention, le temps entre les points d'une période doit impérativement être un multiple du temps entre les point de la période suivante, sinon la règle ne sera pas applicable et sera ignoré.

Exemple :

  • J'ai un point toutes les 2 minutes pendant 1h puis un point toutes les 15 minutes pendant 1 semaine. Ce n'est pas possible, car 15 minutes n'est pas un multiple de 2 minutes.
  • Il faudra alors changer pour prendre 1 points par minutes sur la première période ou 1 point toutes les 10 minutes sur la deuxième période par exemple.
  • Il faut également faire attention à ce que toutes les règles de la rétention respectent cette condition.


    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"

    Info
    titleLa précision est définie à la création d'un métrique

    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 :

    • Vous pouvez supprimer le dossier/fichier contenant les métriques pour qu'ils se regénèrent avec le nouveau paramètre dans /opt/graphite/storage/whisper/ID HOTE/ID CHECK/NOM DU METRIQUE.wsp
    • Vous pouvez utiliser le script suivant :
      • Pour tous les checks d'un hôte :
        • /usr/bin/whisper-resize.py /opt/graphite/storage/whisper/ID HOTE/*/*.wsp 1m:1h,5m:2h,1h:30d,1d:1y,8640m:3y;
      • Pour tous les métriques d'un check :
        • /usr/bin/whisper-resize.py /opt/graphite/storage/whisper/ID HOTE/ID CHECK/*.wsp 1m:1h,5m:2h,1h:30d,1d:1y,8640m:3y;
      • Pour un métrique spécifiquement :
        • /usr/bin/whisper-resize.py /opt/graphite/storage/whisper/ID HOTE/ID CHECK/NOM DU METRIQUE.wsp 1m:1h,5m:2h,1h:30d,1d:1y,8640m:3y;


    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 :

    Code Block
    themeEmacs
    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)

    Modifier la précision sur tous les éléments d'une installation de Shinken en cours de fonctionnement

    Script de migration massif

    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 :

    Code Block
    themeEmacs
    service 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 :

    Code Block
    themeEmacs
    #!/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
    Warning

    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

    Code Block
    themeEmacs
    chmod +x mass_modif_retention_graphite.sh


    Et le lancer en mettant une faible priorité tant au CPU qu'à la consommation disque:

    Code Block
    themeEmacs
    ionice nice ./mass_modif_retention_graphite.sh

    Suppression des anciennes données après migration

    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 :

    Code Block
    themeEmacs
    /usr/bin/whisper-resize.py $FOLDER/$i $RETENTION;

    Par cette ligne :

    Code Block
    themeEmacs
    /usr/bin/whisper-resize.py $FOLDER/$i $RETENTION --nobackup;

    Visualisation des données avec la nouvelle précision

    Une fois la conversion terminé vous pouvez voir le changement directement dans l'interface de visualisation de Shinken

    • Les courbes seront lissés pour les anciennes données.
    • En fonction de la rétention choisi, Graphite retourne la meilleure précision qu'il a pour mais uniquement pour l'ensemble des données demandées par l'utilisateur.
      • Par exemple, si vous avez choisi cette précision : 5m:90d,30m:180d,1h:3y et vous souhaitez voir les métrique depuis Shinken sur 1 année.
        • L'écart entre 2 points est de 24h sur toute la période
        • Même sur les 3 et 6 derniers mois, car pour avoir tous les points, Graphite a du prendre la dernière précision, soit 1h sur 3ans.
    Panel

    • Si vous souhaitez afficher une période précise de précision (comme ici 3 mois) mais qui n'est pas listée par l'interface de Shiunken, il faut pour l'instant l'afficher dans Grafana - v8.3.2 à la place, qui permet de choisir pour chaque dashboard la période demandée.


    En cas d'erreur

    Erreur dans le format du fichier storage-schemas.conf

    Si vous avez cette erreur au redémarrage de carbon-cache c'est que la configuration d'un fichier n'est pas bonne :

    Code Block
    themeEmacs
    service 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

    Erreur dans le format des précisions de rétention


    Si vous avez cette erreur, ça signifie que votre définition de précision n'est pas bonne :

    Code Block
    themeEmacs
    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