#!/bin/bash # Variables à définir: # ------------------------------------------ # Chemins vers les fichiers utiles rrdfile="/root/brol/net/NETstats.rrd"; rrdtoolbin="/usr/bin/rrdtool"; htmldir="/var/www/brol/net"; tempdir="/root/tmp"; scripts="/root/brol/scripts"; # Couleurs des graphes # bytes TX, bytes RX, bytes TX 2, bytes RX 2, packets TX, packets RX, packets TX 2, packets RX 2 colors=(660000 009966 FF3333 99CC99 CC3300 336600 FF9933 99CC66); # Liste des interfaces à surveiller (attention à bien avoir créé la base de données correspondante) ifaces={eth0,eth1}; # ------------------------------------------ # # ------------------------------------------ # Remplissage de la base de données for i in `eval echo $ifaces`; { # On récupère l'ancienne valeur enregistrée (dans les fichiers temporaires) : TXold=$(tail $tempdir/NETstats.${i}.tmp | cut -d" " -f1); RXold=$(tail $tempdir/NETstats.${i}.tmp | cut -d" " -f2); TXpold=$(tail $tempdir/NETstats.${i}.tmp | cut -d" " -f3); RXpold=$(tail $tempdir/NETstats.${i}.tmp | cut -d" " -f4); # On récupère les nouvelles valeurs, par les scripts prévus : TXnew=$($scripts/getbytes.pl | grep ${i}:tx | cut -d")" -f1 | cut -d"(" -f2); RXnew=$($scripts/getbytes.pl | grep ${i}:rx | cut -d")" -f1 | cut -d"(" -f2); TXpnew=$($scripts/getpackets.pl | grep ${i}:tx | cut -d")" -f1 | cut -d"(" -f2); RXpnew=$($scripts/getpackets.pl | grep ${i}:rx | cut -d")" -f1 | cut -d"(" -f2); # On calcule la moyenne sur 5 minutes : let TX="($TXnew-$TXold)/300"; let RX="($RXnew-$RXold)/300"; let TXp="($TXpnew-$TXpold)/300"; let RXp="($RXpnew-$RXpold)/300"; # On crée une partie de la chaine nécessaire au remplissage de la base de données eval $i="$( echo -n ":"; echo -n $TX; echo -n ":"; echo -n $RX; echo -n ":"; echo -n $TXp; echo -n ":"; echo -n $RXp; )"; # On remplit les fichiers temporaires echo $TXnew $RXnew $TXpnew $RXpnew > $tempdir/NETstats.$i.tmp } # On remplit la base de données plop="N$(for i in `eval echo $ifaces`; { eval "tmp=\$$i"; echo -n $tmp; } echo ""; )"; $rrdtoolbin update $rrdfile $plop; # Génration des graphes # ------------------------------------------ # Génération des variables suivant le type de graphe # time_name -> intitulé sur le png créé # average -> moyenne sur n minutes # prefix -> préfixe du fichier créé # time_warp -> décalage en secondes par rapport à l'instant présent case $1 in week) time_name="7 days"; average="30"; prefix="weekly"; time_warp="-s-604800"; date > $htmldir/lastdate_week.txt;; month) time_name="30 days"; average="30"; prefix="monthly"; time_warp="-s-2592000"; date > $htmldir/lastdate_month.txt;; year) time_name="one year"; average="30"; prefix="yearly"; time_warp="-s-31536000"; date > $htmldir/lastdate_year.txt;; *) time_name="24 hours"; average="5"; prefix="daily"; time_warp=""; date > $htmldir/lastdate_day.txt;; esac # Génération réelle des graphes for i in `eval echo $ifaces`; do for j in bytes packets; do $rrdtoolbin graph $htmldir/net_${i}_${j}_${prefix}.png \ --title="$i ${time_name} variations (${average} minutes average) [${j}]" \ -aPNG -h200 -w600 -l0 ${time_warp} -v ${j}/s\ DEF:${j}_TX=$rrdfile:${j}TX${i}:LAST \ DEF:${j}_RX=$rrdfile:${j}RX${i}:LAST \ LINE2:${j}_TX#${colors[0]} \ LINE2:${j}_RX#${colors[1]} \ AREA:${j}_TX#${colors[2]}:"${i} ${j}TX/sec" \ GPRINT:${j}_TX:MAX:"Max\\: %2.lf ${j}/s" \ GPRINT:${j}_TX:AVERAGE:"Average\\: %2.lf ${j}/s" \ GPRINT:${j}_TX:LAST:"Current\\: %2.lf ${j}/s \\n" \ AREA:${j}_RX#${colors[3]}:"${i} ${j}RX/sec" \ GPRINT:${j}_RX:MAX:"Max\\: %2.lf ${j}/s" \ GPRINT:${j}_RX:AVERAGE:"Average\\: %2.lf ${j}/s" \ GPRINT:${j}_RX:LAST:"Current\\: %2.lf ${j}/s\\n" \ CDEF:nodat=${j}_TX,${j}_RX,+,UN,INF,UNKN,IF \ AREA:nodat#BBBBBB:"NoData\\n" \ COMMENT:"Last update \\: `date|sed -e 's/:/\\\\:/g'`\r" done; done;