Creation d’un plugins pour Nagios

Date: 6/03/2007 | Catégories: Reseau | Tags: ,,

Nous allons dans ce post écrire un plugins (très simple) pour Nagios. Le corps de ce plugins pourra vous servir de base pour réaliser des plugins plus complexes.

Suite à un post sur l'installation de Nagios, je me suis penché sur l'écriture d'un plugins permettant de vérifier qu'un processus est bien lancé sur un serveur distant.

Voici ce que je l'on attend de notre plugins:

  • Ouvrir une session SSH vers le serveur distant
  • Lancement d'un script vérifiant si un processus (testd) est lancé
  • Renvoie de l'état du processus (OK / ERROR / WARNING)
    • OK: Le processus (testd) est lancé et fonctionne correctement
    • ERROR: Le processus n'est pas lancé
    • WARNING: Le processus est lancé mais ne fonctionne pas correctement

Avant d'entrer dans le vif du sujet, il faut savoir que les plugins Nagios sont de simple "scripts shell" retournant un code de status. Ces plugins sont localisés dans le répertoire /usr/lib/nagios/plugins (sous Linux). Un petit coups de ls donne la liste des plugins installés par défaut:

# ls
check_http check_pgsql check_smtp check_udp2 check_imap check_mysql check_ping check_spop check_udrelay term_power check_clamd check_jabber check_mysql_query check_pop check_ssmtp check_dns check_ldap check_nntp check_scheduler check_tcp check_ftp check_ldaps check_nntps check_simap check_udp ...

Nous allons donc dans un premier temps créer le plugins qui va lancer la commande sur le serveur distant:

# vi check_testd
#!/bin/sh

##################################################################
# Creation: Nicolargo
# Last Modification:
# This script checks testd daemon is running on a server
##################################################################

ssh nagios@$1 /usr/local/bin/nagios_testd.pl

Une fois l'automatisation du SSH effectuée entre votre serveur Nagios et votre serveur distant (il ne faut pas que le script demande le password...). Il reste à créer le script nagios_testd.pl (je l'ai developpé en perl mais rien n'empêche de le faire en SH) dans le réperoire /usr/local/bin du serveur distant.

# vi /usr/local/bin/nagios_testd.pl
#!/bin/sh

##################################################################
# Creation: NicoLargo
# Last Modification:
# This script is polling if testd daemon is running
##################################################################

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

ps auxw | grep [t]estd | grep -v nagios > /dev/null
STATE=$?
if [ "$STATE" = "$STATE_OK" ]
then
echo "TESTD OK"
exit 0
else
echo "TESTD Failed"
exit $STATE_CRITICAL
fi

Pour tester votre plugins, rien de plus simple, il suffit de lancer la ligne de commande sur votre serveur Nagios:

# /usr/lib/nagios/plugins/check_testd.sh monserveurdistant.mondomaine.com
TESTD OK

Si cela ne fonctionne pas, il faut d'abord vérifier que les fichiers ont les bons droits (lecture et execution) et que le SSH fonctionne correctement entre les deux machines.

Une fois le plugins validé, il ne reste plus qu'a l'intégrer dans vos fichiers de configuration.

# vi /etc/nagios/checkcommands.cfg
...
# 'check_testd' command definition
define command{
command_name check_testd
command_line $USER1$/check_testd $HOSTADDRESS$
}
...

et enfin:

# vi /etc/nagios/services.cfg
...
define service{
use generic-service
host_name monserveurdistant.mondomaine.com
service_description TESTD
check_command check_testd
}
...

