Auteur Sujet: Cyberus Network - RRDTOOL  (Lu 6097 fois)

0 Membres et 1 Invité sur ce sujet

Adrieth

  • Abonné Free adsl
  • *
  • Messages: 82
  • Free GUT75 VDSL
Cyberus Network - RRDTOOL
« le: 25 novembre 2014 à 11:13:42 »
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"

CREATE

La 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.

UPDATE

Voici 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


GRAPH

Voici 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.
« Modifié: 29 novembre 2014 à 12:51:02 par Adrieth »

Adrieth

  • Abonné Free adsl
  • *
  • Messages: 82
  • Free GUT75 VDSL
Cyberus Network - RRDTOOL
« Réponse #1 le: 25 novembre 2014 à 11:14:30 »
Supervision de la RAM

Dans ce post, je vais détailler un maximum des éléments qui composent le script.

CREATE

Ici, nous allons dire à RRDTOOL (ci-après rrd) par l'intermédiaire d'un script en shell de nous créer une base de donnée (ci-après db) relatif à la mémoire RAM : memram_rrd_create.sh

#!/bin/sh
# Script de création de la base de données RRDTools pour l'utilisation de la RAM

/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/ramused.rrd \
--step 60 \
DS:ramused:GAUGE:120:0:U \
RRA:AVERAGE:0.5:1:1440 \
RRA:AVERAGE:0.5:15:672 \
RRA:AVERAGE:0.5:60:168

Nous avons donc les éléments suivants :

  • filename : /var/www/htdocs/admin/db/ramused.rrd
  • --step : 60 (secondes)
  • DS-name : ramused
  • type : Le type de data que l’on peut trouver :
    • GAUGE : car ici la quantité de mémoire utilisé peut être croissante ou décroissante
  • Heartbeat : Le laps de temps avant de définir une valeur est ici le double de la step soit 120. RRDtool va attendre 120 seconde avant de marqué Unknown dans sa base si jamais il ne reçoit rien durant ce laps de temps
  • Min :  Valeur "0".
  • Max : Valeur U pour ne pas spécifier la taille.
  • RRA (Round Robin Archive) :
  • Cf : AVERAGE pour choisir la moyenne entre l’ancienne valeur et la nouvelle.
  • Xff : 0,5 car ici le script UPDATE va être exécuter 2 fois par minute. RRD va donc avoir 2 valeurs par step de 60 sec.
  • Steps : C'est là que cela se complique. il nous faut 3 graphiques sur des période de temps différents. (1 heure, 1 jour et 1 semaine). Pour ce faire, on compte en nombre de steps :
    • 1 pour 1 step de 60 sec. On garde les données minutes par minutes
    • 15 pour 15 steps de 60 sec. On conserve les données par tranche de 15 minutes
    • 60 pour 60 steps de 60 sec. On conserve les données par tranche de 1 heure
  • Rows : le nombre de valeur à garder pour afficher les graphiques sur 1 heure, 1 jour et 1 semaine
    • 1440 pour 1440 sec soit 24 heures
    • 672 pour 672 quart d'heure soit 1 semaine
    • 168 pour 168 heures soit 1 semaine

UPDATE

Ici, nous allons dire à rrd de mettre à jour sa db avec les nouvelles valeur : memram_rrd_update.sh

#!/bin/sh
# Script pour l'update de la base de données RRDTools pour l'utilisation de la RAM

# Récupération des informations de la RAM
ramfreeko=$(vmstat | /usr/bin/tail -n1 | /usr/bin/awk '{print $5}')
ramtotbytes=$(sysctl -n hw.physmem)
let "ramtotko=$ramtotbytes / 1024"
let "ramused=$ramtotko-$ramfreeko"

# Update de RRDTool
/usr/local/bin/rrdtool update /var/www/htdocs/admin/db/ramused.rrd N:$ramused

