Catégories
Gstreamer Hardware Open-source Reseau Systeme

Supervision SMART de vos disques via Nagios

Disque durSuperviser 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]

Catégories
Nagios Open-source

Superviser l’espace disque avec Nagios via SNMP

Disque dur

Voici une méthode simple rapide et efficace (enfin plus rapide à mettre en place que NRPE) pour surveiller l’espace disque disponible de ses machines Linux/BSD/Windows à partir de Nagios en utilisant le protocole SNMP.

Les pré-requis sont les suivants:

  • avoir un Nagios correctement installé
  • la machine à surveiller doit héberger un serveur SNMP dont la configuration permette au serveur Nagios de lire les informations (l’accès read-only v1/v2 de SNMP est suffisant)
  • suivre la suite de ce billet 😉

Configuration de la machine à surveiller

Après avoir installé et configuré son serveur SNMP, il faut ajouter la ligne suivante au fichier de configuration snmpd.conf (la localisation de ce dernier est os dépendant):

[shell]
disk / 100000
[/shell]

PS: le deuxième paramètre permet de fixer le seuil en dessous duquel une alerte SNMP est remontée. Il n’est pas très important pour nous car c’est Nagios qui va générer cette alerte avec nos propres valeurs.

On doit bien sûr relancer le service snmpd pour lire la configuration, par exemple:

[shell]
/etc/init.d/snmpd restart
[/shell]

Configuration du serveur Nagios

La première chose à faire est de vérifier que l’on arrive bien à récupérer les informations SNMP sur la machine à surveiller (d’adresse IP 192.168.0.200 dans notre exemple). Pour cela on peut utiliser la commande suivante:

[shell]
snmpget -v 1 -c public 192.168.0.200 .1.3.6.1.4.1.2021.9.1.9.1
UCD-SNMP-MIB::dskPercent.1 = INTEGER: 32
[/shell]

La commande a réussi. On a bien récupéré la valeur 32 par SNMP. Donc On a 32% d’espace disque occupé sur le disque de la machine 192.168.0.200.

On configure Nagios de la manière suivante, on édite le fichier commands.cfg:

[shell]
#################
# check_snmp_disk
#################

# Check free disk space using SNMP (add the "disk 1000000" line to the snmpd.conf)

define command{

command_name check_snmp_disk

command_line $USER1$/check_snmp -H $HOSTADDRESS$ -o .1.3.6.1.4.1.2021.9.1.9.1 -C $ARG1$ -w $ARG2$ -c $ARG3$ -u "% used"

}
[/shell]

Puis on configure le service pour la machine à surveiller (dans un autre fichier comme par exemple services.cfg):

[shell]

define service{
use generic-service
host_name Ma_Machine_192.168.0.200
service_description DISK SPACE
check_command check_snmp_disk!public!90!95
}

[/shell]

La fonction check_snmp_disk prend 3 paramètres:

  • le nom de la communauté SNMP (public)
  • le seuil au dessus duquel un warning est généré par Nagios (90%)
  • le seuil au dessus duquel un error est généré par Nagios (95%)

Il ne reste plus qu’a relancer Nagios pour prendre en compte la configuration !