Mot-clé - munin

Fil des billets

dimanche 15 mai 2016

Scripts Munin pour Jirafeau

Si vous utilisez Jirafeau sur votre serveur pour partager des documents, vous serez peut-être contents d'avoir un suivi rapide du nombre de fichiers partagés et du volume total qu'occupent les fichiers de Jirafeau sur votre serveur.

jirafeau_nb-day.png

Rien de plus simple avec Munin !

Créons un premier plugin pour mesurer le nombre de fichiers

Sur la machine porteuse du client (node) Munin, nous allons créer un nouveau script dans le fichier /etc/munin/plugins/jirafeau-nb :

#!/bin/sh
case $1 in
   config)
        cat <<'EOM'
graph_title Jirafeau, number of files
graph_vlabel Nb of files
nbfiles.label Nb of files
EOM
        exit 0;;
esac

printf "nbfiles.value "
echo $(($(find /path/to/jirafeau/var-abcdefghiklmnop/files -type f |wc -l)*1/2))

Il faudra rendre le script exécutable par

chmod a+x /etc/munin/plugins/jirafeau-nb

puis le tester avec munin par

munin-run jirafeau-nb

et enfin redémarrer le client Munin

service munin-node restart

Créons un second plugin pour mesurer l'espace total occupé par les fichiers

On pratique comme au-dessus pour le script dont le contenu est :

#!/bin/sh
case $1 in
   config)
        cat <<'EOM'
graph_title Jirafeau, size of files in Kb
graph_vlabel Size of files in Kb
sizefiles.label Size
EOM
        exit 0;;
esac

printf "sizefiles.value "
du -hsk /path/to/jirafeau/var-abcdefghiklmnop/files |cut -f1

Et hop le tour est joué !

dimanche 23 novembre 2014

Température suivie avec un Raspberry Pi B+, une sonde DS18B20 et Munin

La sonde DS18B20 est une sonde de température 1-wire très facile d'utilisation avec le Raspberry Pi. Il y a de très nombreux sites et blogs qui en rapportent l'utilisation : par exemple http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/ ou https://learn.adafruit.com/downloads/pdf/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing.pdf.

Je vais toutefois reprendre ici les principales étapes et me concentrer ensuite sur le suivi et l'affichage de la température via Munin.

Matériel

  • Un Raspberry Pi B ou B+ avec des GPIO libres
  • Une sonde DS18B20 (composant avec 3 pattes)
  • Une résistance 4.7 KOhms (des valeurs proches peuvent convenir également)
  • Quelques câbles

Montage électrique

Les sondes 1-wire peuvent être alimentées de 2 manières : en alimentant une des pattes à 3.3V ou bien en laissant le composant charger un condensateur avec les parasites ambiants et utilisant la charge de ce condensateur pour effectuer une messure. La 2e méthode a l'avantage de nécessiter un câble de moins dans l'installation mais il est possible qu'il faille être un peu plus patient pour effectuer des lectures de température (quelques secondes pour charger le condensateur selon le niveau des parasites).

Dans la suite, nous alimenterons directement le composant en 3.3V.

Nous allons donc simplement connecter :

  • la masse du capteur à un pin de masse
  • l'alimentation du capteur au pin 3.3V du Raspberry Pi
  • la patte centrale (lecture) au GPIO 4

et nous allons ajouter la résistance de 4.7KOhms en parallèle avec la sonde i.e. entre l'alimentation 3.3V et la ligne de lecture.

