Auteur:
NicoLargo

Date:
31/07/2008

Catégories:
Open-source
Reseau
Systeme

Tags:





Exemples de check de services Nagios

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 !

17 commentaires


  1. feilong, le 1/08/2008 (#4746)

    Pour surveiller les espaces disque AS400 (iSeries) via snmp (check_snmp_storage.pl)

    define command{
    command_name check_ASP_AS400
    command_line $USER1$/$USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ -C public -m ‘System ASP’ -w 70 -c 80 -f -T pu
    }

    define service{
    use generic-service
    host_name MoniSeries
    service_description ASP
    check_command check_ASP_AS4OO
    }


  2. Olivier, le 13/08/2008 (#4799)

    Bonsoir Nico, bonsoir à tous,
    Un grand bravo aux nombreux billets que tu fournis Nico.
    Ils m’ont été d’une grande aide même si, pour installer nagios 3.0.3, je n’ai pu aboutir en les suivants à la lettre.
    (pas assez explicite, à mes yeux, quant aux prerequis pour Ubuntu .8.04.LTS.
    Abscence de certains liens symboliques cf http://www.nagios-wiki.org )

    En effet je manquais d’info quant aux prerequis (serveur LAMP & librairies DIVERSES) pour installer sur Ubuntu 8.04.LTS…Je suis un NOVICE CONFIRMé ;-) sous Linux

    J’ai abouti en ayant recours à tes billets, ton blog & d’autres sites, notamment nagios-wiki.org, après avoir corrigé qques erreurs sur la procédure stipulée sur ce dernier. Encore un grand merci.

    Je profite de ce message pour t’indiquer qu’une erreur semble s’etre glissée dans ta procédure concernant la commande check_http_8080.
    En effet , sauf erreur de ma part lors de mes tests et contre tests, il faut IMPERATIVEMENT LAISSER UN ESPACE avant -p

    SINON SYNTAXIQUEMENT LA CONFIGURATION EST OK MAIS LE COMPORTEMENT DE NAGIOS SE RAMENE A UN COMPORTEMENT PAR DEFAUT c’est à dire Adresse=HOSTADRESS et port=80 ce qui engendre “Connexion refusée” en commentaire sur le service check_http.

    Il me reste à tester encore qques services, notamment service MySql. Ce sera mon menu de demain, puis je pense que j’en aurai terminé avec nagios…et je poursuivrai avec pnp…donc à bientôt je pense…
    PS J’ai été effrayé par l’instal de cacti…peut etre y reviendrai-je + tard ;-)


  3. frederic sidler, le 10/09/2008 (#4986)

    Pour surveiller un serveur web sur un port différent que le port 80 on peut aussi changer la commande originale en mettant le numéro de port en argument
    command_line $USER1$/check_http -H $HOSTADDRESS$ -p $ARG1$
    et ajouter le service suivant
    host_name http://www.mixin.com
    service_description check process on http://www.mixin.com
    check_command check_http!3500
    Celà évite de dupliquer la commande et de pouvoir l’utiliser pour différent service sur un même serveur web


  4. goldenpark, le 17/11/2008 (#5361)

    Bonjour, slt tt le monde
    jé installé nagios-3.0.3 mé j arrive pa a continuer l’installation des plugins-nagios-1.4.12 et voila la procedure ke jé fai:
    #./configure –prefix=/usr/local/nagios –with-cgiurl=/nagios/cgi-bin
    #make
    il commence a compiler ………
    jusqua cett erreur
    make[1]: *** [check_pgsql.o] Erreur 1
    make[1]: Quitte le répertoire `/usr/src/nagios-plugins-1.4.12/plugins’
    make: *** [check-recursive] Erreur 1

    #make install
    check_pgsql.c:44:30: pg_config_manual.h: Aucun fichier ou répertoire de ce typemake[1]: *** [check_pgsql.o] Erreur 1
    make[1]: Quitte le répertoire `/usr/src/nagios-plugins-1.4.12/plugins’
    make: *** [install-recursive] Erreur 1
    la mm erreur aussi

    il ya des check ki sont bien installés comm ping .. et d’autres ne sont pas installés comm check_snmp,check_swap,…
    svp si kelkun a une idée a ce propos et merci d’avance


  5. Slyers, le 6/01/2009 (#5554)

    Bonjour à tous,

    Merci à nico pour ce blog qui est une bouée pour tous les utilisateurs de Nagios, et qui permet d’échanger son expérience.
    Concernant ce dernier point, j’aurais justement besoin d’un coup de main.
    Je travaille sous Debian, avec Nagios 3.0.2, je supervise plus d’une centaine de service, j’ai donc mis en place les notifications (mails et sms), j’ai pataugé pour pnp (mais ça fonctionne), donc jusque là tout va bien.
    Le soucis, c’est que je souhaiterais superviser mes bases Oracle réparties sur d’autres serveurs. Déjà, ayant contacté un support technique d’un partenaire Oracle, j’ai installé le serveur Oarcle sur ma machine afin de pouvoir profiter de la commande tnsping, non inclus dans les clients…
    Ensuite je l’ai configuré proprement (suivant tuto oracle), et j’arrive à utiliser sans problème le check_oracle en ligne de commande avec tous mes utilisateurs (root, nagios, oracle, www-data….) mais quand j’essaie de passer ce test dans Nagios, l’interface web me dit ” Cannot determine ORACLE_HOME for sid MABASE ” comme si je n’avais pas installé Oracle. Je précise aussi que j’ai configuré correctement le tnsnames.ora (je le sais car ça fonctionne en ligne de commande).

    Donc si quelqu’un peut m’apporter son aide, ce serait formidable. Merci d’avance.


  6. Slyers, le 6/01/2009 (#5555)

    Re-bonjour à tous,
    Après un petit tour sur le net, je vais pouvoir vous faire profiter de la résolution de mon problème.
    Comme je l’ai dit, j’utilise Nagios 3.0.2.
    Voilà donc la soluce pour monitorer vos bases Oracle, dans le cas où ça fonctionne en ligne de commandes mais pas dans l’interface web:
    Dans resource.cfg, mettre:
    $USER2$=ORACLE_HOME=chemin_absolu_de_ORACLE_HOME[un espace ici] /usr/local/nagios/libexec
    Voila, et le tout sur la même ligne.
    Pour connaitre le ORACLE_HOME: echo $ORACLE_HOME
    Pour info, j’ai trouvé la soluce ici: http://forums.bfl-solutions.eu/viewtopic.php?p=30832#30832

    Bonne journée, Tcho.


  7. NicoLargo, le 14/01/2009 (#5612)

    @tous: juste pour vous signaler l’ouverture du forum de Nicolargo ou vous pouvez poser vos questions !

    http://forum.nicolargo.com

    A bientôt !

    Nicolargo


  8. arslan, le 11/02/2009 (#5909)

    Bonjour à tous,
    je veux faire un check file sur ma machine local .
    j’ai ajouter les commande pour le check sur les fichier

    services_nagios2.cfg et localhost_nagios2.cfg

    mais ca n’afiiche rien dans la page web de nagios

    que dois je faire?

    # FILE
    define hostgroup {
    hostgroup_name file-servers
    alias FILE servers
    members localhost
    }

    # recherche fichier
    define service {
    hostgroup_name file-servers
    service_description FILE_age
    check_command check_file_age -f /home/asiyoucef/Bureau/test
    use generic-service
    notification_interval 0 ; set > 0 if you want to be renotified
    }


  9. NicoLargo, le 11/02/2009 (#5910)

    @arslan: vérifie que les droits de tes fichiers sont bon. Il ne faut pas oublier que Ngios lance les plugins en utilisant un utilisateur spécifique…

    Tu peux aussi poser ta question sur le forum:

    http://forum.alcasat.net


  10. arslan, le 11/02/2009 (#5917)

    Merci nicolargo. j’ai réussi a intégrer le plugin.
    Il fallait créer in fichier check-file.cfg et l’ajouter dans le dossier des config.
    ciao


  11. SUIKOX, le 4/03/2009 (#6087)

    Bonjour,

    je veux monitorer un serveur asterisk et j’ai mis ceci pour les droits comme dans le tuto

    /usr/src/nagios-check_sip-1.2# chown apache:nagios /usr/local/nagios/libexec/check_sip

    chown: usager invalide: `apache:nagios’

    est-ce que je peux remplacer apache par www-data ?


  12. destroyedlolo, le 3/08/2009 (#6707)

    Bonjour et merci pour ces exemples.

    Pour tester ma base PostgreSQL, j’utilise quant meme check_pgsql car connecte uniquement le port TCP (ou le pipe) ne me parait par pertinent car ca ne teste pas si la database est réactive.
    (Je n’ai jamais eu ce genre de probleme avec PostgreSQL mais j’ai deja eu des pb avec d’autres applies qui “hangs” avec évidement les ports toujours présents).

    La solution que j’utilise est donc :
    - je conserve l’authentification par “ident”
    - je cree un user “nagios” sur la base que je veux monitorer comme ca, je teste reelement cette base et non la base template … juste au cas ou qq’un a droper ma base ;D
    - ce user “nagios” n’a que le droit “CONNECT” et ne peut donc rien faire sur la db …

    Voili voila …

    Bye

    Laurent


  13. Moxxxxx, le 9/09/2009 (#6829)

    Bonjour,

    j’ai un peu de mal avec les “check” sur Nagios.

    Le ping et le http fonctionnent bien, mais le snmp-linux-load_average, le snmp-linux-memory, le snmp-linux-swap (dans les templates) m’affichent “unknow” suivi d’un mesage d’erreur :
    - “UNKNOWN: No response from remote host” pou le check load ;
    - “Utilisation:check_snmp -H -o [-w warn_range] [-c crit_range]” pour le check memory ;

    J’ai aussi un message “check_tcp: Le numéro du port doit être un entier positif” pour les check tcp.
    Et ce message “Utilisation: check_ldap -H -b [-p ] [-a ] [-D ]” pour le check ldap.

    je pense que tout cela à avoir avec le snmp, mais je ne sait pas trop comment régler le problème. Le service snmp installé sur les serveurs est bien configuré pour recevoir des requêtes du réseaux et reçoit les requettes envoyé par Nagios.

    Mais j’ai tous ces messages d’erreurs sur Nagios.

    Merci d’avance

    P.S.: pouvez-vous me dire ce que représentent les “argument example” dans les lignes de commande. Est-ce que cela à avoir avec les $ARG1$, $ARG2$, … ?


  14. Ben, le 2/10/2009 (#6917)

    En terme de check nagios, j’avais créé un module qui check si le démon rsync est activé sur un serveur.

    Je me souviens que je faisais le check en 2 étapes.

    La première vérifiait que le port était ouvert en TCP et s’il l’était, je lançais une commande rsync erronée sur le serveur pour voir si le démon répondait bien.

    J’ai aussi adapté le script check_mail qui récupère le nombre de messages en fil d’attente pour l’adapter à nullmailer.

    Mon problème actuel est de lancer une commande lorsqu’un service passe critique et d’en lancer une autre lorsque le service revient à la normale, de sorte à injecter une variable/script pour relancer un service sur la machine dont le service est passé critique.

    Je ne sais pas si c’est configurable ? ou si le mieux est de surcharger la commande qui check le service pour y ajouter ce processus supplémentaire.

    Existe t il un moyen simple ?
    Ou peut être de faire cela via un autre système ?


  15. feilong, le 2/10/2009 (#6918)

    Regarde du coté du paramètre “Event Handlers” de nagios qui te permets de lancer un shell lors d’un changement d’état d’un service….


  16. arnaudde, le 27/01/2010 (#7525)

    bonjour
    je souhaite monitorer mon serveur as/400 via nagios.
    J’ai récupéré des pluging via http://www.stic-online.de/stic/html/as400en.html
    J’obtiens bien qq retour comme le nb de jobs actifs, cpu, mem, Storage
    Tout ca marche via java et une connexion distante via telnet

    N’etant pas un dev java, je m’oriente vers une auter méthode car je souhaite pouvoir faire la meme chose autrement comme par ex savoir si un job est actif ou pas.
    en commande as400 , c’est : WRKACTJOB SBS(R3_01) JOB(SAPOSCOL)

    j’ai reusssi à avoir un retour intéressant via rexec :
    rexec -l nagios -p nagios ipmonserveur “WRKACTJOB SBS(R3_01) JOB(SAPOSCOL)”
    –> Le travail SAPOSCOL Utilisateur QUA01 est *ACTIVE dans R3QUA400/R3_01.

    mais je ne sais pas comment récuperer tout ca et l’intégrer dans Nagios.
    Quelqu’un peut-il m’aider ?

    Arnaud


  17. arnaudde, le 1/02/2010 (#7555)

    j’ai trouvé la solution
    créer des pluging personnels en dev un bash qui controle le retour de la commande lancée par REXEX
    rexec -l nagios -p nagios 172.16.X.X “WRKACTJOB SBS(R3_02) JOB(SAPOSCOL)”


Laisser un message

Les informations saisies resteront privées.