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

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
app:rrdtool:ping-graph [2016/10/03 11:52] yoannapp:rrdtool:ping-graph [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1
Ligne 84: Ligne 84:
  
 <code bash> <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> </code>
  
Ligne 93: Ligne 126:
 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. 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> </note>
-===== Etape 3/3 Construction du graphique =====+ 
 +==== 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.1475495529.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)