Outils pour utilisateurs

Outils du site


app:rrdtool:ping-graph

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
app:rrdtool:ping-graph [2016/10/03 09:41] – créée yoannapp:rrdtool:ping-graph [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1
Ligne 81: Ligne 81:
 ===== Etape 2/3 Collecte périodique des données ===== ===== Etape 2/3 Collecte périodique des données =====
  
-===== Etape 3/3 Construction du graphique =====+Maintenant que la base est créée, il reste à la remplir. On peut écrire tout type de script à cet effet. Ici on propose un simple script bash qui ping un hôte collecte/filtre les données retournée par la commande et les insère dans la base. 
 + 
 +<code bash> 
 +#!/bin/bash 
 + 
 +# Définition des chemins 
 +command="/bin/ping -q -n -c 3" 
 +gawk="/usr/bin/gawk" 
 +rrdtool="/usr/bin/rrdtool" 
 +ping_target="192.9.200.9" 
 + 
 +### Data collector routine 
 +get_data() { 
 +        local output=$( $command $1 2>&1) 
 +        local method=$( echo "$output" | $gawk ' 
 +                BEGIN {pl=100; rtt=0.1} 
 +                /packets transmitted/
 +                        match($0, /([0-9]+)% packet loss/, datapl) 
 +                        pl=datapl[1] 
 +                } 
 +                /min\/avg\/max/
 +                        match($4, /(.*)\/(.*)\/(.*)\/(.*)/, datartt) 
 +                        rtt=datartt[2] 
 +                } 
 +                END {print pl ":" rtt} 
 +                ') 
 +        RETURN_DATA=$method 
 +
 + 
 +### script directory 
 +cd /home/yoann/developpement/tutos-rrdtool/ping/ 
 + 
 +### Collect the data 
 +get_data $ping_target 
 +#echo $RETURN_DATA 
 +### update the database 
 +$rrdtool update pingdb.rrd --template pl:rtt N:$RETURN_DATA 
 +</code> 
 + 
 +Le script change le répertoire courant pour entrer dans le répertoire de travail. 
 +La fonction get_data exécute le ping et gwak est utilisé pour extraire les données à l'aide d'expressions rationnelles. La dernière ligne met à jour la base avec les valeurs des variable pl et rtt séparées par le caractère ':'
 + 
 +<note> 
 +Avant d'utiliser le script, vérifier le chemin des utilitaires et du répertoire de travail. Le script utilise des chemins absolus car cron peut avoir un path plus restreint que l'utilisateur. 
 +</note> 
 + 
 +==== Création du job cron ==== 
 + 
 +La meilleure façon de collecter les données est d’exécuter un job cron toutes les minutes 
 + 
 +<code bash> 
 +crontab -e 
 +</code> 
 + 
 +<file> 
 +*                               /home/yoann/developpement/tutos-rrdtool/ping/update_rdd_database.sh 
 +</file> 
 + 
 +===== Étape 3/3 Construction du graphique ===== 
 + 
 +Après quelques minutes les premières insertions ont eu lieu, on peut tracer le graphique. Pour voir rapidement l’état de la base: 
 + 
 +<code bash> 
 +rrdtool info ./pingdb.rrd 
 +</code> 
 + 
 +Dans les valeurs retournées on notera notamment, le timestamp de la dernière mise à jour que l'on peut convertir en une chaîne date lisible via **date**, les dernières valeurs enregistrées pour nos variables: 
 + 
 +<file> 
 +filename = "./pingdb.rrd" 
 +rrd_version = "0003" 
 +step = 60 
 +last_update = 1475582403 
 + 
 +... 
 + 
 +ds[pl].last_ds = "0" 
 + 
 +... 
 + 
 +ds[rtt].last_ds = "0.234" 
 +</file> 
 + 
 +Pour tracer le graphique, le script ci-dessous est utilisé: 
 + 
 +<file bash mk_graph_daily.sh> 
 +#!/bin/bash 
 +
 +## change directory to the rrdtool script dir 
 +#cd /home/pi/tutos-rrdtool/ping/
    
 +## Graph for last 24 hours 
 +/usr/bin/rrdtool graph latency_graph.png \
 +-w 785 -h 120 -a PNG \
 +--slope-mode \
 +--start -86400 --end now \
 +--font DEFAULT:7: \
 +--title "ping default gateway" \
 +--watermark "`date`" \
 +--vertical-label "latency(ms)" \
 +--right-axis-label "latency(ms)" \
 +--lower-limit 0 \
 +--right-axis 1:0 \
 +--x-grid MINUTE:10:HOUR:1:MINUTE:120:0:%R \
 +--alt-y-grid --rigid \
 +DEF:roundtrip=pingdb.rrd:rtt:MAX \
 +DEF:packetloss=pingdb.rrd:pl:MAX \
 +CDEF:PLNone=packetloss,0,0,LIMIT,UN,UNKN,INF,IF \
 +CDEF:PL10=packetloss,1,10,LIMIT,UN,UNKN,INF,IF \
 +CDEF:PL25=packetloss,10,25,LIMIT,UN,UNKN,INF,IF \
 +CDEF:PL50=packetloss,25,50,LIMIT,UN,UNKN,INF,IF \
 +CDEF:PL100=packetloss,50,100,LIMIT,UN,UNKN,INF,IF \
 +LINE1:roundtrip#0000FF:"latency(ms)" \
 +GPRINT:roundtrip:LAST:"Cur\: %5.2lf" \
 +GPRINT:roundtrip:AVERAGE:"Avg\: %5.2lf" \
 +GPRINT:roundtrip:MAX:"Max\: %5.2lf" \
 +GPRINT:roundtrip:MIN:"Min\: %5.2lf\t\t\t" \
 +COMMENT:"pkt loss\:" \
 +AREA:PLNone#FFFFFF:"0%":STACK \
 +AREA:PL10#FFFF00:"1-10%":STACK \
 +AREA:PL25#FFCC00:"10-25%":STACK \
 +AREA:PL50#FF8000:"25-50%":STACK \
 +AREA:PL100#FF0000:"50-100%":STACK
 + 
 +## copy to the web directory
 +#cp latency_graph.png /var/www/htdocs/
 +</file>
 +
 +==== Détail des directives ====
 +
 +<code>
 +/usr/bin/rrdtool graph latency_graph.png \
 +</code>
 +
 +Invoque rrdtool est demande la création d'un graphique nommé latency_graph.png dans le répertoire courant. 
 +
 +<code>
 +-w 785 -h 120 -a PNG \
 +</code>
 +
 +Graphique de 785 pixels de large pour 120 de haut. Image au format PNG. Les dimensions (hauteur et largeur) concernent le graphique ce ne sont pas celles de l'image entière.
 +
 +<code>
 +--slope-mode \
 +</code>
 +
 +Lissage des courbes du graphique: antialiasing et courbure des lignes.
 +
 +<code>
 + --start -3600 --end now \
 +</code>
 +Définit l'intervalle de temps à tracer: de 3600 secondes antérieures à maintenant.
 +
 +<code>
 +--font DEFAULT:7: \
 +</code>
 +
 +Fonte par défaut pour tous les textes du graphique.
 +
 +<code>
 +--title "ping Sophos" \
 +</code>
 +
 +<code>
 +--lower-limit 0 \
 +</code>
 +
 +Définit les valeurs sur l'axe Y pour augmenter la lisibilité. La directive --lower-limit force 0 les étiquettes de l'axe car les valeurs de nos variables ne peuvent pas être négatives.
 +
 +<code>
 +--right-axis 1:0 \
 +</code>
 +
 +Rapport entre l'axe parent (à gauche) et l'axe enfant à droite. Même échelle dans notre cas, donc le rapport est définit à 1. Le dernier 0 permet de spécifier une valeur sur cet 
 +
 +<code>
 +--x-grid MINUTE:10:HOUR:1:MINUTE:120:0:%R \
 +</code>
 +
 +Redéfinit l'échelle de l'axe X et place les labels sous le graphique.
 +  * MINUTE:10 définit la distance en unités entre les repères verticaux gris
 +  * HOUR:1 définit la distance en unités entre les repères verticaux rouges
 +  * MINUTE:120 les labels sont visibles toutes les 120 unités.
 +  * 0:%R espacement par défaut
 +
 +<code>
 +DEF:roundtrip=pingdb.rrd:rtt:MAX \
 +DEF:packetloss=pingdb.rrd:pl:MAX \
 +</code>
 +
 +**DEF**(define), permet de définir une variable provenant de la base de données afin qu'elle puisse être tracée sur le graphique. Ici on définit 2 variables **roundtrip** et **packetloss**. Les variables peuvent être récupérées dans différentes bases et subir des traitements.
 +  * **DEF** directive de définition
 +  * roundtrip=roundtrip=pingdb.rrd:rtt assignation des valeurs de rrt dans la base pingdb.rrd à la variable rountrip
 +  * MAX type de la variable tel qu'il a été déclaré dans la base. 
 +
 +
 +<code>
 +LINE1:roundtrip#0000FF:"latency(ms)" \
 +</code>
 +
 +Création d'une ligne et de la légende associée
 +  * **LINE1** tracer une ligne le suffixe 1 permet de spécifier l'épaisseur. Si la ligne générée semble discontinue a cause du lissage augmenter la valeur du suffixe.
 +  * **roundtrip#0000FF** utilise la valeur de la variable roundtrip avec la couleur bleue (valeur RVB #RRVVBB)
 +  * **"latency(ms)** label associé à la ligne.
 +
 +
 +
 +
 ===== Références ===== ===== Références =====
  
   * https://calomel.org/rrdtool.html   * https://calomel.org/rrdtool.html
app/rrdtool/ping-graph.1475487715.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)