Bonjour à tous,
Comme il y a assez peu d'explications sur cette technologie, je souhaitais vous faire partager mes impressions et mes expériences au travers d'un projet de supervision du réseau de mon école IN'TECH INFO.
Nom du projet - Cyberus Network
Partie RRDTOOL
Ce projet nécessite l'utilisation du générateur de graphique RRDTool afin de surveiller les éléments constituant le réseau.
Infrastructure :
- Système : OpenBSD 5.6
- Serveur : Soekris Net4801
Ici je souhaite générer des graph sur l'utilisation:
- CPU
- RAM
- HDD
- 5 Ports réseaux : sis0, sis1, sis2, sis3, sis4
Statistiques utilisées :
- SNMP v2c pour le réseau
- vmstat pour le CPU/RAM
- df pour HDD
RRD (Round Robin Database) est une base de donnée cyclique et fixe fonctionnant en First IN First OUT. Avantage : C'est que l'on connait à l'avance sa taille et donc la quantité de données stockés. De plus, données les plus anciennes sont remplacées par les plus récentes.
Enfin, les types de données supportées sont multiple. On peut tout mettre à partir du moment où celle-ci sont numérique.
Pour ce faire, il faut d'abord créer la/les table(s) RRD, puis aller collecter l'information et isoler la valeur numérique, et enfin donner la valeur à RRDtool.
Pour chaque élèment à superviser, il y aura 3 scripts shell (create, update et graph) libellés de la manière suivante :
- "mem" pour mémoire, + "ram" pour la mémoire vive et "disk" pour le hdd
- "cpu" pour le processeur
- "net" pour le réseau + le nom de l'interface "sisX"
CREATELa création d'une db rrd se fait de la façon suivante : rrdtool create filename --start --step DS :ds-name:type:heartbeat:min:max RRA:CF:xff:steps:rows
Ici nous avons plusieurs éléments comme :
- filename : le nom de votre base de données terminé par l’extension « .rrd »
- --start: Indique le temps en secondes depuis UTC 1970-01-01 ou epoch quand la première valeur devrait être ajoutée à la base.
- --step : indique la fréquence (en second) à laquelle les données devront être enregistrées dans la base de données.
- ds-name : nom du Data Source, il comprend au maximum 19 caractères.
- type : Le type de data que l’on peut trouver :
- GAUGE : utilisé surtout pour les températures ou le nombre de personnes dans une classe
- COUNTER : il est utilisé pour les types de données qui ne peuvent qu'augmenter. Exemple: le trafic d’une carte réseau, le kilométrage d'une voiture etc...
- DERIVE : permet de faire une dérivée du nouveau point par rapport à l’ancien point. Il peut être utilisé pour une accélération par exemple
- ABSOLUTE : c’est un compteur qui est réinitialisé à chaque lecture
- Heartbeat : C’est le laps de temps avant de définir une valeur.
- Min : C’est la valeur minimale qui peut être enregistrée dans la base , on peut utiliser la valeur « U » pour ne pas spécifier la taille.
- Max : C’est la valeur maximale qui peut être enregistrée dans la base ; on peut utiliser la valeur « U » pour ne pas spécifier la taille.
- RRA (Round Robin Archive) : Round Robin Archive. Ce sont les archives que l'on va conserver. Il faut mettre au moins une ligne RRA pour chaque ligne DS.
- Cf : permet de déterminer le moyen de déterminer qu'elle valeur on entre dans la base de données de RRDTOOL. C'est-à-dire on peut choisir de prendre la dernière valeur avec LAST ou AVERAGE pour choisir plutôt la moyenne entre l’ancienne valeur et la nouvelle ou bien la plus petite ou la plus grande valeur avec MIN et MAX.
- Xff : On précise le pourcentage de point acceptable pour avoir une donnée valide. En dessous la valeur est « unknown ». Valeur courante 0,5.
- Steps : Combien de mesures constituent la donnée
- Rows : spécifie le nombre de valeur à garder
NB : Sur OpenBSD, notamment quand on met le script dans une Crontab, il faut indiquer le chemin absolut de rrdtool. ici
/usr/local/bin/rrdtool puis la commande relatif à l'action
create et enfin le chemin de la db
/var/www/htdocs/admin/db/ramused.rrd. Surtout, ne pas oublier l'anti slash \ à la fin, sans quoi, le retour à la ligne va être interpréter comme une fin de commande par RRD.
UPDATEVoici la syntaxe de la commande :
rrdtool update filename [--template|-t ds-name[:ds-name]...] N| timestamp:value[:value...] [timestamp:value[:value...] ...]
Ici encore, nous avons plusieurs éléments comme :
- filename : le nom de votre base « rrd » à mettre à jour.
- --template|-t ds-name[:ds-name] : Cela permet de spécifier un ordre de mise à jour pour l’ensemble des DS mis à jour (optionnel).
- N|timestamp:value[:value...] : indique l’heure précise à laquelle les données vont être mises à jour. Le "N" est le Nb de seconde écoulé depuis le 1er janv. 1970 UTC ou epoch
GRAPHVoici la syntaxe de la commande :
rrdtool graph filename [option] rrdgraph_data rrdgraph_graph
Ici enfin, nous retrouvons plusieurs éléments comme :
- filename : le nom de votre image qui sera généré, ne pas oublier d’ajouter l’extension « .png »
- option : Elles permettent de configurer votre graph de la manière suivante :
- --start : indique a quel moment le graphique commence
- --end : indique le moment d'arrêt du graphique
- --title : nom de votre graph
- --height : hauteur du graphique
- --width : largeur du graphique
- --vertical-label : spécifie quelle unité sera affiche sur le graphique
- rrdgraph_data : cette fonction est divisé en 3 instructions qui extraient les données sources pour le graphique à générer.
- DEF:vname=rrd:ds-name :
- DEF : C’est ce qui permet de définir les données sources pour le graphique.
- vname : est le nom utilisé durant le graphe pour faire référence au DS (Data Source)
- rrd : C’est le nom du fichier de base de donnée RRD
- CDEF:vname : expression : C’est ce qui permet de définir une expression calculée.
- vname : C’est le nom utilisé durant la création du graphe pour faire référence à l’expression calculée.
- Expression : C’est le calcul de l’expression.
- VDEF:vname =RPN expression :
- rrdgraph_graph : permet de produire le graphique, nous avons différentes méthodes pour y parvenir :
- AREA:vname[#color[:legend]] : permet de définir une courbe de type histogramme.
- LINE{1|2|3}:vname[#color [:legend]] : C’est ce qui permet de définir une courbe avec une épaisseur différente selon la valeur qui suit « LINE ». Avec comme valeur « vname », comme couleur « #color » et comme légende « legend ».
- STACK:vname[#color[:legend]] : C’est ce qui permet de faire un empilage de courbes selon le type de la courbe d’avant, donc STACK ne peut se mettre seulement après un LINE ou AREA. Avec comme valeur « vname », comme couleur « #color » et comme légende « legend ».
- GPRINT:vname:CF:format : C’est le commentaire ajouté à la légende.