Announcement

Collapse
No announcement yet.

Plugin pour graphiques (CPU, mémoire, processus) détaillés

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Plugin pour graphiques (CPU, mémoire, processus) détaillés

    Bonjour,

    Je recherche des plugins Nagios, Centreon ou NRPE qui puissent fournir des graphiques (cf. pièces jointes) aussi détaillés que ceux que l'on obtient avec Collectd (http://collectd.org).

    Par exemple pour la mémoire, on a des informations importantes comme les caches et les buffers en plus de la mémoire utilisée.

    Linux utilise toute la mémoire pour les applications, les caches et les buffers. Ce limiter à afficher que la mémoire utilisée ne renseigne pas vraiment sur la pression réelle. La quantité de cache et de buffers est une indication que l'on ne trouve pas avec les graphiques qui utilisent les sondes SNMP.

    Merci de vos réponses.
    Attached Files
    Système : DEBIAN ETCH/LENNY (Kernel 2.6.21)
    Soft : Nagios 2.9 - Oreon 1.4.1 - ODS -RRDtool 1.2.19

  • #2
    Bonjour,

    L'absence de réponse signifie t-il que personne n'a réussi à obtenir de tels graphiques avec Nagios ou Centreon ? :-(
    Système : DEBIAN ETCH/LENNY (Kernel 2.6.21)
    Soft : Nagios 2.9 - Oreon 1.4.1 - ODS -RRDtool 1.2.19

    Comment


    • #3
      Cela signifie que ta question est zarbi car on a déjà des graphs comme ça avec Centreon par exemple.
      Intel(R) Xeon(TM) CPU 3.4GHz - MemTotal : 1034476 kB
      Centreon 2.4.1 - Nagios 3.2.1 - Nagios Plugins 1.4.15 - Manubulon Plugins tuné
      Fedora Core 5 - 2.6.20-1.2320

      Comment


      • #4
        Originally posted by DonKiShoot View Post
        Cela signifie que ta question est zarbi car on a déjà des graphs comme ça avec Centreon par exemple.
        Merci de votre réponse, je m'étonnais de ne pas en avoir.

        Je me suis peut-être mal exprimé, prenons l'exemple de la mémoire. J'ai déjà des graphs pour la mémoire en utilisant la commande check_centreon_remote_storage avec comme argument "Real Memory", elle utilise le plugin check_centreon_snmp_remote_storage. Cette commande ne retourne que la mémoire totale et celle utilisée, elle ne fournit pas la valeur des pages cache et buffer cache.

        J'ai regardé dans la liste des plugins disponibles sur le serveur, il y a ceux fournit par Centreon 1.4.1 et ceux par les paquets Debian nagios-plugins-standard, nagios-plugins-basic et nagios-nrpe-plugin. Je n'ai pas trouvé de plugin fournissant ces deux informations complémentaires pour la mémoire.

        Je n'utilise peut-être pas le bon plugin ou de la bonne façon, quel plugin utilisez-vous pour obtenir ces graphs ?
        Système : DEBIAN ETCH/LENNY (Kernel 2.6.21)
        Soft : Nagios 2.9 - Oreon 1.4.1 - ODS -RRDtool 1.2.19

        Comment


        • #5
          Cherche sur internet sur nagiosexchange par exemple.
          Sur le site de manubulon il y a aussi de trés bon plugins.
          Intel(R) Xeon(TM) CPU 3.4GHz - MemTotal : 1034476 kB
          Centreon 2.4.1 - Nagios 3.2.1 - Nagios Plugins 1.4.15 - Manubulon Plugins tuné
          Fedora Core 5 - 2.6.20-1.2320

          Comment


          • #6
            J'ai regardé les sites en question, je n'ai pas vraiment trouvé de sonde adaptée à mon besoin.

            Si je liste les données pour chaque sondes, on a :

            - Mémoire
            o libre
            o page cache
            o buffer cache
            o utilisée

            - Processus
            o paging
            o blocked
            o zombies
            o stopped
            o running
            o sleeping

            - CPU
            o nice
            o user
            o wait-io
            o system


            Je me suis penché sur le cas de la mémoire. Tout d'abord, la valeur des "page cache" n'est pas fournis par SNMP (NetSNMP), on doit donc passer par des sondes NRPE.

            Ensuite, la notion de mémoire utilisée peut avoir deux définitions, selon que l'on y inclut ou pas les "page cache" et les "buffer cache".

            Pour les graphes, il est intéressant d'avoir la valeur de la mémoire utilisé sans les "page cache" et les "buffer cache", ce qui permet de tracer une courbe par donnée. Il est intéressant de voir les valeurs de la mémoire utilisé augmenter et des "page cache" et des "buffer cache" diminuer pour se dire qu'il faut ajouter des barrettes de RAM.

            Pour les alertes, je préfère qu'elles soient basées sur la valeur de la mémoire utilisée sans les "page cache" et les "buffer cache". La politique de Linux étant d'utiliser au maximum la mémoire libre pour créer des "page cache" et des "buffer cache", générer des alertes en comptabilisant ces deux valeurs me parait inexacte et source de faux positifs. Seul la valeur de la mémoire utilisé sans "page cache" et les "buffer cache" reflète réellement l'utilisation de la mémoire par les applications.

            J'ai utilisé et modifier le plugin "check_mem.pl" téléchargé sur NagiosExchange pour obtenir des graphes qui ressemble a ceux de Collectd.

            Comme vous pouvez le voir sur le graphe ci-dessous pour la mémoire, les quatre données ont leurs courbes. Il manque juste la notion de cumule des courbes et le remplissage qui sont, je pense, du ressort de Centreon. Ce sont des paramètres que l'on pourrait trouver dans la page "Graphs Templates".
            Attached Files
            Système : DEBIAN ETCH/LENNY (Kernel 2.6.21)
            Soft : Nagios 2.9 - Oreon 1.4.1 - ODS -RRDtool 1.2.19

            Comment


            • #7
              Yop,

              Je cherche actuellement un plugin pour faire la même chose, j'ai bien trouvé un check_mem.pl mais il ne semble pas vraiment exploitable...

              Pourrais-tu nous poster le script que tu utilises s'il te plaît ?

              Une petite question, ce script permet-il d'utiliser l'argument -H ou doit-il être utiliser via check_nrpe ?

              Merci.
              Système : RedHat Entreprise Linux ES 4/5 - Redhat 7/8
              Outils : Nagios 3.0.6 - Centreon 2.1.3 - StatusMap - PHP Weather Map

              Comment


              • #8
                J'utilise check_nrpe car il y a des données qui ne sont pas fournis par SNMP.

                voici la commande pour NRPE que j'utilise dans le fichier "nrpe_local.cfg" :

                command[check_local_mem]=/usr/lib/nagios/plugins/check_mem.pl -w 90,25 -c 95,50 -v -p

                Ci-dessous le code modifié de check_mem.pl. J'ai depuis clarifié le code (sur une feuille de papier :razz: ), je n'ai pas pris le temps de changer le code du script.

                Code:
                #! /usr/bin/perl -w
                #
                # check_mem v1.7 plugin for nagios
                #
                # uses the output of `free` to find the percentage of memory used
                #
                # Copyright Notice: GPL
                #
                # History:
                #
                # v1.7 Ingo Lantschner - ingo AT boxbe DOT com
                #       + adapted for systems with no swap (avoiding divison through 0)
                #
                # v1.6 Cedric Temple - cedric DOT temple AT cedrictemple DOT info
                #       + add swap monitoring
                #       + if warning and critical threshold are 0, exit with OK
                #       + add a directive to exclude/include buffers
                #
                # v1.5 Rouven Homann - [email protected]
                #       + perfomance tweak with free -mt (just one sub process started instead of 7)
                #       + more code cleanup
                #
                # v1.4 Garrett Honeycutt - [email protected]
                #       + Fixed PerfData output to adhere to standards and show crit/warn values
                #
                # v1.3 Rouven Homann - [email protected]
                #       + Memory installed, used and free displayed in verbose mode
                #       + Bit Code Cleanup
                #
                # v1.2 Rouven Homann - [email protected]
                #       + Bug fixed where verbose output was required (nrpe2)
                #       + Bug fixed where perfomance data was not displayed at verbose output
                #       + FindBin Module used for the nagios plugin path of the utils.pm
                #
                # v1.1 Rouven Homann - [email protected]
                #       + Status Support (-c, -w)
                #       + Syntax Help Informations (-h)
                #       + Version Informations Output (-V)
                #       + Verbose Output (-v)
                #       + Better Error Code Output (as described in plugin guideline)
                #
                # v1.0 Garrett Honeycutt - [email protected]
                #       + Initial Release
                # 
                use strict;
                use FindBin;
                use lib $FindBin::Bin;
                use utils qw($TIMEOUT %ERRORS &print_revision &support);
                use vars qw($PROGNAME $PROGVER);
                use Getopt::Long;
                use vars qw($opt_V $opt_h $verbose $opt_w $opt_c $opt_p);
                
                $PROGNAME = "check_mem";
                $PROGVER = "1.7";
                
                # add a directive to exclude buffers:
                my $DONT_INCLUDE_BUFFERS = 1;
                
                sub print_help ();
                sub print_usage ();
                
                Getopt::Long::Configure('bundling');
                GetOptions ("V"   => \$opt_V, "version"    => \$opt_V,
                        "h"   => \$opt_h, "help"       => \$opt_h,
                        "v" => \$verbose, "verbose"  => \$verbose,
                        "w=s" => \$opt_w, "warning=s"  => \$opt_w,
                        "c=s" => \$opt_c, "critical=s" => \$opt_c,
                        "p" => \$opt_p, "perfdata" => \$opt_p);
                
                if ($opt_V) {
                    print_revision($PROGNAME,'$Revision: '.$PROGVER.' $'); 
                    exit $ERRORS{'UNKNOWN'};
                }
                
                if ($opt_h) {
                     print_help();
                    exit $ERRORS{'UNKNOWN'};
                }
                
                print_usage() unless (($opt_c) && ($opt_w));
                
                my ($mem_critical, $swap_critical) = ($1,$2) if ($opt_c =~ /([0-9]+),([0-9]+)/);
                my ($mem_warning, $swap_warning) = ($1,$2) if ($opt_w =~ /([0-9]+),([0-9]+)/);
                
                
                # print threshold in output message
                my $mem_threshold_output = " ("; 
                my $swap_threshold_output = " ("; 
                
                if ( $mem_warning > 0 && $mem_critical > 0) {
                $mem_threshold_output .= "W> ".$mem_warning.", C> ".$mem_critical;
                }
                elsif ( $mem_warning > 0 ) {
                $mem_threshold_output .= "W> ".$mem_warning;
                }
                elsif ( $mem_critical > 0 ) {
                $mem_threshold_output .= "C> ".$mem_critical;
                }
                
                if ( $swap_warning > 0 && $swap_critical > 0) {
                $swap_threshold_output .= "W> ".$swap_warning.", C> ".$swap_critical;
                }
                elsif ( $swap_warning > 0 ) {
                $swap_threshold_output .= "W> ".$swap_warning;
                }
                elsif ( $swap_critical > 0 )  {
                $swap_threshold_output .= "C> ".$swap_critical;
                }
                
                $mem_threshold_output .= ")";
                $swap_threshold_output .= ")";
                
                my $verbose = $verbose;
                 
                my ($mem_percent, $mem_total, $mem_used, $swap_percent, $swap_total, $swap_used, $mem_free, $mem_cached, $mem_buffers) = &sys_stats();
                my $free_mem = $mem_total - $mem_used;
                my $free_swap = $swap_total - $swap_used;
                
                # set output message
                my $output = "Memory Usage".$mem_threshold_output.": ". $mem_percent.'% <br>';
                $output .= "Swap Usage".$swap_threshold_output.": ". $swap_percent.'%';
                
                # set verbose output message
                my $verbose_output = "Memory Usage:".$mem_threshold_output.": ". $mem_percent.'% '."- Total: $mem_total MB, used: $mem_used MB, free: $free_mem MB<br>";
                $verbose_output .= "Swap Usage:".$swap_threshold_output.": ". $swap_percent.'% '."- Total: $swap_total MB, used: $swap_used MB, free: $free_swap MB<br>";
                
                # set perfdata message
                my $perfdata_output = "";
                
                if (!$opt_p) {
                    $perfdata_output .= "MemUsed=$mem_percent\%;$mem_warning;$mem_critical";
                    $perfdata_output .= " SwapUsed=$swap_percent\%;$swap_warning;$swap_critical";
                }
                else {
                    $mem_free = $mem_free * 1024 * 1024;
                    $mem_cached = $mem_cached * 1024 * 1024;
                    $mem_buffers = $mem_buffers * 1024 * 1024;
                    $mem_used = $mem_used * 1024 * 1024;
                
                    $perfdata_output .= "MemFree=$mem_free";
                    $perfdata_output .= " MemCached=$mem_cached";
                    $perfdata_output .= " MemBuffers=$mem_buffers";
                    $perfdata_output .= " MemUsed=$mem_used";
                }
                
                # if threshold are 0, exit with OK
                if ( $mem_warning == 0 ) { $mem_warning = 101 };
                if ( $swap_warning == 0 ) { $swap_warning = 101 };
                if ( $mem_critical == 0 ) { $mem_critical = 101 };
                if ( $swap_critical == 0 ) { $swap_critical = 101 };
                
                
                if ($mem_percent>$mem_critical || $swap_percent>$swap_critical) {
                    if ($verbose) { print "<b>CRITICAL: ".$verbose_output."</b>|".$perfdata_output."\n";}
                    else { print "<b>CRITICAL: ".$output."</b>|".$perfdata_output."\n";}
                    exit $ERRORS{'CRITICAL'};
                } elsif ($mem_percent>$mem_warning || $swap_percent>$swap_warning) {
                    if ($verbose) { print "<b>WARNING: ".$verbose_output."</b>|".$perfdata_output."\n";}
                    else { print "<b>WARNING: ".$output."</b>|".$perfdata_output."\n";}
                    exit $ERRORS{'WARNING'};
                } else {
                    if ($verbose) { print "OK: ".$verbose_output."|".$perfdata_output."\n";}
                    else { print "OK: ".$output."|".$perfdata_output."\n";}
                    exit $ERRORS{'OK'};
                }
                
                sub sys_stats {
                    my @memory = split(" ", `free -mt`);
                    my $mem_total = $memory[7];
                    my $mem_used;
                    if ( $DONT_INCLUDE_BUFFERS) { $mem_used = $memory[15]; }
                    else { $mem_used = $memory[8];}
                    my $mem_buffers = $memory[11];
                    my $mem_cached = $memory[12];
                    my $mem_free = $mem_total - $memory[8];
                    my $swap_total = $memory[18];
                    my $swap_used = $memory[19];
                    my $mem_percent = ($mem_used / $mem_total) * 100;
                    my $swap_percent;
                    if ($swap_total == 0) {
                        $swap_percent = 0;
                    } else {
                        $swap_percent = ($swap_used / $swap_total) * 100;
                    }
                    return (sprintf("%.0f",$mem_percent),$mem_total,$mem_used, sprintf("%.0f",$swap_percent),$swap_total,$swap_used,$mem_free,$mem_cached,$mem_buffers);
                }
                
                sub print_usage () {
                    print "Usage: $PROGNAME -w <warn> -c <crit> [-v] [-h]\n";
                    exit $ERRORS{'UNKNOWN'} unless ($opt_h);
                }
                
                sub print_help () {
                    print_revision($PROGNAME,'$Revision: '.$PROGVER.' $');
                    print "Copyright (c) 2005 Garrett Honeycutt/Rouven Homann/Cedric Temple\n";
                    print "\n";
                    print_usage();
                    print "\n";
                    print "-w <MemoryWarn>,<SwapWarn> = Memory and Swap usage to activate a warning message (eg: -w 90,25 ) .\n";
                    print "-c <MemoryCrit>,<SwapCrit> = Memory and Swap usage to activate a critical message (eg: -c 95,50 ).\n";
                    print "-p = Print perfdata for memory and swap in bytes.\n";
                    print "-v = Verbose Output.\n";
                    print "-h = This screen.\n\n";
                    support();
                }
                Système : DEBIAN ETCH/LENNY (Kernel 2.6.21)
                Soft : Nagios 2.9 - Oreon 1.4.1 - ODS -RRDtool 1.2.19

                Comment


                • #9
                  Merci bien.

                  J'ai quelques petites erreurs quand je lance le script en console.

                  Use of uninitialized value in numeric gt (>) at ./check_mem.pl line 90.
                  Use of uninitialized value in numeric gt (>) at ./check_mem.pl line 90.
                  Use of uninitialized value in numeric gt (>) at ./check_mem.pl line 90.
                  Use of uninitialized value in numeric gt (>) at ./check_mem.pl line 100.
                  Use of uninitialized value in numeric gt (>) at ./check_mem.pl line 100.
                  Use of uninitialized value in numeric gt (>) at ./check_mem.pl line 100.
                  Use of uninitialized value in concatenation (.) or string at ./check_mem.pl line 131.
                  Use of uninitialized value in concatenation (.) or string at ./check_mem.pl line 131.
                  Use of uninitialized value in concatenation (.) or string at ./check_mem.pl line 132.
                  Use of uninitialized value in concatenation (.) or string at ./check_mem.pl line 132.
                  Use of uninitialized value in numeric eq (==) at ./check_mem.pl line 147.
                  Use of uninitialized value in numeric eq (==) at ./check_mem.pl line 148.
                  Use of uninitialized value in numeric eq (==) at ./check_mem.pl line 149.
                  Use of uninitialized value in numeric eq (==) at ./check_mem.pl line 150.
                  Last edited by goldyfruit; 10 December 2007, 10:35.
                  Système : RedHat Entreprise Linux ES 4/5 - Redhat 7/8
                  Outils : Nagios 3.0.6 - Centreon 2.1.3 - StatusMap - PHP Weather Map

                  Comment


                  • #10
                    Originally posted by goldyfruit View Post
                    Merci bien.

                    J'ai quelques petites erreurs quand je lance le script en console.
                    Il faut peut-être que tu le lance du répertoire où sont les plugins, il y a dans ce répertoire le fichier "utils.pm".

                    Tu as utilisé quelle ligne de commande ?

                    Ici, j'ai ce résultat :

                    /usr/lib/nagios/plugins$ ./check_mem.pl -w 90,25 -c 95,50 -v -p
                    OK: Memory Usage: (W> 90, C> 95): 61% - Total: 3666 MB, used: 2252 MB, free: 1414 MB<br>Swap Usage: (W> 25, C> 50): 0% - Total: 549 MB, used: 0 MB, free: 549 MB<br>|MemFree=341835776 MemCached=679477248 MemBuffers=460324864 MemUsed=2361393152
                    Système : DEBIAN ETCH/LENNY (Kernel 2.6.21)
                    Soft : Nagios 2.9 - Oreon 1.4.1 - ODS -RRDtool 1.2.19

                    Comment


                    • #11
                      Merci bien !
                      Le problème venait de ma commande, je n'utilisais pas les bonnes valeurs !

                      Résultat obtenu :

                      [[email protected] libexec]# ./check_mem.pl -w 90,25 -c 95,50 -v -p
                      OK: Memory Usage: (W> 90, C> 95): 38% - Total: 375 MB, used: 144 MB, free: 231 MB<br>Swap Usage: (W> 25, C> 50): 0% - Total: 511 MB, used: 0 MB, free: 511 MB<br>|MemFree=15728640 MemCached=165675008 MemBuffers=59768832 MemUsed=150994944
                      Système : RedHat Entreprise Linux ES 4/5 - Redhat 7/8
                      Outils : Nagios 3.0.6 - Centreon 2.1.3 - StatusMap - PHP Weather Map

                      Comment


                      • #12
                        Tu peux ensuite créer dans les "Vues Oreon" un nouveau "Graphs Templates", voici les données que j'utilise :

                        - Propriétés
                        Nom du Template Memory_Usage
                        Titre Vertical Bytes
                        Largeur 600 px
                        Hauteur 200 px
                        Limite Basse 0
                        Limite Haute
                        Base 1024
                        Couleur de fond de la Grille #FFFFFF
                        Couleur Principale de la Grille #800000
                        Seconde Couleur de la Grille #808080
                        Couleur du Contour #000000
                        Couleur de fond #F3F6F6
                        Couleur de la Police #3C3334
                        Couleur de la Flèche #FFFFFF
                        Couleur du Haut #6E917F
                        Couleur du Bas #4B75B3
                        Séparer les composants Non
                        Template par défaut des graphs Centreon Non

                        - Composantes :
                        Mem_Page
                        Mem_Used
                        Mem_Free
                        Mem_Buffer

                        Au niveau des "Courbes Templates", j'essaye de retrouver les couleurs de collectd :

                        Nom du Template Mem_Page
                        Nom de la Courbe Page cache
                        Ordre 2
                        Epaisseur 1
                        Couleur de la Courbe #0000FF
                        Couleur du Remplissage #B7B7F7
                        Transparence
                        Inverser Non
                        Remplissage Non
                        Afficher la valeur Max Oui
                        Afficher la valeur Min Oui
                        Afficher la Moyenne Oui
                        Afficher la dernière Valeur Oui
                        Template par défaut des graphs Centreon Non


                        Nom du Template Mem_Used
                        Nom de la Courbe Used
                        Ordre 4
                        Epaisseur 1
                        Couleur de la Courbe #FF0000
                        Couleur du Remplissage #F7B7B7
                        Transparence
                        Inverser Non
                        Remplissage Non
                        Afficher la valeur Max Oui
                        Afficher la valeur Min Oui
                        Afficher la Moyenne Oui
                        Afficher la dernière Valeur Oui
                        Template par défaut des graphs Centreon Non


                        Nom du Template Mem_Free
                        Nom de la Courbe Free
                        Ordre 1
                        Epaisseur 1
                        Couleur de la Courbe #00EE00
                        Couleur du Remplissage #B7EFB7
                        Transparence
                        Inverser Non
                        Remplissage Non
                        Afficher la valeur Max Oui
                        Afficher la valeur Min Oui
                        Afficher la Moyenne Oui
                        Afficher la dernière Valeur Oui
                        Template par défaut des graphs Centreon Non


                        Nom du Template Mem_Buffer
                        Nom de la Courbe Buffer cache
                        Ordre 3
                        Epaisseur 1
                        Couleur de la Courbe #F0A000
                        Couleur du Remplissage #F3DFB7
                        Transparence
                        Inverser Non
                        Remplissage Non
                        Afficher la valeur Max Oui
                        Afficher la valeur Min Oui
                        Afficher la Moyenne Oui
                        Afficher la dernière Valeur Oui
                        Template par défaut des graphs Centreon Non


                        Il manque dans les propriétés du graphs template une option pour cumuler les courbes. On peut imaginer que cela fonctionne ainsi :

                        - La courbe Used est tracée avec les valeurs de Mem_Used.

                        - La courbe Buffer cache est tracée avec l'addition des valeurs de Mem_Used et Mem_Buffer.

                        - La courbe Page cache est tracée avec l'addition des valeurs de Mem_Used, Mem_Buffer et Mem_Page.

                        - La courbe Free est tracée avec l'addition des valeurs de Mem_Used, Mem_Buffer, Mem_Page et Mem_Free.

                        On doit normalement obtenir une horizontal pour la dernière courbe. Reste le problème du remplissage entre les courbes.
                        Système : DEBIAN ETCH/LENNY (Kernel 2.6.21)
                        Soft : Nagios 2.9 - Oreon 1.4.1 - ODS -RRDtool 1.2.19

                        Comment

                        Working...
                        X