Supervision SMART de vos disques via Nagios
Date: 21/10/2011 | Catégories: Gstreamer,Hardware,Open-source,Reseau,Systeme | Tags: disk,disque,nagios,shinken,smart
Superviser l'espace disque des serveurs est une bonne chose... encore faut il que les données soient stockées sur des disques en bonne santé. Le but de ce billet est de mettre en place via Nagios/Shinken une supervision de l'état SMART renvoyé par l'outil Smartmontool.
Sur le serveur à superviser
Les pré-requis
La commande smartctl sera exécutée avec sudo, il faut donc l'installer si ce n'est pas déjà fait sur votre système:
[cce lang=bash"]
apt-get update
apt-get install sudo
[/cce]
Il fait aussi installer l'outil de vérification SMART : SmartMonTools.
[cce lang=bash"]
apt-get install smartmontools
[/cce]
Superviser quels disques ?
Pour savoir quels disques superviser, on peut utiliser la commande suivante (en root):
[cce lang=bash"]
fdisk -l
[/cce]
Exemple : sur un RAID1, on trouvera souvent /dev/sda et /dev/sdb. On prendra ce cas pour illustrer le reste de notre procédure.
Récupération et installation du plugin
Téléchargement du script :
[cce lang=bash"]
cd /etc/snmp/
wget https://raw.github.com/nicolargo/nagiosautoinstall/master/check_smart.pl
[/cce]
On donne les droits d'exécution :
[cce lang=bash"]
chmod 755 /etc/snmp/check_smart.pl
[/cce]
Modification de la configuration de SNMP
Pour prendre en compte Smart, il faut modifier la configuration de votre serveur SNMP (suivre cette procédure pour installer le serveur SNMPd sur votre machine) en éditant le fichier snmpd.conf et en y ajoutant les lignes suivantes :
[cce lang=bash"]
vi /etc/snmp/snmpd.conf
exec SmartSDA /etc/snmp/check_smart.pl -t -d /dev/sda
exec SmartSDB /etc/snmp/check_smart.pl -t -d /dev/sdb
[/cce]
Note : L'ordre des lignes est important !
La première ligne "exec" aura l'OID ".1.3.6.1.4.1.2021.8.1.101.1", la seconde ligne l'OID ".1.3.6.1.4.1.2021.8.1.101.2", etc...
Si vous utilisez déjà des commande exec dans le fichier snmpd.conf, les OID ne correspondront pas forcément avec ceux de cette procédure.
Redémarrage du service SNMP
[cce lang=bash"]
/etc/init.d/snmpd restart
[/cce]
Modification des sudoers
Il faut autoriser l'utilisateur snmp à exécuter la commande "/usr/sbin/smartctl".
Pour faire cela, il est nécessaire de modifier le fichier /etc/sudoers via la commande visudo et d'ajouter :
[cce lang=bash"]
snmp ALL= NOPASSWD:/usr/sbin/smartctl
[/cce]
Vérification du plugin
Pour voir si les résultats des checks sont bien rentrés dans la MIB SNMP du serveur, on teste avec cette commande :
[cce lang=bash"]
snmpwalk -c public -v 1 [IP du serveur à superviser] .1.3.6.1.4.1.2021.8.1
[/cce]
On devrait avoir quelque chose du genre :
UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
UCD-SNMP-MIB::extIndex.2 = INTEGER: 2
UCD-SNMP-MIB::extNames.1 = STRING: SmartSDA
UCD-SNMP-MIB::extNames.2 = STRING: SmartSDB
UCD-SNMP-MIB::extCommand.1 = STRING: /etc/snmp/check_smart.pl
UCD-SNMP-MIB::extCommand.2 = STRING: /etc/snmp/check_smart.pl
UCD-SNMP-MIB::extResult.1 = INTEGER: 0
UCD-SNMP-MIB::extResult.2 = INTEGER: 0
UCD-SNMP-MIB::extOutput.1 = STRING: SMART overall-health self-assessment test result: PASSED
UCD-SNMP-MIB::extOutput.2 = STRING: SMART overall-health self-assessment test result: PASSED
UCD-SNMP-MIB::extErrFix.1 = INTEGER: noError(0)
UCD-SNMP-MIB::extErrFix.2 = INTEGER: noError(0)
UCD-SNMP-MIB::extErrFixCmd.1 = STRING:
UCD-SNMP-MIB::extErrFixCmd.2 = STRING:
L'état SMART du disque sda est remonté sur l'OID : .1.3.6.1.4.1.2021.8.1.101.1
L'état SMART du disque sdb est remonté sur l'OID : .1.3.6.1.4.1.2021.8.1.101.2
Sur le serveur Nagios
Création de la commande
On défini une nouvelle commande en ajoutant les lignes suivantes dans le fichier commands.cfg:
[cce lang=bash"]
define command{
command_name check_smart
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -C public -o $ARG1$ -r $ARG2$
;command_example !.1.3.6.1.4.1.2021.8.1.101.1!PASSED
}
[/cce]
Syntaxe de la commande :
• -H Hostaddress : IP ou nom DNS de la machine à superviser
• -C public : Communauté SNMP (on peut la mettre en variable si on veut)
• -o $ARG1$ : OID SNMP à intérroger
• -r $ARG2$ : Comparaison avec une chaine de caratère, ici "PASSED" (attention de respecter la casse). Si dans le retour du check, on ne trouve pas la chaine de caractère "PASSED", le service va passer en "Critical".
Exemple de service
On défini ensuite le service:
[cce lang=bash"]
define host{
use generic-host
host_name monserveur
alias Serveur_Zimbra
address 192.168.0.100
}
define service{
use generic-service
host_name monserveur
service_description SMART_sda
check_command check_smart!.1.3.6.1.4.1.2021.8.1.101.1!PASSED
}
[/cce]
Il ne reste plus qu'à redémarrer votre service Nagios ou Shinken pour prendre en compte la configuration:
[cce lang=bash"]
sudo /etc/init.d/nagios restart
[/cce]