raspberry-pi-ds18b20-connections.jpg (image empruntée sur http://www.reuk.co.uk/DS18B20-Temperature-Sensor-with-Raspberry-Pi.htm)

Attention à ne pas inverser la masse et l'alimentation - cela pourrait endommager le composant. On peut se référer à cette documentation pour être certain de ne pas se tromper : http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf. La masse se trouve sur la patte de gauche quand on regarde la face plate du composant avec les pattes vers le bas.

Paramétrons le Pi

On peut alors brancher le Pi, se connecter en SSH et charger les modules nécessaires à la lecture des GPIO :

modprobe w1-gpio
modprobe w1-therm

Il faut aussi modifier le fichier /boot/config.txt et ajouter cette ligne :

dtoverlay=w1-gpio

Pour ne pas avoir à les charger à nouveau à chaque re-démarrage du Pi, on ajoutera les 2 lignes suivants au fichier /etc/modules :

w1-gpio
w1-therm

Remarque : si vous prévoyez plus de 10 sondes, il est possible qu'il faille ajouter un fichier wire.conf dans /etc/modprobe.d avec ce contenu :

options wire max_slave_count=50

Si tout fonctionne, on doit alors voir un dossier au nom de la sonde apparaître dans le dossier /sys/bus/w1/devices :

cd /sys/bus/w1/devices
ls
>> 28-000005330085 w1_bus_master1

'' 28-000005330085'' est le nom de la sonde installée. Si nous avions plusieurs sondes sur le bus, nous verrions un dossier avec un nom unique pour chaque sonde. Si on entre dans le dossier, on accède aux différentes valeurs retournées par la sonde : le fichier w1_slave contient la température sur la 2e ligne en millièmes de degré Celsius :

4c 01 4b 46 7f ff 04 10 f5 : crc=f5 YES
4c 01 4b 46 7f ff 04 10 f5 t=20750

La petite ligne bash suivante (en remplaçant bien sûr le nom de ma sonde par celui de la vôtre !) extrait alors la température en °C :

cat /sys/bus/w1/devices/28-000005330085/w1_slave | grep "t=" | awk -F "t=" '{print $2/1000}'
>> 20.75

Relevons la température avec Munin

J'ai déjà évoqué Munin ici. Munin est un logiciel utilisé par le adminsys pour suivre les variables vitales de serveurs. Mais l'outil peut tout à fait être utilisé aussi pour suivre n'importe quelle variable accessible sur un ordinateur, par exemple la valeur de la température relevée par notre sonde !



Je ne détaillerai pas ici le paramétrage du serveur Munin (qui récolte régulièrement les données des clients, génère les graphes et les rend disponibles au travers d'un serveur http) mais seulement du client Munin.

On installe un client (noeud dans le vocabulaire de Munin) sur le Pi avec cette commande :

aptitude install munin-node

Le noeud/client munin fonctionne en récoltant les variables de scripts stockés dans /etc/munin/plugins : par défaut les plugins seront en fait des liens relatifs vers les scripts par défaut disponibles dans /usr/share/munin/plugins/. Si vous ne souhaitez suivre aucune variable vitale du Pi, vous pouvez supprimer tous les liens dans /etc/munin/plugins (si vous changez d'avis il suffira de les reprendre depuis /usr/share/munin/plugins).

Nous allons donc créer un nouveau script Munin pour collecter la température. Les scripts Munin sont tout simples - ils comprennent 2 parties : une partie qui décrit le graphique (et les éventuelles options graphiques que l'on souhaite voir appliquées) et une seconde partie imprime chaque variable et sa valeur sur chaque ligne. Par exemple, le script "memory" de Munin retourne les valeurs suivantes :

slab.value 8949760
swap_cache.value 0
page_tables.value 638976
vmalloc_used.value 954368
apps.value 21979136
free.value 291938304
buffers.value 35708928
cached.value 99397632
swap.value 0
committed.value 51347456
mapped.value 6803456
active.value 64913408
inactive.value 85291008

Nous allons donc générer un script qui imprime la valeur de notre sonde de la même façon dans /etc/munin/plugins :

nano temperature_1

et voici le contenu du script :

#!/bin/sh

case $1 in
   config)
        cat <<'EOM'
graph_title Temperature probe 1
graph_vlabel temperature_1
temperature_1.label temperature_1
EOM
        exit 0;;
esac

printf "temperature_1.value "
cat /sys/bus/w1/devices/28-000005330085/w1_slave | grep "t=" | awk -F "t=" '{print $2/1000}'

Si on exécute ce script (./temperature_1) voici la sortie :

temperature.value 21.5

On peut alors redémarrer le client Munin.

Lors de la prochaine collecte des données, le serveur Munin viendra récupérer la sortie du script temperature_1 et proposera alors les graphes standards de Munin pour cette valeur.

Si l'on dispose de plusieurs sondes, on peut alternativement multiplier les scripts (un script par sonde) ou alors demander au script d'imprimer les valeurs de chacune des sondes : les différentes valeurs seront alors affichées sur un même graphe !

ambient_temperature-day.png

Bon suivi de température !

lundi 14 octobre 2013

Suivre l'état de son serveur avec Munin

Munin est un logiciel libre performant pour surveiller et suivre ("monitorer" si on s'autorise les anglicismes) des ordinateurs ou des serveurs. Il se compose de deux composants :

  • munin-node, l'utilitaire chargé de récupérer les données sur les "noeuds" du réseau
  • munin, le superviseur qui compile les données de tous les "noeuds" surveillés, fabrique des graphiques et des pages HTML pour permettre la visualisation aisée des données au travers d'un serveur web

Nous allons décrire ici le déploiement de munin-node sur un serveur et de munin sur un poste superviseur distinct.

Installer et paramétrer munin-node sur le poste à surveiller

Munin-node s'installera avec votre gestionnaire de paquet favori ; par exemple sous Debian :

aptitude install munin-node

Lors de l'installation, munin-node choisit et paramètre automatiquement un certain nombre de plugins (chaque plugin est un petit programme autonome capable d'aller collecter des données précises : par exemple le plugin cpu collecte des informations sur la charge du processeur, postfix_mailstats extrait des logs le nombre de courriels transmis par postfix, ...). Le paramétrage de munin-node s'effectue dans /etc/munin/munin-node.conf.

On pourra notamment prêter attention à ces paramètres :

#Spécifier le nom de l'hôte surveillé
host_name serveur_surveille1.domain.tld
#Adresse IPv4 du superviseur qui aura le droit de se connecter au noeud pour récupérer les informations
allow ^192\.168\.1\.200$
#Port sur lequel le service est disponible
port 4949

Une fois le paramétrage terminé, on redémarre le client par la commande

service munin-node restart

Installer le superviseur

Le superviseur Munin s'installe avec :

aptitude install munin

Il faut ensuite indiquer au superviseur quels sont les noeuds à interroger et éventuellement donner des indications spécifiques pour les graphes à construire. Cela s'effectue dans /etc/munin/munin.conf :

[serveur_surveille1.domain.tld]
    address 192.168.1.45
    use_node_name yes

Le travail de génération des graphes et des pages HTML est effectué régulièrement grâce à une tâche cron (dont la fréquence pourra être modifiée dans le fichier /etc/cron.d/munin). Il est également possible de paramétrer le système pour générer les graphes lors des consultations à l'aide d'un recours à des scripts cgi - cela n'est pas détaillé ici. Les travaux de munin ne sont pas silencieux, les logs (bien pratiques pour comprendre une éventuelle panne) sont situés dans /var/log/munin/.

On redémarrer munin par

service munin restart

et après quelques minutes d'attente, les premiers graphes doivent être générés et accessibles dans /var/cache/munin/www/.

On pourra alors rendre accessible ce dossier au travers d'un serveur web bien paramétré !

Load munin

Pour aller plus loin avec les plugins sur le noeud

Tous les plugins disponibles sont regroupés dans /usr/share/munin/plugins/ et on pourra les rendre actifs par la commande :

ln -s /usr/share/munin/plugins/pluginchoisi /etc/munin/plugins/pluginchoisi

Pour tester un plugin et visualiser les données qu'il retourne, on pourra utiliser la commande :

munin-run postfix_mailstats

La configuration des plugins s'effectue dans le fichier /etc/munin/plugin-conf.d/munin-node suivant les instructions que l'on trouvera dans les en-têtes des fichiers de plugins.

Bonne surveillance de vos serveurs !