Exemples de check de services Nagios

Date: 31/07/2008 | Catégories: Open-source,Reseau,Systeme | Tags: ,,,,

Quelques exemples de services pour Nagios. N'hésitez pas à donner d'autres exemples via les commentaires ou ma fiche de contact.

J'intégrerai les exemples les plus pertinents au billet.

On menu du jour:

  • superviser un serveur Web (HTTP)
  • superviser un serveur Web sécurisé (HTTP over SSL)
  • superviser un serveur de messagerie (mail)
  • superviser un serveur VoIP (sip)
  • superviser un serveur de fichiers (samba)
  • superviser un serveur annuaire (LDAP)
  • superviser un serveur de base de données (mySQL ou pgSQL)
  • superviser un serveur réseau (DHCP et DNS)
  • supervision de disques RAID (carte hardware HP Proliant)
  • supervision de disques RAID 1 logiciel sous FreeBSD
  • supervision d'un serveur Asterisk (suivre ce lien)
  • supervision d'un trunk IAX sur un serveur Asterisk

< tous les plats sont accompagnés de frites et de salade >

Superviser un serveur Web

Nous utilisons pour cela le plugin check_http qui permet de tester si un serveur HTTP est bien lancé sur la machine à superviser.

Exemple:

define command{

command_name check_http

command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$

}

define host{

use generic-host

host_name monserveur

alias Serveur Web

address 192.168.0.100

}

define service{

use generic-service

host_name monbeauserveur

service_description HTTP

check_command check_http

}

Pour aller plus loin:

Le plugin utilise par défaut une requête sur le port TCP/80. Pour changer ce port, vous pouvez utiliser l’option -p et créer une nouvelle commande (à utiliser dans le check_command de votre nouveau service):

define command{

command_name check_http_8080

command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$-p 8080

}

Superviser un serveur Web sécurisé

Si votre serveur Web est sécurisé avec le protocole SSL. Il faut créer une nouvelle commande basée sur check_http.

Exemple:

define command{

command_name check_http

command_line $USER1$/check_http -S -I $HOSTADDRESS$ $ARG1$

}

define host{

use generic-host

host_name monserveur

alias Serveur Web

address 192.168.0.100

}

define service{

use generic-service

host_name monbeauserveur

service_description HTTPs

check_command check_https

}

Superviser un serveur de messagerie

Pour surveiller un serveur Mail proposant les protocoles SMTP, POP3 et IMAP (merci Dovecot), nous allons utiliser les plugins check_smtp, check_pop et check_imap.

Exemple:

define host{

use generic-host

host_name monserveur

alias Serveur de messagerie

address 192.168.0.100

}

define service{

use generic-service

host_name monserveur

service_description SMTP

check_command check_smtp

}

define service{

use generic-service

host_name monserveurmail

service_description POP

check_command check_pop

}

define service{

use generic-service

host_name monserveurmail

service_description IMAP

check_command check_imap

}

Superviser un serveur Asterisk

Pour surveiller un serveur SIP (par exemple votre serveur Asterisk), nous allons utiliser le plugin check_sip. n’étant pas fourni en standard, il faut d’abord l’installer puis le configurer avant de pouvoir l’utiliser comme service.

Installation:

cd /usr/src

wget http://www.bashton.com/downloads/nagios-check_sip-1.2.tar.gz

tar zxvf nagios-check_sip-1.2.tar.gz

cd nagios-check_sip-1.2

cp check_sip /usr/local/nagios/libexec/

chown apache:nagios /usr/local/nagios/libexec/check_sip

Configuration (à ajouter dans votre fichier commands.cfg de Nagios):

###### SIP#####

define command{

command_name check_sip

command_line $USER1$/check_sip -H $HOSTADDRESS$ -u sip:user@mondomaine.com

}

Il faut penser à mettre un nom d’utilisateur valide après l’option -u.

Et enfin un exemple de service:

define host{

use generic-host

host_name monserveur

alias Serveur SIP

address 192.168.0.100

}

define service{

use generic-service

host_name monserveur

service_description SIP

check_command check_sip

}

Superviser un serveur de fichiers

Un serveur de fichier peut se baser sur de nombreux protocoles. Nous allons nous focaliser sur un serveur Windows ou Linux (avec Samba), souvent utilisé en entreprise grâce au protocole SMB.

Configuration (à ajouter dans votre fichier commands.cfg de Nagios):

###### SMB #####

define command{

command_name check_smb

command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 445

}

Et enfin un exemple de service:

define host{

use generic-host

host_name monserveur

alias Serveur de fichiers

address 192.168.0.100

}

define service{

use generic-service

host_name monserveur

service_description SMB

check_command check_smb

}

Superviser un serveur LDAP

Un serveur est souvent le coeur d'un système d'information. C'est donc un poihnt critique à surveiller dans Nagios. Nous allons pour celà utiliser le service check_ldap qui prend en paramètres l'adresse du serveur LDAP ainsi que le DN à tester.

Configuration (à ajouter dans votre fichier commands.cfg de Nagios):

###### LDAP #####

define command{

command_name check_ldap

command_line $USER1$/check_ldap -H $HOSTADDRESS$ -b $ARG1$

}

Exemple de service:

define host{

use generic-host

host_name monserveur

alias Serveur LDAP

address 192.168.0.100

}

define service{

use generic-service

host_name monserveur

service_description LDAP

check_command check_ldap!"dc=mondomaine,dc=com"

}

Superviser un serveur de base de données

MySQL et pgSQL sont des serveurs de base de données open-source très répandus. Il existe donc deux plugins spécifiques check_mysql et check_pgsql disponible en standard avec Nagios. Personnellement, je n'utilise pas ces deux plugins car ils peuvent présenter une faille dans votre réseau. En effet, il utilise une requête SQL nécessitant un login/password. Hors ce couple apparaîtra dans la liste des processus lors de l'éxecution du plugin par Nagios.