Nous avons 2 parties : La première va aller interroger le système sur différents paramètres que l'on veux "grapher" et les mettre dans la même unité (ici le Ko) et l'autre partie va à son tour transmettre les valeurs à RRD.

Ici encore, nous avons plusieurs éléments comme :
  • filename : /var/www/htdocs/admin/db/ramused.rrd
  • N|timestamp:value[:value...] :N:$ramused. Avec la fonction N (pour Now), c'est le système qui va faire le calcul des secondes écoulées depuis epoch


GRAPH

Enfin, nous allons dire à rrd de créer un graphique avec les données stockées dans la db : memram_rrd_graph.sh

#!/bin/sh
# Script pour la génération des graphique sur de la base de donnée RRDTools pour l'utilisation de la RAM

# Pour 1 Heure
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/ramused-1h.png \
--start -3600 --end now \
--vertical-label Megaoctet \
--width 500 \
--height 200 \
--title "Quantité de mémoire RAM utilisée sur 1 heure" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:ramused=/var/www/htdocs/admin/db/ramused.rrd:ramused:AVERAGE \
CDEF:ramusedmo=ramused,1024,\/ \
AREA:ramusedmo#046380:"Mémoire RAM utilisée" \

# Pour 1 jour
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/ramused-1d.png \
--start -86400 --end now \
--vertical-label Megaoctet \
--width 500 \
--height 200 \
--title "Quantité de mémoire RAM utilisée sur 1 jour" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:ramused=/var/www/htdocs/admin/db/ramused.rrd:ramused:AVERAGE \
CDEF:ramusedmo=ramused,1000,\/ \
AREA:ramusedmo#046380:"Mémoire RAM utilisée" \

# Pour 1 semaine
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/ramused-1w.png \
--start -604800 --end now \
--vertical-label Megaoctet \
--width 500 \
--height 200 \
--title "Quantité de mémoire RAM utilisée sur 1 semaine" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:ramused=/var/www/htdocs/admin/db/ramused.rrd:ramused:AVERAGE \
CDEF:ramusedmo=ramused,1024,\/ \
AREA:ramusedmo#046380:"Mémoire RAM utilisée"