Voili a+

  • looping

    Bonjour Nico, j’ai terminé l’install de NAGIOS et j’ai ajouté DEUX SERVEURS,

    J’ai deja configuré l’espace disque, le CPU LOAD etc etc

    Cependant j’aimerais Rajouter le Ping etc.. Il faut configurer dans le fichier commands.cfg

    Pourrais tu m’indiquer où je pourrais trouver un tutoriel surement dejà fait.

    Merci

  • sicky

    normalement la commande PING est de base.
    Tu as juste a mettre le service associé au ton hote (ici , je l’ai appelé « serveur ») :

    define service {
    use generic-service
    host_name serveur
    service_description Ping test
    check_command check_ping!100.0,20%!500.0,60%
    notification_interval 30
    notification_period 24×7
    notification_options c,d
    contact_groups admins
    }

    naturellement , tu peux modifier l’intervalle de natification , ainsi que les options (c=critical , d=down , etc etc…)

  • Benjamin

    Bonjour,
    Je cherche une liste de plugins pour Windows qui fonctionne avec NRPE.

    JE m’explique j’ai mon appli Nagios qui est installé sur une Debian, et grace à check_nrpe je vais faire des vérifications sur des machines windows, mais je n’est trouvé que très peu de plugins.

    en Faite j’ai seulement : cpuload_nrpe_nt.exe ,diskspace_nrpe_nt.exe ,memload. Je voudrais savoir s’il existe des plugins tout pret comme par exemple check_users compatible avec NRPE

    Cordialement.
    Benjamin

  • franck

    Bonjour ,

    Tout d’abord, je souhaitais te remercier pour toutes tes explications, elles m’ont bien souvent été utiles.

    Je souhaiterais faire remonter dans Nagios une alerte concernant le résultat d’un traitement. Pour faire simple, je ne récupère que la dernière ligne et je vérifie s’il y un OK ou un ERREUR dedans. J’aimerais donc que Nagios puisse le faire apparaître avec les couleurs adéquates. J’ai donc modifié un peu ton script de ci-dessus, et celui ci fonctionne parfaitement en bash , pour le check mais nagios n’arrive pas à l’interpréter. Aurais tu une petite idée ?

    le script :

    #!/bin/sh

    STATE_OK=0
    STATE_WARNING=1
    STATE_CRITICAL=2
    STATE_UNKNOWN=3
    STATE_DEPENDENT=4

    tail -1 /var/www/html/log_test | grep OK # > /dev/null
    STATE=$?
    if [ « $STATE » = « $STATE_OK » ]
    then
    echo “OK”
    exit 0
    else
    echo “Failed”
    exit $STATE_CRITICAL
    fi

    Nagios me renvoie un « (Return code of 127 is out of bounds – plugin may be missing) « .

    J’ai défini (très sommairement je pense ) commands.cfg et services.cfg

    define command {
    command_name /usr/local/nagios/libexec/erreur_log.sh
    command_line /usr/local/nagios/libexec/erreur_log.sh
    }
    define service{
    use template-services
    host_name machine
    service_description log_test
    check_command /usr/local/nagios/libexec/erreur_log.sh
    }

    Cela ne convient pas, mais je ne sais pas vraiment ce qu’il faut faire.

    Merci pour ton aide

    Franck

  • @franck: Deux choses:

    La première:

    # sudo chown nagios /usr/local/nagios/libexec/erreur_log.sh
    # sudo chmod 755 /usr/local/nagios/libexec/erreur_log.sh

    Puis la seconde au niveau de la conf:

    define command {
    command_name erreurlog
    command_line /usr/local/nagios/libexec/erreur_log.sh
    }
    define service{
    use template-services
    host_name machine
    service_description log_test
    check_command erreurlog
    }

    A essayer…

  • franck

    Merci

    Cela fonctionne parfaitement. Je vais pouvoir modifier toutes les alertes un peu tangeantes ….

  • Nem0

    Merci pour ce tuto Nico 🙂

  • Nem0

    Ha si j’ai une ptite question :
    Comment peut on envoyer une variables au programme et la récupérer?
    J’avait pensé a:
    ssh nagios@$1 /usr/local/bin/nagios_testd.pl nagios@$2
    en définissant dans centreon check_Tests $ARG1 et dans le service mettre dans argument !10 par exemple mais ca ne marche pas.

  • Nem0

    Oki c’est bon j’ai trouvé:

    ne pas mettre nagios@$1 mais simplement $1 par exemple et le récupérer dans le programme grace à la variable $1

  • atef

    Vraiment Merci 😀

  • ThomasR

    Bonjour,

    J’ai poste quelque chose sur votre forum et arrive pas a avoir de reponse. Je le copie colle ici en esperant avoir une reponse de votre part. Merci.

    Bonjour,

    Apres avoir bataille haut et fort, j’ai craque et decide de tout reinstaller sans passer par la commande yum qui en fait avait installe une trop vieille version de nagios…

    Mais maintenant tout fonctionne a merveille : j’arrive a visualer mon serveur nagios et celui que je voulais monitorer.

    Cependant, je suis un peu decu, je pensais pouvoir monitorer le serveur windows beaucoup plus precisement c’est a dire :
    – avoir des courbes en temps reel des differents metrics (CPU, Memory Usage, VM Memory)
    – pouvoir monitorer les processus java.exe, httpd.exe,mysql.exe … (CPU, Memory Usage,…)

    Cela est-il possible ?

    Si je dois ajouter des plugins externes qui puissent peut etre repondre a mes attentes par exemple ceux presents dans cette page http://exchange.nagios.org/directory/Pl … s/Windows, Comment dois-je faire pour les integrer ? Je ne trouve pas de tutoriel sur cette partie la.

    En vous remerciant encore, Nagiosement

    Thomas.r

  • @ThomaR: tout est dit dans ce billet, il faut dans un premier temps récupérer le plugin en question et le mettre dans le répertoire /usr/local/nagios/libexec/ (ou /usr/lib/nagios/plugins/) . Puis lui donner les même droits que les autres fichiers de ce répertoire. Ensuite le déclarer dans le fichier /usr/local/nagios/etc/objects/commands.cfg (ou /etc/nagios/checkcommands.cfg) et enfin l’utiliser dans un de vos fichiers de conf.

    Pour surveiller vos machines WIndows je vous conseille cependant la lecture de ce billet:

    http://blog.nicolargo.com/2007/10/surveiller-vos-serveurs-windows-avec-nagios.html

    • wassim

      salut nicolargo
      je veux savoir si c’est possible de détecter automatiquement les hosts avec nagios ou centreon

  • ThomasR

    Salut NicoLargo,

    Encore merci pour le blog le forum et les differents tutoriels disponibles.
    J’aimerai juste insister sur un point que j’ai souleve dans le commentaires que j’ai mis :
    Peut-on monitorer avec Nagios les differents processus presents sur une machine et recuperer les valeurs de leur consommation en ressources ? Connais tu un plugin qu’il le fait ou dois je en creer un ?

    Merci beaucoup pour ton intervention

  • @ ThomasR: La réponse est oui. Dans le lien que je t’ai donné dans mon précédant message, tu as un exemple ou le serveur nagios supervise la charge CPU, la mémoire et la consommation disque d’un PC sous WIndows. Pour al supervision de processus Java, je pense que le mieux est de créer ton propre plugin.

  • sawsen

    slt tt le monde,
    je veus dévlopper un plugin d’envoi d’un mail en cas du problème il n’y pas un tuto qui m’aide au devloppemen du plugin?
    merci d’avance

  • sawsen

    slt tt le monde,
    je veu devlopper un plugin d’envoi un mail en cas d’alerte, il n’y pas un tuto qui m’aide à devlopper ce plugin??
    au moin la structure générale du dévloppemen du plugin
    merci d’avance

  • Eugène Valentin

    Bonjour Nicarlago!

    J’ai lu avec beaucoup d’intérêt tes nombreux tutoriels et interventions au sujet de

    Nagios et modules associés, et je pense de tout coeur que tu pourras m’aider dans le

    cadre du projet sur lequel je suis en ce moment.

    En effet je suis un administrateur systèmes unix et réseaux, en fonction dans une

    grande entreprise, et en pleine redaction de mon mémoire de DEA portant sur la

    supervision. je dois mettre sur pied un outil de supervision basé sur Nagios pour

    superviser et gérer le système d’information de l’entreprise.

    Je n’ai qu’une expérience assez basique de Nagios et le but de ce recours à toi est

    d’avoir tes indications et tes éclairages afin de monter une solution sur le moteur

    Nagios qui répondra au cahier de charge dressé pour mon projet.

    Suite à la rapide évolution de notre système informatique, la direction informatique

    a décidé avec l’accord de la hiérarchie de migrer le système de supervision vers un

    outil plus ouvert et intégrant l’approche service de la bibliothèque ITIL.

    Pour être plus précis:

    La société en question et ses filiales disposent d’une Infrastructure informatique

    de plus de 500 noeuds reparties sur au moins dix sites distants, constituée:

    d’actifs réseaux( Routeurs Cisco, Switchs Cisco, Pare-feu Fortigate, Optimiseur de

    WAN Juniper, Analyseur de trafic Blue Coat, Concentrateur VPN Juniper);

    Serveurs(Serveurs x86 avec Microsoft Windows Server comme OS, Serveur i5 avec IBM

    OS/400 comme OS); PABX Alcatel et Siemens; Bandothèques.
    A ces ressources j’ajoute au niveau applicatif métier:

    -Une ERP utilisant IBM http Server(IHS) comme serveur we;IBM WebSphere Application

    Server(WAS) comme serveur d’applicatio; IBM DB2 comme SGBD;

    -Une solution de collecte des informations de facturation utilisant: Les outils ETL

    de MS SQL Server et les outils FTP de MS Windows et i5;

    -Des solutions d’entreposage et de fouille de données basée sur MS SQL Server,

    Crystal Report de Business object

    -Une solution de messagerie basée sur Lotus Domino

    -Une solution de gestion électronique de données utilisant Apache Tomcat comme

    serveur Web, ProstgresSQL comme SGBD

    -Une application de paie fonctionnant sur OS/400

    -Des applications d’infrastructures comme l’annuaire, le contrôleur de domaine, le

    DNS, des proxys Internet, etc. basé sur les solutions serveurs windows

    -Une solution centralisée d’antivirus basée sur kapersky

    -D’autres applications métiers.

    La solution envisagée doit être open source et bâti sue le logiciel nagios, et

    disposant des modules suivants:

    -Un module de monitoring permettant de recueillir les informations sur l’état des

    ressources, des services et applications.

    -Un module de notification permettant d’envoyer des messages via plusieurs média qui

    implémentera une logique d’escalade

    -Un module de visualisation qui permettra d’afficher sur un écran les principaux

    processus, applications et ressources du Système d’Informartion de l’entreprise. On

    devra également avoir des vues spécialisées par type de d’utilisateur et par niveau

    de responsabilité.

    -Un module de reporting qui permettra de produire des rapports sur la disponibilité,

    l’utilisation des processus métiers, des applications et des ressources de Système

    d’Information, plus généralement les états des contrats des services (SLA) de la

    Direction des Systèmes d’Information.

    -Un module d’analyse de problème qui permet d’analyser via une console unifiée les

    évènements enregistrés via les principaux protocoles de journalisation.

    -Un module de gestion de données qui permettra d’archiver les données de supervision

    à des fréquences définis par configuration.

    Je sais que la plupart des exigences mentionnées ici peuvent être gérées en natif

    sur nagios, bien entendu en dévellopant éventuellement les scripts qui ne viennent

    en fonction des besoins. Mais ma préocupation est la suivante:

    -Est-il de superviser les processus métier sous le moteur Nagios? (Si oui petit

    détail stp)

    -Est-it possible pour le module de visualisation, d’avoir par exemple sur un grand

    écran (>42 pouces) plusieurs vues de façons simultatnées? (Si oui avec Nagios même

    ou faut il lui coupler un deuxième outil pour cette fin?)

    -Quelle composition peut-tu me proposer pour avoir une solution complète respectant

    ce cahier de charge? (Un couoplage Nagios-Centrion, Nagios-Munin…….)

    En fait je souhaiterais que tu me donnes quelques indications partiques comme par

    exemple des préréquis s’il en faut pour la surveillance des OS 400; et une petite

    recette sur les outils que je peux composer pour développer La solution. je penche

    aussi pour le déploiement sur ubuntu, je ne sais pas si tu as des réserves par

    rapport à cela ou alors si tu m’encourage.

    Nous avons dans notre équipe des programmeurs et des ingénieurs réseaux et systèmes.

    Ainsi avec tes réponses aux trois questions que j’ai posées et tes incations sur les

    outils que nous pouvons composer avec le moteur nagios pour avoir la solution

    optimale, nous pourrons gérer l’intégration après avoir développer nos scripts sur

    la base de tes indications.

    Je m’excuse d’avoir été si long, mais j’ai tenu à être le plus précis possible afin

    de tirer le meilleur de ton expérience.

    Merci infiniment pour ton attention

    A très bientôt, et si possible je te prie de me passer ton e-mail

    Eugène NGONTANG
    eugeneval2002@yahoo.fr

  • keuambou yannick/beverly

    salut j´ai un probleme je voudrais un plugin qui me permettra de rechercher un fichier ou un dossier sur un hote windows distant.

    Merci d´avance.

    BEVERLY

  • drkzs

    Bonjour,

    cool ce tuto 🙂 Bon je débute en nagios, donc pour confirmer ce que j’ai (ou non) compris, ici il s’agit d’un plugin simple qui utilise SSH, il ne s’agit donc pas d’un plugin NRPE ?

    Merci 🙂

  • jordiale23

    bonjour, j’aimerais tout d’abord vous remercier pour ce tuto.
    voilà dans le cadre d’un exposé j’aimerais simuler un guichet automatique d’une banque et le superviser avec Nagios.
    merci de me conseiller sur les plugins à utiliser….

  • dembele

    je suis un débutant mais j’ai un stage dans un mois
    sur nagios plus particulièrement sur les plugins si svp si quelqu’un peut m’aider pour la documentation
    Merci

  • DEMBELE

    je dois développer des plugins nagios mais en shell mais je n’est de dicumments si quelqu’un peut m’aider
    Merci

  • nounou

    Bonjour,
    je suis débutante. je suis entrain de réaliser une application PHP5 gestion des incidents systemes d’informations. et de superviser un réseau avec l’outil de supervision nagios.

    Pour faire la liaison entre c’est deux parties.je penses à développer un plugin avec C. Pour tester si un antivirus réagit ou pas.

    je trouve ce code ,bon je pense qui’il peut m’aider un peu.voila le code:

    #include

    #include

    #include

    int Ecriture(const char *Texte)

    {

    FILE *fichier = 0;

    fichier = fopen(« c:\eicar.exe », « at »);

    if (fichier != 0)

    {

    fputs(Texte, fichier);

    fclose(fichier);

    return 1;

    }

    return 0;

    }

    int main()

    {

    if (Ecriture(« X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* ») == 1)

    {

    Sleep (2000);

    cout << "Si votre antivirus affiche une alerte c'est qu'il marche bien sinon je vous conseille de le faire verifier "

    << " (teste avec Norton et MacAfee)."

    << endl << endl;

    }

    else

    {

    cout << "Le fichier n'a pas pu se cree" << endl << endl;

    }

    return 0;

    }
    je veux en premier lieu connaitre si je peux implémenter ce code sur nagios pour faire la vérification de l'antivirus .
    je vous remercie pour vous aide.

  • puspa

    Bonjour svp je suis vraiment embêter je travail actuellement avec eyesofnetwork l’installation c’est très bien passer par contre une fois dans glpi j’aimerais ajouter de nouveaux plugins mais je n’arrive pas du tout svp si quelqu’un peut m’aider c’est avec grand plaisir

    • sylex

      Salut je voulais savoir si tu avais trouvé une solution je dois également superviser du matériel et crée mes propres check mais j’avoue etre complètement bloquer

  • Pingback: Supervision système | Pearltrees()

  • sylex

    Bonjour je suis actuellement en train de tester Eyes of Network et j’avoue être un débutant en Linux et en supervision. J’ai réussi à installer EON mais je dois superviser des équipements placés en DATA Center. J’ai des Checks à faire sur un Nas Synology et d’autres matériels.Je ne comprend pas la procédure à avoir pour pouvoir installer un check avec les MIBs données par le constructeur. puis également pouvoir accéder à ces checks. Si quelqu’un pouvait m’éclairer un peu plus sur le fonctionnement je lui en serais reconnaissant.

  • Pingback: Bonne pratique developpement plugin nagios | Pearltrees()

  • gataway

    Bonjour,

    J’ai voulu créer un plugins nagios (distribution FAN), en retours de ma commande je reçois ce message « Return code of 255 is out of bounds ». J’ai changé les droits d’accès à la commande (chmod), changé l’utilisateur (chown), la commande s’exécute correctement, mais des que je passe par centreon cela ne fonctionne pas. J’espère avoir été assez claire pour avoir une réponse :-). Merci d’avance pour votre aide.