Je préfère donc utiliser des plugins basés sur check_tcp.

Configuration (à ajouter dans votre fichier commands.cfg de Nagios):

###### SQL #####

define command{

command_name check_pgsql

command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 5432

}

define command{

command_name check_mysql

command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 3306

}

Exemple de service:

define host{

use generic-host

host_name monserveur

alias Serveur MYSQL

address 192.168.0.100

}

define service{

use generic-service

host_name monserveur

service_description MYSQL

check_command check_mysql

}

Superviser un serveur réseau

DHCP et DNS sont la base de votre infrastructure réseau. Nous allons donc utiliser les plugins check_dns et check_dhcp pour les surveiller de prêt.

Configuration (à modifier dans votre fichier commands.cfg de Nagios):

###### DNS #####

define command{

command_name check_dns

command_line $USER1$/check_dns -H www.google.fr -s $HOSTADDRESS$

}

###### DHCP #####

define command{

command_name check_dhcp

command_line  $USER1$/check_dhcp -s $HOSTADDRESS$

}

Pour le check_dns, Je vous conseille de mettre un serveur qui ne risque pas de disparaître du jour au lendemain dans les DNS mondiaux en paramètre -H.

Exemple de service DNS:

define host{

use generic-host

host_name monserveur

alias Serveur DNS

address 192.168.0.100

}

define service{

use generic-service

host_name monserveur

service_description DNS

check_command check_dns

}

Exemple de service DHCP:

define host{

use generic-host

host_name monserveur

alias Serveur DHCP

address 192.168.0.100

}

define service{

use generic-service

host_name monserveur

service_description DHCP

check_command check_dhcp

}

Supervision de disques RAID (carte hardware HP Proliant)

Le but est de surveiller le bon état des disques RAID d'un serveur HP Proliant sour FreeBSD. Nous allons passé par un script lancé par NRPE.

Configuration à faire sur le serveur ou se trouve les disques RAID:

cd /usr/local/libexec/nagios/

wget http://www.klintrup.dk/soren/proliant/check_smartarray.sh

chmod 555 check_smartarray.sh

Il faut également modifier ce script pour qu'il soit exécutable par l'utilisateur Nagios (le user utilisé par NRPE).

Ligne 6> PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin"

Ligne 7> DEVICES="$(sudo camcontrol devlist|grep "COMPAQ RAID"|sed -Ee 's/.*(pass[0-9]{1,3}).*/\1/')"

Ligne 14> DEVICENAME="$(sudo camcontrol devlist|grep ${DEVICE}|sed -Ee 's/.*(da[0-9]{1,3}).*/\1/')"

Ligne 15> DEVICESTRING="$(sudo camcontrol inquiry ${DEVICE} -D|sed -n -e 's/^[^<]*<\([^>]*\)>.*$/\1/p')"

Puis enfin ajouter la ligne suivante au fichier /usr/local/etc/sudoers:

nagios ALL = NOPASSWD: /sbin/camcontrol

Edition du fichier /usr/local/etc/nrpe.cfg:

Ajout de la ligne suivante:

command[check_raid]=/usr/local/libexec/nagios/check_smartarray.sh

Redémarrage du process NRPE:

/usr/local/etc/rc.d/nrpe2 restart

Configuration de Nagios, avec un nouveau service pour surveiller les disques RAID:

define service{
use                     generic-service
host_name               monserveuravecduraid
service_description     RAID
check_command           check_nrpe!check_raid
}

Supervision de disques RAID 1 logiciel sous FreeBSD

Le but est de surveiller le bon état des disques RAID 1 logiciel d'un serveur sous FreeBSD.

Configuration à faire sur le serveur ou se trouve les disques RAID:

Pour permettre le user nagios à lancer la commande de surveillance des disques RAIS, on doit ajouter la ligne suivante au fichier /usr/local/etc/sudoers:

nagios ALL= NOPASSWD: /sbin/gmirror status

Edition du fichier /usr/local/etc/nrpe.cfg:

Ajout de la ligne suivante:

command[check_raid]=/usr/local/bin/sudo /sbin/gmirror status | tail +2

Redémarrage du process NRPE:

/usr/local/etc/rc.d/nrpe2 restart

Configuration de Nagios, avec un nouveau service pour surveiller les disques RAID:

define service{
use                     generic-service
host_name               monserveuravecduraid
service_description     RAID
check_command           check_nrpe!check_raid
}

Supervision d'un trunk IAX sur un serveur Asterisk

Quand vous voulez relier deux serveurs Asterisk entre eux, il faut utiliser un trunk IAX. Un trunk IAX est en fait un tunnel UDP (port 4569). Si vous voulez vérifier qu'un serveur Asterisk est apte à recevoir un trunk IAX, il faut lui envoyer une commande "POKE" sur le port UDP/4569, il répondra normalement par un "PONG".

Le script check_iax permet d'automatiser ce test.

Une fois le script compilé (il est écrit en C) et installé dans le répertoire /usr/local/nagios/libexec, il faut créer la commande dans Nagios:

# 'check_iax' command definition, 800ms WARNING, 1000ms CRITICAL
define command{
command_name    check_iax
command_line    $USER1$/check_iax -H $HOSTADDRESS$ -w 800 -c 1000
}

Ensuite, il ne reste plus qu'a définir unservice associé à une machine hébergeant le serveur Asterisk.

define service{
use             generic-service
host_name        asterisk
service_description    IAX trunk
check_command           check_iax
}

Maintenant, a vous de jouer et de proposer de nouveaux exemples de services !