Bonjour tout le monde,
J’utilise le merveilleux outil RRDTool pour grapher différentes petites choses. Pour le moment, j’ai fait une courbe (enfin, ça ne bouge pas beaucoup mais ça fonctionne :p) pour l’utilisation de l’espace disque :
De la même façon, je génère une image pour l’utilisation de l’interface réseau eth0 :
Ce dernier graphique pose problème. il montre que la base RRDTool n’est pas alimentée. (Initialement, il est entièrement vide, j’explique ensuite comment j’ai pu ajouter des données).
Un fetch sur le fichier BDD donne les valeurs -nan que ce soit pour le résultat de mon ifconfig en émission ou pour celui en réception. J’en déduis donc que le rddtool update ajoute “rien” à la base, d’où le problème. J’ai pu déduire cela en ajoutant des traces dans mon batch qui montrent bien rddtool update N:"":"" au lieu de par exemple rddtool update N:“214324324”:“3234234234”.
Le script appelé toutes les 5 minutes par le cron est le suivant :
#!/bin/bash
#########################################
# CREATION DES BASES DE DONNEES RRDTOOL #
#########################################
il_y_a_dix_secondes=$((`date +'%s'` - 10))
if [ ! -f /tmp/disques.rrd ]
then
rrdtool create /tmp/disques.rrd \
--start "${il_y_a_dix_secondes}" \
--step=300 \
DS:disque_root:GAUGE:600:0:100 \
DS:disque_srv:GAUGE:600:0:100 \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:6:672 \
RRA:AVERAGE:0.5:24:744 \
RRA:AVERAGE:0.5:144:1464
fi
if [ ! -f /tmp/traffic.rrd ]
then
rrdtool create /tmp/traffic.rrd \
--start "${il_y_a_dix_secondes}" \
--step=300 \
DS:traffic_in:DERIVE:600:0:U \
DS:traffic_out:DERIVE:600:0:U \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:6:672 \
RRA:AVERAGE:0.5:24:744 \
RRA:AVERAGE:0.5:144:1464
fi
####################################
# SONDAGE POUR ALIMENTER LES BASES #
####################################
# disques.rdd
pourcentage_occupe_root=$(df / | tail -n 1 | awk '{print $5}' | sed 's/\%//')
occupation_root=$(df -h / | tail -n 1 | awk '{print $3}')
pourcentage_occupe_srv=$(df /srv/ | tail -n 1 | awk '{print $5}' | sed 's/\%//')
occupation_srv=$(df -h /srv/ | tail -n 1 | awk '{print $3}')
# traffic.rdd
traffic_in=$(ifconfig eth0 | grep bytes | cut -d':' -f2 | cut -d' ' -f1)
traffic_out=$(ifconfig eth0 | grep bytes | cut -d':' -f3 | cut -d' ' -f1)
rrdtool update /tmp/disques.rrd N:"${pourcentage_occupe_root}":"${pourcentage_occupe_srv}"
rrdtool update /tmp/traffic.rrd N:"${traffic_in}":"${traffic_out}"
##############################
# MISE A JOUR DES GRAPHIQUES #
##############################
for periode in day week month year
do
rrdtool graph /tmp/disques_"${periode}".png \
--start -1"${periode}" \
--title "Pourcentage d'utilisation des disques durs" \
--vertical-label Pourcentage \
--lower-limit 0 \
--upper-limit 100 \
DEF:disque_root=/tmp/disques.rrd:disque_root:AVERAGE \
LINE2:disque_root#FF0000:"/ (${occupation_root} occupés)" \
DEF:disque_srv=/tmp/disques.rrd:disque_srv:AVERAGE \
LINE2:disque_srv#0000FF:"/srv (${occupation_srv} occupés)"
mv /tmp/disques_"${periode}".png /srv/www/public/
done
for periode in day week month year
do
rrdtool graph /tmp/traffic_"${periode}".png \
--start -1"${periode}" \
--title "Traffic entrant et sortant sur eth0" \
--vertical-label Bytes/sec \
DEF:traffic_in=/tmp/traffic.rrd:traffic_in:AVERAGE \
AREA:traffic_in#FF0000:"RX" \
LINE1:traffic_in#000000 \
DEF:traffic_out=/tmp/traffic.rrd:traffic_out:AVERAGE \
CDEF:traffic_out_neg=traffic_out,-1,\* \
AREA:traffic_out_neg#0000FF:"TX" \
LINE1:traffic_out_neg#000000 \
HRULE:0#000000
mv /tmp/traffic_"${periode}".png /srv/www/public/
done
exit 0
On voit bien que je créé mes bases et mes graphiques de façon similaire : j’ai donc du mal à comprendre ce qui ne va pas car celui des disques durs est créé et alimenté sans problème contrairement à celui de mon interface réseau. Si vous n’êtes pas très au courant de ce que l’on peut faire avec RRDTool : pas de panique, je pense que cela n’a rien à voir et qu’il s’agit bien d’une difficulté à lire le retour de ifconfig quand on appelle le script depuis le cron.
Le problème vient bien du cron puisque l’appel à la main fonctionne. Je disais plus haut que j’expliquerai comment j’avais alimenté mon graphique malgré tout. J’ai fait ceci :
Cela fonctionne dans ce cas très très bien (vous aurez compris que rddtool.sh est le script qui précède). Je ne comprends plus rien, une idée ?