Exemples de check de services Nagios
Date: 31/07/2008 | Catégories: Open-source,Reseau,Systeme | Tags: check,exemple,nagios,plugin,service
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 !