Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
rrdtool [Le 02/11/2013, 21:32] – [Exemple] 88.127.245.199 | rrdtool [Le 14/05/2014, 08:21] (Version actuelle) – [RRDTool : base de données tournante dédié à la supervision] 88.172.197.96 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | |||
+ | |||
+ | ====== RRDTool | ||
+ | |||
+ | RRDTool est un outil qui permet de faire des bases de données (Round-Robin Database). Il permet aussi de faire des graphes. | ||
+ | |||
+ | |||
+ | ===== Exemple ===== | ||
+ | |||
+ | Dans ces bases de données on enregistre des informations telles que l' | ||
+ | |||
+ | Nous allons pouvoir faire plusieurs choses avec les données : | ||
+ | |||
+ | - Affichage des données en fonction du temps (par exemple un graphe pour le jour en cours, pour la semaine, pour le mois et l' | ||
+ | |||
+ | - Si la radio a plusieurs canaux différents par exemple une radio avec de la musique uniquement et l' | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | Il suffit d' | ||
+ | |||
+ | Maintenant nous allons attaquer les choses sérieuses ! | ||
+ | |||
+ | ===== Premiere base RRDTool ===== | ||
+ | |||
+ | Cet exemple permet de créer une base de donnée RRD Tool pour deux radios. | ||
+ | |||
+ | Pour ce qui est de l' | ||
+ | |||
+ | Note pour connaitre le timestamp plusieurs solutions : | ||
+ | |||
+ | * En ligne de commande | ||
+ | |||
+ | $ date +%s | ||
+ | |||
+ | * Sinon un petit plugin dans firefox qui se nomme : TimeStamp Converter est très pratique ;) | ||
+ | |||
+ | ===== Création de notre base RRDTool ===== | ||
+ | |||
+ | Nous allons créer une base RRD pour une Radio avec 2 flux : Rock et Alternative | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Reprenons ligne par ligne le fonctionnement : | ||
+ | * rrdtool create -> | ||
+ | * radios.rrd -> | ||
+ | * --start 1297810800 -> indique la date de départ de ma base de donnée (en Timestamp) ici le 16 Février 2011 à 0h00. | ||
+ | |||
+ | La seconde et la 3eme ligne sont des DS (DATA SOURCE) sources de données en Français. | ||
+ | |||
+ | * DS: | ||
+ | |||
+ | Explications : | ||
+ | |||
+ | * DS: | ||
+ | * ds-name -> | ||
+ | * GAUGE | COUNTER | DERIVE | ABSOLUTE -> DST (DATA SOURCE TYPE) | ||
+ | * COUNTER -> | ||
+ | * GAUGE -> | ||
+ | * DERIVE -> | ||
+ | * ABSOLUTE -> | ||
+ | |||
+ | Pour plus d' | ||
+ | |||
+ | |||
+ | |||
+ | Passons à la 4eme et 5eme ligne qui sont les Round Robin Archives. | ||
+ | |||
+ | Une archive se compose d'un certain nombre de valeurs de données ou des statistiques pour chacune des sources de données définies (DS) et est définie par une ligne RRA. | ||
+ | |||
+ | * RRA:AVERAGE | MIN | MAX | LAST: | ||
+ | * RRA: | ||
+ | * AVERAGE -> | ||
+ | * MIN -> | ||
+ | * MAX -> | ||
+ | * LAST -> | ||
+ | * 0.5 -> | ||
+ | * 1 -> nombre de valeur pour faire la moyenne (ici 1 donc aucune moyenne) | ||
+ | * 24 -> nombre d' | ||
+ | |||
+ | Idem pour la ligne suivante : | ||
+ | |||
+ | * 0.5 -> | ||
+ | * 6 -> nombre de valeur pour faire la moyenne (ici 6 donc une moyenne sur 6 enregistrements) | ||
+ | * 12 -> nombre d' | ||
+ | |||
+ | |||
+ | ===== Enregistrement des données ===== | ||
+ | |||
+ | rrdtool update radios.rrd | ||
+ | 1297810801: | ||
+ | 1297811101: | ||
+ | 1297811401: | ||
+ | 1297811701: | ||
+ | 1297812001: | ||
+ | 1297812301: | ||
+ | 1297812601: | ||
+ | 1297812901: | ||
+ | 1297813201: | ||
+ | 1297813501: | ||
+ | 1297813801: | ||
+ | 1297814101: | ||
+ | |||
+ | |||
+ | A 0h00:01 il y avait 0 auditeur sur les deux flux. (timestamp: | ||
+ | |||
+ | A 0h05:01 il y avait 5 auditeurs sur le flux rock et 1 auditeur sur le flux alternative | ||
+ | |||
+ | Et on continue d' | ||
+ | |||
+ | |||
+ | A savoir : je ne peux pas enregistrer ma première donnée à 0h00:00 car lors de la création de notre RRD nous avons précisé qu'il commence à 0h00:00 il faut donc ajouter une seconde pour le 1er enregistrement. Sinon vous aurez une erreur de ce type : ERROR: radios.rrd: illegal attempt to update using time 1297810800 when last update time is 1297810800 (minimum one second step). | ||
+ | |||
+ | |||
+ | ===== Affichage des données ===== | ||
+ | |||
+ | rrdtool graph radios1.png -s 1297810800 -e 1297814101 -h 300 -w 600 -t "Graph d' | ||
+ | DEF: | ||
+ | DEF: | ||
+ | | ||
+ | Avec cette commande on affiche les données de notre base RRD dans un fichier png. | ||
+ | |||
+ | * -s -> date (toujours en timestamp) de départ du graph pas forcement celle des données. | ||
+ | |||
+ | * -e -> date de fin du graph pas forcement celle des données. | ||
+ | |||
+ | * -h -> height hauteur du graph ici 300px | ||
+ | |||
+ | * -w -> width largeur du graph ici 600px | ||
+ | |||
+ | * -t -> titre du graphique | ||
+ | |||
+ | * DEF: -> fetch les datas depuis le fichier rrd | ||
+ | |||
+ | * rock: -> le nom de notre flux qu'on avait déjà défini (mais on peut en choisir un autre c'est un nom utilisé uniquement pour afficher la valeur) | ||
+ | |||
+ | * =radios.rrd -> le nom de notre fichier rrd | ||
+ | |||
+ | * rock: -> ici c'est le nom exact du Data Source | ||
+ | |||
+ | * AVERAGE -> pour dire qu'on veut une moyenne | ||
+ | |||
+ | * LINE3: | ||
+ | |||
+ | |||
+ | |||
+ | ===== Affichage du graphique ===== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Voilà pour l' | ||
+ | |||
+ | ===== Exemple clé en main ===== | ||
+ | |||
+ | Pour ceux qui souhaiteraient tenir à jour une base des données d' | ||
+ | Il permet de créer une Round Robin Database pour : | ||
+ | * le périphérique eth0 | ||
+ | * la charge système | ||
+ | * la température du processeur | ||
+ | * la mémoire vive | ||
+ | Il permet aussi d' | ||
+ | |||
+ | < | ||
+ | #! /bin/bash | ||
+ | clear | ||
+ | cat << FIN | ||
+ | ========= RRDTools Tool ========= | ||
+ | Choisissez parmi ces modes : | ||
+ | a) Créer la base de données | ||
+ | z) Alimenter la base de données | ||
+ | e) Afficher le graphe | ||
+ | r) Quitter | ||
+ | ================================= | ||
+ | FIN | ||
+ | date_immediate=$(date +%s) | ||
+ | Machine=$(echo " | ||
+ | ICI=$(cd $(dirname " | ||
+ | doss_image=" | ||
+ | doss_rrd=" | ||
+ | mkdir -p $doss_image | ||
+ | mkdir -p $doss_rrd | ||
+ | |||
+ | read touche | ||
+ | case " | ||
+ | a) # | ||
+ | # | ||
+ | #DS pour les octets transmis avec heartbeat (si passé ce délai, | ||
+ | # | ||
+ | #RRA 0.5 proportion de PDP *Unknown* pas de 5 (*60s) pour 2016 fois : 2016*5*60=604800s==1 semaine | ||
+ | clear | ||
+ | echo " | ||
+ | echo "a) Trafic sur l' | ||
+ | echo "z) Température du processeur" | ||
+ | echo "e) Utilisation CPU" | ||
+ | echo "r) Utilisation mémoire" | ||
+ | echo "t) Tous" | ||
+ | read touche | ||
+ | case " | ||
+ | a) | ||
+ | nom=trafic_eth0 | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | ;; | ||
+ | z) | ||
+ | nom=temperature | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | ;; | ||
+ | e) | ||
+ | nom=cpu | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | DS: | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | ;; | ||
+ | r) | ||
+ | nom=memoire | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | ;; | ||
+ | t) | ||
+ | nom=trafic_eth0 | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | nom=temperature | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | nom=cpu | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | DS: | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | nom=memoire | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | rrdtool create $nom_RRD -s 60 -b $date_immediate \ | ||
+ | DS: | ||
+ | DS: | ||
+ | RRA: | ||
+ | RRA: | ||
+ | echo " | ||
+ | ;; | ||
+ | esac | ||
+ | ;; | ||
+ | |||
+ | z) | ||
+ | # | ||
+ | clear | ||
+ | echo " | ||
+ | echo "a) Trafic sur l' | ||
+ | echo "z) Température du processeur" | ||
+ | echo "e) Utilisation CPU" | ||
+ | echo "r) Utilisation mémoire" | ||
+ | echo "t) Tous" | ||
+ | echo "y) Effacer tout" | ||
+ | read touche | ||
+ | case " | ||
+ | a) | ||
+ | nom=trafic_eth0 | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | crontab << FIN | ||
+ | $(crontab -l) | ||
+ | * * * * * | ||
+ | FIN | ||
+ | ;; | ||
+ | z) | ||
+ | nom=temperature | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | crontab << FIN | ||
+ | $(crontab -l) | ||
+ | * * * * * | ||
+ | FIN | ||
+ | ;; | ||
+ | e) | ||
+ | nom=cpu | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | crontab << FIN | ||
+ | $(crontab -l) | ||
+ | * * * * * | ||
+ | FIN | ||
+ | ;; | ||
+ | r) | ||
+ | nom=memoire | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | crontab << FIN | ||
+ | $(crontab -l) | ||
+ | * * * * * | ||
+ | FIN | ||
+ | ;; | ||
+ | t) | ||
+ | crontab << FIN | ||
+ | $(crontab -l) | ||
+ | * * * * * | ||
+ | FIN | ||
+ | ;; | ||
+ | y) | ||
+ | crontab << FIN | ||
+ | $(crontab -l | grep -v rrdupdate) | ||
+ | FIN | ||
+ | ;; | ||
+ | esac | ||
+ | echo " | ||
+ | crontab -l | ||
+ | ;; | ||
+ | |||
+ | e) | ||
+ | |||
+ | # | ||
+ | max_reception=8000000 | ||
+ | max_emission=800000 | ||
+ | nom=trafic_eth0 | ||
+ | unite=" | ||
+ | vertical=" | ||
+ | nom_RRD=" | ||
+ | derniere_date=$(date +%A%_d\ %B\ %Y,\ %Hh%M -d @$(rrdtool last $nom_RRD)) | ||
+ | titre=" | ||
+ | image=" | ||
+ | echo " | ||
+ | rrdtool graph $image -v " | ||
+ | DEF: | ||
+ | DEF: | ||
+ | HRULE: | ||
+ | HRULE: | ||
+ | COMMENT:" | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | COMMENT:" | ||
+ | # eog $image 2>/ | ||
+ | |||
+ | nom=temperature | ||
+ | unite=" | ||
+ | vertical=" | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | derniere_date=$(date +%A%_d\ %B\ %Y,\ %Hh%M -d @$(rrdtool last $nom_RRD)) | ||
+ | titre=" | ||
+ | image=" | ||
+ | echo " | ||
+ | rrdtool graph $image -v " | ||
+ | DEF: | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | HRULE: | ||
+ | HRULE: | ||
+ | COMMENT:" | ||
+ | # eog $image 2>/ | ||
+ | |||
+ | nom=cpu | ||
+ | unite="" | ||
+ | vertical=" | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | derniere_date=$(date +%A%_d\ %B\ %Y,\ %Hh%M -d @$(rrdtool last $nom_RRD)) | ||
+ | titre=" | ||
+ | image=" | ||
+ | CPU=$(grep "model name" / | ||
+ | echo " | ||
+ | rrdtool graph $image -v " | ||
+ | DEF: | ||
+ | DEF: | ||
+ | DEF: | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | HRULE: | ||
+ | HRULE: | ||
+ | COMMENT:" | ||
+ | # eog $image 2>/ | ||
+ | |||
+ | nom=memoire | ||
+ | unite=" | ||
+ | vertical=" | ||
+ | nom_RRD=$doss_rrd$nom.rrd | ||
+ | derniere_date=$(date +%A%_d\ %B\ %Y,\ %Hh%M -d @$(rrdtool last $nom_RRD)) | ||
+ | titre=" | ||
+ | image=" | ||
+ | echo " | ||
+ | rrdtool graph $image -v " | ||
+ | DEF: | ||
+ | DEF: | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | AREA: | ||
+ | GPRINT: | ||
+ | GPRINT: | ||
+ | COMMENT:" | ||
+ | COMMENT:" | ||
+ | eog $image 2>/ | ||
+ | ;; | ||
+ | r) | ||
+ | exit | ||
+ | ;; | ||
+ | esac | ||
+ | echo " | ||
+ | read touche | ||
+ | killall eog | ||
+ | bash $0 | ||
+ | </ | ||
+ | |||
+ | Il est possible qu'une adaptation/ | ||
+ | Cela peut être une base pour administrer sa machine à distance; on peut le compléter avec un serveur léger de page web affichant les images comme sur la " | ||
+ | |||
+ | ===== Voir aussi ===== | ||
+ | |||
+ | * **(en)** [[http:// | ||
+ | * dernier script librement inspiré d'un article issu de GNU-Linux Magazine/ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | // Contributeurs : [[utilisateurs: |