Je me suis intéressé à la supervisition de ma box ADSL afin de grapher la bande passante montante et descendante ainsi que les valeurs de bruit et d'atténuation, ceci dans le but de vérifier la stabilité des valeurs dans le temps et de corréler des impressions de dégradation avec des mesures concrètes.
La première étape nécessite de trouver un protocole fournissant les informations nécessaires. Etant abonné Orange je suis équipé d'une livebox 2 qui fournit un service HTTP et un service TELNET. Sur l'ancienne génération le mot de passe du compte root était connu et on pouvait tirer les informations nécessaires depuis le service TELNET. De ce que j'ai lu dans les forums, le mot de passe est inconnu sur la nouvelle génération et la seule option reste l'interface HTTP, pas vraiment le protocole idéal pour de la supervision. Fort heureusement, un script PERL pour piloter la box a été écrit par teebeenator et sympathiquement fourni à la communauté des utilisateurs. Ce script est téléchargeable [ici](http://www.forum- orange.com/forums/viewtopic.php?id=32420).
La deuxième étape consiste à choisir un
outil de supervision capable de collecter des valeurs et de créer des graphes,
un outil de la famille MRTG : après un
test de Cacti qui est un bon outil mais que j'ai jugé
trop complexe par rapport à mon besoin initial, mon choix s'est porté sur
Munin : un outil simple (voire rustique) écrit
en PERL, aucune interface graphique d'administration, une interface Web 1.0
(sans JavaScript) qui présente des graphes à la journée, consolidés à la
semaine, au mois et à l'année générés statiquement en tant qu'images
bitmap. L'installation est triviale et correctement documéntée pour Debian sur
le Wiki de Munin. Dans mon
cas, je déploie sur mon petit serveur Debian Squeeze et j'utilise
NginX en tant que serveur HTTP. Faire un
lien symbolique de /var/www/... vers le répertoire www de Munin
(/var/cache/munin/www) est suffisant pour lier le serveur Web à Munin.
La troisième et dernière étape consiste à étendre Munin en créant des plugins. D'abord on collecte les données, c'est réalisé par un shell script qui appelle le script PERL de teebeenator et qui sauve les donnée dans un fichier texte. Cette collecte est réalisée toutes les 5 minutes grâce à CRON.
perl livebox.pl --user=admin --pass=<VotreMotDePasse>
-page=infosys_main -v 2>/dev/null | html2text >/adsl_stats.txt
Je sauve les données dans un fichier texte car 3 plugins Munin vont les consommer :
Un plugin est un exécutable (Bash, Perl, Python, ce que vous préférez) qui doit répondre à deux types de requêtes :
Voici shell script du plugin adsl_download qui collecte la valeur de la bande passante descendante :
if [ $# = 1 ]; then
echo "graph_title Bandwidth - Download"
echo "graph_category ADSL"
echo "graph_vlabel kb/s"
echo "down.label download"
else
grep "bit descendant maximum" adsl_stats.txt | cut -s -d: -f2
| sed 's/\s*\([0-9]\+\).*/down.value \1/'
fi
L'enregistrement du plugin auprès de Munin est très simple :
Mes plugins s'appellent adsl_download, adsl_upload et adsl_noise, j'ai donc rajouté la section suivante à /etc/munin/plugin-conf.d/munin-node :
[adsl*]
user root
Le séquenceur de Munin appelle chaque plugin toutes les 5 minutes.
Voici le genre de graphe qu'on obtient :
L'ensemble des fichiers qui composent les plugins sont disponibles dans cette archive.