Des choses pas catholiques avec Nagios, Perl et POE

Sébastien Aperghis-Tramoni, sebastien@aperghis.net

Contexte

  • plateforme d'environ 3000 machines, réparties sur 3 sites

  • supervision actuelle par Big Brother

  • utilisé depuis plus de 10 ans

  • nombreuses sondes et programmes annexes

Contexte

  • projet de remplacement de Big Brother par Nagios

  • initié il y a plusieurs années

  • démarré sur Nagios 2, migré sur Nagios 3

  • très peu de ressources affectées au projet

  • changements d'orientation

Besoins

  • compatibilité avec la plateforme et les clients Big Brother

  • mécanisme de réplication des données intra et inter sites

Architecture

Architecture - Nagios Cluster

  • nœud de clustering

    • communication avec les autres nœuds et le NEB NagiosCluster

    • réplication "intelligente" des messages

  • réception des messages Big Brother

    • POE::Component::Server::BigBrother

    • messages status envoyés dans le cluster

    • messages order et event envoyés à PoCo MQ pour traitement ultérieur

Architecture - Nagios ExtBroker

  • lecture des messages stockés dans PoCo MQ

  • conversion des messages order en commandes Nagios

  • traitement des messages event, résultats envoyés dans le cluster

Architecture - Nagios

  • ePN (embedded Perl Nagios), interpréteur Perl embarqué

  • NEB NagiosCluster, plugin de la boucle interne d'évènements

  • Nagios::Cluster::Interface (Perl, XS), couche protocolaire Nagios Cluster

  • Nagios::InternalAPI (XS), accès aux fonctions internes de Nagios

    • injection bas niveau de messages

Magie noire

  • dans le NEB NagiosCluster.c :

        static PerlInterpreter *my_perl = NULL;
    
        void declare_perl_interpreter(PerlInterpreter *interpreter) {
            my_perl = interpreter;
        }
  • dans le module XS Nagios::Cluster::Interface :

        void
        export_perl_interpreter()
            CODE:
                declare_perl_interpreter(my_perl);

Magie noire

  • remplacement du code d'initialisation de ePN :

        use strict;
        use Nagios::InternalAPI;
        use Nagios::Cluster::Interface;
    
        require '/usr/share/nagios3/p1.pl';
    
        MAIN: {
            # hack to allow us to use the Nagios embedded
            # Perl interpreter from our NEB plugin
            Nagios::Cluster::Interface::export_perl_interpreter();
        }
    
        1;

Conclusion

  • tenue en charge par rapport à la plateforme

  • mais toujours des bugs à corriger, des problèmes de fuites mémoire

  • seulement deux modules sur le CPAN

Questions ?

Merci