22
juin 2009

[Munin] Plugin pour le LVM

Munin est un programme très léger et très facile à utiliser. Son rôle est de générer des graphiques sur telle ou telle élément d'une machine. Un peu comme MRTG (plus développé il me semble) et 100 fois plus léger que RRDtools. Pour les besoins de mes serveurs j'ai cherché une solution pour la partie LVM, un plugin existait mais je n'ai jamais réussi à le faire fonctionner, basé sur l'existant je l'ai fais évolué.

Le but de ce plugin n'est pas de connaître l'espace occupé par vos données dans un volume logique mais la répartition et l'espace qu'occupe vos volumes logiques dans un groupe de volume.

Le script est à copier dans le répertoire /usr/share/munin/plugins (sur CentOS). Nommez le lvm_ (attention à l'underscore _ , car une commande lvm existe). Dans mon cas j'ai plusieurs groupe de volumes à surveiller, la solution à été de faire plusieurs liens dans le répertoire /etc/minin/plugins/ qui porte le nom de chacun de mes groupes de volumes. Par exemple :

lrwxrwxrwx 1 root root 29 jun 16 15:32 VolGroupBackup ->; /usr/share/munin/plugins/lvm_
lrwxrwxrwx 1 root root 29 jun 16 15:23 VolGroupSys ->; /usr/share/munin/plugins/lvm_
lrwxrwxrwx 1 root root 29 jun 16 15:33 VolGroupUsers ->; /usr/share/munin/plugins/lvm_

Maintenant le script

#!/bin/sh
#
# Script to monitor disk usage.
#
# By PatrickDK
# Modify by flipflip
#
# Parameters understood:
#	config (required)
#	autoconf (optional - used by munin-config)
#
# $Log$
#
# Magic markers (optional - used by munin-config and installation
# scripts):
#
#%# family=auto
#%# capabilities=autoconf

VG=`basename $0`
I=""
LVS=$(which lvs)
VGS=$(which vgs)
AWK=$(which awk)
GREP=$(which grep)
	
clean_name() {
	echo $1 | sed 's/[\/.-]/_/g'
}

case $1 in
	autoconf)
		if [ -x $LVS ]; then
			echo yes
			exit 0
		elif [ -x $VGS ]; then
			echo yes
			exit 0
		else
			echo no '(lvm (lvs or vgs) programs not found)'
			exit 1
		fi
		exit 0
	;;

	config)
		echo "graph_title Logical Volume usage $VG"
		echo "graph_args --base 1024 --lower-limit 0"
		echo "graph_category disk"
		echo "graph_info This graph shows disk usage on the machine."
		echo "free.label free"
		echo "free.draw AREA"
		$LVS --units b --nosuffix --noheadings | $GREP $VG | while read I; do
			NAME=`clean_name $I`
			echo -n "$NAME.label "
			echo $I | $AWK '{ print $1 }'
			echo "$NAME.draw STACK"
		done
		exit 0
	;;

	*)
		I=`$VGS --units b --nosuffix --noheadings | grep $VG`
		echo -n "free.value "
		echo $I | $AWK '{ print $7 }'

		$LVS --units b --nosuffix --noheadings | $GREP $VG | while read I; do
			NAME=`clean_name $I`
			echo -n "$NAME.value "
			echo $I | $AWK '{ print $4 }'
		done
		exit 0
	;;
esac

Pour accéder aux commandes vgs et lvs munin doit être exécuter en root mais c'est vraiment pas propre. La solution est de créer un fichier de configuration dans le répertoire /etc/munin/plugin-conf.d. Je l'ai nommé VolGroup pour qu'il correspondent à ça :

[VolGroup*]
	user root

Maintenante redémarrer le daemon munin-node et patienté quelques minutes. Un jolie graphique vous donnant la répartition de vos Volume logique dans vos volumes groupe devrait apparaître et ressembler à ça :

Il ne vous reste plus qu'à patienter...

Administrateur système de métier mais surtout curieux de découvrir de nouvelles technos très orientées DIY. A mes heures perdues je fais de la photo avec toujours une petite envie d'intégrer des DIY sous forme de timelaps à base de raspberry.

Écrire un commentaire

Quelle est la quatrième lettre du mot rcfeg ? :

[Munin] Plugin pour le LVM - Philippe Maladjian - Péripéties bucoliques d'un administrateur systèmes au royaume de la virtualisation, du stockage et accessoirement photographe à ses heures perdues