Ici enfin, nous retrouvons plusieurs éléments comme :
  • filename :/var/www/htdocs/admin/graph/ramused-1w.png
  • option :
    • --start : 60480 pour 60480 sec soit 1 semaine
    • --end : now
    • --title : nom de votre graph
    • --height : hauteur du graphique : 500 px
    • --width : largeur du graphique : 200 px
    • --vertical-label : unité du graphique : Megaoctet
  • 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 : ramused
      • rrd : /var/www/htdocs/admin/db/ramused.rrd
    • CDEF:vname : expression : C’est ce qui permet de définir une expression calculée.
      • vname : ramusedmo (Nom de la variable calculé. Ici on converti les Ko en Mo)
      • Expression : C’est le calcul de l’expression. On divise $ramused par 1024
  • rrdgraph_graph :  permet de produire le graphique, nous avons différentes méthodes pour y parvenir :
    • AREA:vname[#color[:legend]] : courbe de type histogramme de la variable $ramusedmo avec la légende : Mémoire RAM utilisée

Pour la RAM - 1 heure


Pour la RAM - 1 jour


Pour la RAM - 1 semaine
« Modifié: 29 novembre 2014 à 14:08:20 par Adrieth »

Adrieth

  • Abonné Free adsl
  • *
  • Messages: 82
  • Free GUT75 VDSL
Cyberus Network - RRDTOOL
« Réponse #2 le: 25 novembre 2014 à 11:14:46 »
Supervision du CPU

CREATE

#!/bin/sh
# Script de création de la base de données RRDTools pour l'utilisation du CPU

/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/cpuused.rrd \
--step 60 \
DS:user:GAUGE:120:0:U \
DS:sys:GAUGE:120:0:U \
RRA:AVERAGE:0.5:1:1440 \
RRA:AVERAGE:0.5:15:672 \
RRA:AVERAGE:0.5:60:168

Même principe que pour la RAM sauf que ici nous avons 2 Data Sources (DS) "user" et "sys"

UPDATE

#!/bin/sh
# Script pour l'update de la base de données RRDTools pour l'utilisation du CPU

# Récupération des informations du CPU - user et sys
cpuuser=$(vmstat | /usr/bin/tail -n1 | /usr/bin/awk '{print $16}')
cpusys=$(vmstat | /usr/bin/tail -n1 | /usr/bin/awk '{print $17}')

/usr/local/bin/rrdtool update /var/www/htdocs/admin/db/cpuused.rrd N:$cpuuser:$cpusys

Comme nous avons 2 DS, nous allons indiqué à RRD successivement "user" et ensuite "sys" en respectant l'ordre des DS que nous avaons defini dans CREATE.

GRAPH

#!/bin/sh
# Script pour la génération des graphique sur de la base de donnée RRDTools pour l'utilisation du CPU

# Pour 1 Heure
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/cpuused-1h.png \
--start -3600 --end now \
--vertical-label "en %" \
--width 500 \
--height 200 \
--title "Pourcentage du CPU utilisée sur 1 heure" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:cpuuser=/var/www/htdocs/admin/db/cpuused.rrd:user:AVERAGE \
DEF:cpusys=/var/www/htdocs/admin/db/cpuused.rrd:sys:AVERAGE \
AREA:cpuuser#046380:"CPU utilisée - user" \
STACK:cpusys#C03000:"CPU utilisée - system" \

# Pour 1 jour
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/cpuused-1d.png \
--start -86400 --end now \
--vertical-label "en %" \
--width 500 \
--height 200 \
--title "Pourcentage du CPU utilisée sur 1 jour" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:cpuuser=/var/www/htdocs/admin/db/cpuused.rrd:user:AVERAGE \
DEF:cpusys=/var/www/htdocs/admin/db/cpuused.rrd:sys:AVERAGE \
AREA:cpuuser#046380:"CPU utilisée - user" \
STACK:cpusys#C03000:"CPU utilisée - system" \

# Pour 1 semaine
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/cpuused-1w.png \
--start -604800 --end now \
--vertical-label "en %" \
--width 500 \
--height 200 \
--title "Pourcentage du CPU utilisée sur 1 semaine" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:cpuuser=/var/www/htdocs/admin/db/cpuused.rrd:user:AVERAGE \
DEF:cpusys=/var/www/htdocs/admin/db/cpuused.rrd:sys:AVERAGE \
AREA:cpuuser#046380:"CPU utilisée - user" \
STACK:cpusys#C03000:"CPU utilisée - system" \

Même chose qu'en RAM, mais avec 2 DS. Ici les valeurs sont exprimées en % donc, il y a pas de calcul à faire (pas de CDEF). Par contre on va empiler les valeurs de USER et de SYS. On fait donc intervenir "STACK"

Pour le CPU - 1 heure


Pour le CPU - 1 jour


Pour le CPU - 1 semaine
« Modifié: 29 novembre 2014 à 14:20:59 par Adrieth »

Adrieth

  • Abonné Free adsl
  • *
  • Messages: 82
  • Free GUT75 VDSL
Cyberus Network - RRDTOOL
« Réponse #3 le: 25 novembre 2014 à 11:15:49 »
Supervision du HDD

CREATE

#!/bin/sh
# Script de création de la base de données RRDTools pour l'utilisation du disque dur

/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/diskused.rrd \
--step 60 \
DS:diskused:GAUGE:2400:0:U \
RRA:AVERAGE:0.5:20:504

Ici, on ne va rafraîchir la db que toutes les 10 minutes, pour garder une valeur toutes les 20 minutes. On les graph que sur 1 journée

UPDATE

#!/bin/sh
# Script RRDTool pour la mémoire du disque dur

diskused=$(/bin/df -kP / | /usr/bin/tail -n1 | /usr/bin/awk '{print $5}' | /usr/bin/sed 's/%$//')

/usr/local/bin/rrdtool update /var/www/htdocs/admin/db/diskused.rrd N:$diskused

Même principe que sur la RAM ou le CPU

GRAPH

#!/bin/sh
#Script de creation du graphique Memoire disque

# Pour 1 jour
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/diskused-1d.png \
--start -86400 --end now \
--vertical-label "en %" \
--width 500 \
--height 200 \
--title "Quantité de mémoire DISK utilisée sur 1 jour" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:diskused=/var/www/htdocs/admin/db/diskused.rrd:diskused:AVERAGE \
AREA:diskused#046380:"Mémoire DISK utilisée"


Pour le HDD- 1 jour
« Modifié: 29 novembre 2014 à 14:27:34 par Adrieth »

Adrieth

  • Abonné Free adsl
  • *
  • Messages: 82
  • Free GUT75 VDSL
Cyberus Network - RRDTOOL
« Réponse #4 le: 25 novembre 2014 à 11:16:08 »
Supervision des interfaces réseaux - sis4

Je ne vais pas vous faire les 4 interfaces de la Soekris. Je vais m'attarder sur sis4 qui est le futur LAN et où j'ai un peu de trafic dessus. Cet exemple sera vrai pour les autres interfaces de la machine.

CREATE

#!/bin/sh
# Script de création de la base de données RRDTools pour l'utilisation du réseau

#Sis0
/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/netsis0.rrd \
--step 60 \
DS:in:COUNTER:120:0:U \
DS:out:COUNTER:120:0:U \
RRA:AVERAGE:0.5:1:1440 \
RRA:AVERAGE:0.5:15:672 \
RRA:AVERAGE:0.5:60:168 \

#Sis1
/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/netsis1.rrd \
--step 60 \
DS:in:COUNTER:120:0:U \
DS:out:COUNTER:120:0:U \
RRA:AVERAGE:0.5:1:1440 \
RRA:AVERAGE:0.5:15:672 \
RRA:AVERAGE:0.5:60:168 \

#Sis2
/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/netsis2.rrd \
--step 60 \
DS:in:COUNTER:120:0:U \
DS:out:COUNTER:120:0:U \
RRA:AVERAGE:0.5:1:1440 \
RRA:AVERAGE:0.5:15:672 \
RRA:AVERAGE:0.5:60:168 \

#Sis3
/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/netsis3.rrd \
--step 60 \
DS:in:COUNTER:120:0:U \
DS:out:COUNTER:120:0:U \
RRA:AVERAGE:0.5:1:1440 \
RRA:AVERAGE:0.5:15:672 \
RRA:AVERAGE:0.5:60:168 \

#Sis4
/usr/local/bin/rrdtool create /var/www/htdocs/admin/db/netsis4.rrd \
--step 60 \
DS:in:COUNTER:120:0:U \
DS:out:COUNTER:120:0:U \
RRA:AVERAGE:0.5:1:1440 \
RRA:AVERAGE:0.5:15:672 \
RRA:AVERAGE:0.5:60:1684

Ici, on créer d'un seul coup toutes les bases et ce pour toutes les interfaces.

UPDATE

#!/bin/sh
# Script pour l'update de la base de données RRDTools pour l'utilisation du réseau

# Récupération des informations sur les interfaces

#Sis4 - FREE/PROXAD
sis4in=$(/usr/local/bin/snmpget -v2c -c public localhost IF-MIB::ifInOctets.5 | /usr/bin/awk '{print $4}')
sis4out=$(/usr/local/bin/snmpget -v2c -c public localhost IF-MIB::ifOutOctets.5 | /usr/bin/awk '{print $4}')

# Update de RRDTool

#Sis4 - FREE/PROXAD
/usr/local/bin/rrdtool update /var/www/htdocs/admin/db/netsis4.rrd N:$sis4in:$sis4out

Même principe que sur la RAM ou le CPU. Sauf que ici on utilise le protocole SNMP (Simple Network Management Protocol) qui lui va interroger la base MIB de la machine. Les données issus de cette base ne sont que croissant. Nous, ce qui nous intéresse c'est les variations. Pour ce faire, nous allons utiliser le paramètre COUNTER de RRD à la place de GAUGE. Ce denier va calculer cette variation par rapport aux données remontées par SNMP-MIB.

GRAPH

#!/bin/sh
# Script pour la génération des graphique sur de la base de donnée RRDTools pour l'utilisation de l'interface réseau sis4 - FREE

# Pour 1 Heure
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/network-sis4-1h.png \
--start -3600 --end now \
--vertical-label "Kilo-octet" \
--width 500 \
--height 200 \
--title "Flux IN/OUT sur la sis4 (FREE) - 1 heure" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:in=/var/www/htdocs/admin/db/netsis4.rrd:in:AVERAGE \
DEF:out=/var/www/htdocs/admin/db/netsis4.rrd:out:AVERAGE \
CDEF:in_bits=in,8,* \
CDEF:out_bits=out,8,* \
LINE3:in_bits#046380:"Traffic IN" \
LINE3:out_bits#C03000:"Traffic OUT" \

# Pour 1 jour
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/network-sis4-1d.png \
--start -86400 --end now \
--vertical-label "Kilo-octet" \
--width 500 \
--height 200 \
--title "Flux IN/OUT sur la sis4 (FREE) - 1 jour" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:in=/var/www/htdocs/admin/db/netsis4.rrd:in:AVERAGE \
DEF:out=/var/www/htdocs/admin/db/netsis4.rrd:out:AVERAGE \
CDEF:in_bits=in,8,* \
CDEF:out_bits=out,8,* \
LINE3:in_bits#046380:"Traffic IN" \
LINE3:out_bits#C03000:"Traffic OUT" \

# Pour 1 Semaine
/usr/local/bin/rrdtool graph /var/www/htdocs/admin/graph/network-sis4-1w.png \
--start -604800 --end now \
--vertical-label "Kilo-octet" \
--width 500 \
--height 200 \
--title "Flux IN/OUT sur la sis4 (FREE) - 1 semaine" \
--slope-mode \
--watermark "`date`" \
--color CANVAS#000000 \
--color BACK#333333 \
--color FONT#C0C0C0 \
--color MGRID#EFECCA \
--color GRID#A7A37E \
--color FRAME#808080 \
--color ARROW#FFFFFF \
--color SHADEA#404040 \
--color SHADEB#404040 \
DEF:in=/var/www/htdocs/admin/db/netsis4.rrd:in:AVERAGE \
DEF:out=/var/www/htdocs/admin/db/netsis4.rrd:out:AVERAGE \
CDEF:in_bits=in,8,* \
CDEF:out_bits=out,8,* \
LINE3:in_bits#046380:"Traffic IN" \
LINE3:out_bits#C03000:"Traffic OUT"

On converti le tout en bits.

Pour le sis4 - 1 heure


Pour le sis4 - 1 jour


Pour le sis4 - 1 semaine
« Modifié: 29 novembre 2014 à 14:41:03 par Adrieth »

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 092
  • Paris (75)
Cyberus Network - RRDTOOL
« Réponse #5 le: 25 novembre 2014 à 11:32:07 »
Je suis surpris qu'on utilise encore RRDTool de nos jours.

Du moins, je pensais que tout les (plus) jeunes (et écoles d'info) utilisaient des trucs plus récents comme InfluxDB et Graphite (et leurs dérivées flashy comme http://grafana.org/ et http://jondot.github.io/graphene/ par exemple).

Une raison a cela ?

tontonrobert

  • Abonné Bbox adsl
  • *
  • Messages: 188
  • VDSL2 - Bbox
Cyberus Network - RRDTOOL
« Réponse #6 le: 25 novembre 2014 à 17:09:08 »
Hum, je n'ai pas l'impression que ce sont vraiment des projects sur les mêmes segments d'utilisations, si ?

Un avantage de rrdtool : parler le rrdtool, c'est cool.

Adrieth

  • Abonné Free adsl
  • *
  • Messages: 82
  • Free GUT75 VDSL
Cyberus Network - RRDTOOL
« Réponse #7 le: 29 novembre 2014 à 12:14:04 »
Je suis surpris qu'on utilise encore RRDTool de nos jours.

Du moins, je pensais que tout les (plus) jeunes (et écoles d'info) utilisaient des trucs plus récents comme InfluxDB et Graphite (et leurs dérivées flashy comme http://grafana.org/ et http://jondot.github.io/graphene/ par exemple).

Une raison a cela ?

Bonjour Kgersen,

Effectivement, on peut se poser la question de l'utilité d'utiliser RRDTOOL aujourd'hui alors qu'il existe des outils plus récents "graphiquement parlant". Cependant, ici nous avons une contrainte matérielle importante. Pour réaliser ce projet, nous nous basons sur du matériel disponible et parfois ancien. Ici sur une Soekris net4801 qui date de 2005, 128Mo de RAM et un SoC AMD Geode qui plane à 266Mhz, le vent dans le dos. À côté, ma RaspberryPI fait figure de PC de course ! et je ne vous parle pas des smartphones...
Il nous fallait donc utiliser des systèmes très peu gourmands en ressources : OpenBSD pour l'OS et RRDtool notamment pour les graph. InfluxDB et Graphite ont l'air plus user friendly, et plus souple dans leur utilisation, mais je pense aussi beaucoup plus lourd pour le système.

D'autre part, même si RRDTool à l'air ancien, je vois moult programme et/ou entreprise qui l'utilise encore aujourd'hui : cactis, pfsense, observium et autre weathermaps (ovh ou Knet par exemple)
« Modifié: 29 novembre 2014 à 18:40:14 par Adrieth »

Adrieth

  • Abonné Free adsl
  • *
  • Messages: 82
  • Free GUT75 VDSL
Cyberus Network - RRDTOOL
« Réponse #8 le: 29 novembre 2014 à 14:43:25 »
Tutoriel terminé !

Si vous avez des remarques et autres suggestions, elles sont bienvenues !!

Enjoy  ;)

BadMax

  • Client Free adsl
  • Expert
  • *
  • Messages: 3 481
  • Malissard (26)
Cyberus Network - RRDTOOL
« Réponse #9 le: 30 novembre 2014 à 15:10:45 »
D'un point de vue développement, je mettrais rrdtool à part. Mets-le dans une fonction "create_database" avec le fichier rrd en paramètres et autres options. Pour le graph, fait pareil. Ca sera plus pratique quand tu augmenteras le nombre de données en entrées.

Pour les graphs, penses "indicateur" et non pas "mesure".
Exemple de mesure : compteur de vitesse
Exemple d'indicateur: jauge d'essence

La différence c'est qu'une mesure ne permet pas de déduire quelque chose quand on la lit, il faut la ramener à un contexte pour la comprendre.
Un indicateur est compréhensible de tout le monde. Pour faire un indicateur, on prend une mesure et on la borne avec des limites/seuils, en la ramenant en % (par exemple) et en indiquant des seuils (<20%=tu glandes, 20-40%=envoi du paté, 40-60%=vas-y fais tout péter, 60-80%=oh oui encore, 80-95%=j'aime ça, >95%=débraye ça fume)

L'avantage de rrdtool est sa facilité de manipulation de données : stockage/archivage, graphs avec plusieurs fichiers rrd, etc

Par contre, un trop grand nombre de données à manipuler en meme temps peut faire exploser la machine.