Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| app:rrdtool:ping-graph [2016/10/03 09:41] – créée yoann | app: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/ |
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | |||
| + | # Définition des chemins | ||
| + | command="/ | ||
| + | gawk="/ | ||
| + | rrdtool="/ | ||
| + | ping_target=" | ||
| + | |||
| + | ### Data collector routine | ||
| + | get_data() { | ||
| + | local output=$( $command $1 2>& | ||
| + | local method=$( echo " | ||
| + | BEGIN {pl=100; rtt=0.1} | ||
| + | /packets transmitted/ | ||
| + | match($0, /([0-9]+)% packet loss/, datapl) | ||
| + | pl=datapl[1] | ||
| + | } | ||
| + | / | ||
| + | match($4, / | ||
| + | rtt=datartt[2] | ||
| + | } | ||
| + | END {print pl ":" | ||
| + | ') | ||
| + | RETURN_DATA=$method | ||
| + | } | ||
| + | |||
| + | ### script directory | ||
| + | cd / | ||
| + | |||
| + | ### Collect the data | ||
| + | get_data $ping_target | ||
| + | #echo $RETURN_DATA | ||
| + | ### update the database | ||
| + | $rrdtool update pingdb.rrd --template pl:rtt N: | ||
| + | </ | ||
| + | |||
| + | 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' | ||
| + | |||
| + | < | ||
| + | Avant d' | ||
| + | </ | ||
| + | |||
| + | ==== 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 | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | * | ||
| + | </ | ||
| + | |||
| + | ===== Étape | ||
| + | |||
| + | 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 ./ | ||
| + | </ | ||
| + | |||
| + | 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: | ||
| + | |||
| + | < | ||
| + | filename = " | ||
| + | rrd_version = " | ||
| + | step = 60 | ||
| + | last_update = 1475582403 | ||
| + | |||
| + | ... | ||
| + | |||
| + | ds[pl].last_ds = " | ||
| + | |||
| + | ... | ||
| + | |||
| + | ds[rtt].last_ds = " | ||
| + | </ | ||
| + | |||
| + | Pour tracer le graphique, le script ci-dessous est utilisé: | ||
| + | |||
| + | <file bash mk_graph_daily.sh> | ||
| + | # | ||
| + | # | ||
| + | ## change directory to the rrdtool script dir | ||
| + | #cd / | ||
| + | ## Graph for last 24 hours | ||
| + | / | ||
| + | -w 785 -h 120 -a PNG \ | ||
| + | --slope-mode \ | ||
| + | --start -86400 --end now \ | ||
| + | --font DEFAULT:7: \ | ||
| + | --title "ping default gateway" | ||
| + | --watermark " | ||
| + | --vertical-label " | ||
| + | --right-axis-label " | ||
| + | --lower-limit 0 \ | ||
| + | --right-axis 1:0 \ | ||
| + | --x-grid MINUTE: | ||
| + | --alt-y-grid --rigid \ | ||
| + | DEF: | ||
| + | DEF: | ||
| + | CDEF: | ||
| + | CDEF: | ||
| + | CDEF: | ||
| + | CDEF: | ||
| + | CDEF: | ||
| + | LINE1: | ||
| + | GPRINT: | ||
| + | GPRINT: | ||
| + | GPRINT: | ||
| + | GPRINT: | ||
| + | COMMENT:" | ||
| + | AREA: | ||
| + | AREA: | ||
| + | AREA: | ||
| + | AREA: | ||
| + | AREA: | ||
| + | |||
| + | ## copy to the web directory | ||
| + | #cp latency_graph.png / | ||
| + | </ | ||
| + | |||
| + | ==== Détail des directives ==== | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Invoque rrdtool est demande la création d'un graphique nommé latency_graph.png dans le répertoire courant. | ||
| + | |||
| + | < | ||
| + | -w 785 -h 120 -a PNG \ | ||
| + | </ | ||
| + | |||
| + | 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' | ||
| + | |||
| + | < | ||
| + | --slope-mode \ | ||
| + | </ | ||
| + | |||
| + | Lissage des courbes du graphique: antialiasing et courbure des lignes. | ||
| + | |||
| + | < | ||
| + | | ||
| + | </ | ||
| + | Définit l' | ||
| + | |||
| + | < | ||
| + | --font DEFAULT:7: \ | ||
| + | </ | ||
| + | |||
| + | Fonte par défaut pour tous les textes du graphique. | ||
| + | |||
| + | < | ||
| + | --title "ping Sophos" | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | --lower-limit 0 \ | ||
| + | </ | ||
| + | |||
| + | 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. | ||
| + | |||
| + | < | ||
| + | --right-axis 1:0 \ | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| + | |||
| + | < | ||
| + | --x-grid MINUTE: | ||
| + | </ | ||
| + | |||
| + | Redéfinit l' | ||
| + | * 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 | ||
| + | |||
| + | < | ||
| + | DEF: | ||
| + | DEF: | ||
| + | </ | ||
| + | |||
| + | **DEF**(define), | ||
| + | * **DEF** directive de définition | ||
| + | * roundtrip=roundtrip=pingdb.rrd: | ||
| + | * MAX type de la variable tel qu'il a été déclaré dans la base. | ||
| + | |||
| + | |||
| + | < | ||
| + | LINE1: | ||
| + | </ | ||
| + | |||
| + | Création d'une ligne et de la légende associée | ||
| + | * **LINE1** tracer une ligne le suffixe 1 permet de spécifier l' | ||
| + | * **roundtrip# | ||
| + | * **" | ||
| + | |||
| + | |||
| + | |||
| + | |||
| ===== Références ===== | ===== Références ===== | ||
| * https:// | * https:// | ||