Archives pour la catégorie Supervision

[Supervision] Script pour superviser la mémoire des Linux

Bonjour à tous,

Aujourd’hui je vous propose un script en Perl que j’ai fait afin de superviser la mémoire utilisée réellement sur un serveur Linux (ce script peut aussi bien être utilisé pour superviser des serveurs Debian, Ubuntu, RedHat, CentOS, etc.).

Pourquoi j’ai fait mon propre script? Tout simplement parce que lorsqu’on lance par exemple la commande « top », nous avons la mémoire globale « utilisée » (résultat de la plupart des scripts que j’ai pu trouvé). Cela veut dire qu’il compte aussi bien la mémoire utilisée pour les programmes, pour les buffers mais aussi pour le cache. Ces deux dernières peuvent être libérées si jamais l’OS ou une application en a vraiment besoin.

Vous allez voir, il est tout simple et créé une sortie pour le grapher sur Nagios/Centreon.

#! /usr/bin/perl -w

############################## check_snmp_memory_linux ##############
# Version : 1.0
# Date : Dec 04 2011
#####################################################################
#
# Help : ./check_snmp_memory_linux.pl -h
#

use strict;
use Net::SNMP;
use Getopt::Long;
use POSIX;

# SNMP Datas

my $memory_Total        = ".1.3.6.1.4.1.2021.4.5.0";
my $memory_Free         = ".1.3.6.1.4.1.2021.4.6.0";
my $memory_Buffered     = ".1.3.6.1.4.1.2021.4.14.0";
my $memory_Cached       = ".1.3.6.1.4.1.2021.4.15.0";

# Globals

my $version='1.0';

my $o_host      = undef;        # hostname
my $o_community = undef;        # community
my $o_port      = 161;          # port
my $o_help      = undef;        # wan't some help ?
my $o_version   = undef;        # print version
my $o_version2  = undef;        # use snmp v2c

my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);

# Variable pour les valeurs de Mem

my $memUsed     = undef;
my $memFree     = undef;
my $memBuffered = undef;
my $memCached   = undef;
my $memTotal    = undef;
my $percentMem  = undef;

my $memUsedOctets = undef;
my $memUsedGOctets = undef;
my $memFreeOctets = undef;
my $memCachedOctets = undef;
my $memBufferedOctets = undef;
my $memTotalOctets = undef;
my $memTotalGOctets = undef;

my $resultat    = undef;
my $c_output    = undef;
my $c_status    = undef;

my $warn_value  = 95;
my $crit_value  = 98;

# Functions

sub p_version {
        print "check_snmp_memory_linux version : $version\n";
}

sub print_usage {
        print "Usage: $0 -H <host> -C <snmp_community> [-2] [-p <port>]\n\n";
}

sub help {
   print "\nSNMP Memory Linux Monitor for Nagios version ",$version,"\n";
   print_usage();
   print <<EOT;
-h, --help
        print this help message
-H, --hostname=HOST
        name or IP address of host to check
-C, --community=COMMUNITY NAME
        community name for the host's SNMP agent (implies SNMP v1 or v2c with option)
-2, --v2c
        Use snmp v2c
-P, --port=PORT
        SNMP port (Default 161)
-V, --version
        prints version number
EOT

}

sub check_options {
        Getopt::Long::Configure ("bundling");

        GetOptions(
                'h'     => \$o_help,            'help'          => \$o_help,
                'H:s'   => \$o_host,            'hostname:s'    => \$o_host,
                'p:i'   => \$o_port,            'port:i'        => \$o_port,
                'C:s'   => \$o_community,       'community:s'   => \$o_community,
                'V'     => \$o_version,         'version'       => \$o_version,
                '2'     => \$o_version2,        'v2c'           => \$o_version2
        );
        if ( defined ($o_help) ) {
                help();
                exit $ERRORS{"UNKNOWN"};
        };

        if ( defined($o_version) ) {
                p_version();
                exit $ERRORS{"UNKNOWN"};
        };

        if ( ! defined($o_host) ) { # check host and filter
                print "No host defined!\n";
                print_usage();
                exit $ERRORS{"UNKNOWN"};
        };

        # Check Snmp Information
        if ( ! defined($o_community) ) {
                print "No community defined!\n";
                print_usage();
                exit $ERRORS{"UNKNOWN"};
        }
}

########## MAIN #######

check_options();

# Connection to host
my ($session,$error);
if ( defined ($o_version2) ) {
        # SNMPv2 Login
        ($session, $error) = Net::SNMP->session(
                -hostname  => $o_host,
                -version   => 2,
                -community => $o_community,
                -port      => $o_port
        );
} else {
        # SNMPV1 login
        ($session, $error) = Net::SNMP->session(
                -hostname  => $o_host,
                -community => $o_community,
                -port      => $o_port
        );
}
if ( !defined($session) ) {
        printf("ERROR opening session: %s.\n", $error);
        exit $ERRORS{"UNKNOWN"};
}


$resultat       = $session->get_request($memory_Total);
$memTotal       = $resultat->{$memory_Total};

$resultat       = $session->get_request($memory_Free);
$memFree        = $resultat->{$memory_Free};

$resultat       = $session->get_request($memory_Buffered);
$memBuffered    = $resultat->{$memory_Buffered};

$resultat       = $session->get_request($memory_Cached);
$memCached      = $resultat->{$memory_Cached};

$memUsed = $memTotal - ( $memFree + $memBuffered + $memCached );

$memUsedOctets = $memUsed * 1024;
$memUsedGOctets = $memUsed / 1048576;
$memUsedGOctets = sprintf("%.2f", $memUsedGOctets);
$memTotalOctets = $memTotal * 1024;
$memTotalGOctets = $memTotal / 1048576;
$memTotalGOctets = sprintf("%.2f", $memTotalGOctets);
$memCachedOctets = $memCached * 1024;
$memBufferedOctets = $memBuffered * 1024;
$memFreeOctets = $memFree * 1024;
$percentMem = floor(( $memUsed / $memTotal ) * 100);

if ( $percentMem < $warn_value ) {
        $c_output       = "OK - La memoire est utilisee a ".$percentMem."%. Il y a ".$memUsedGOctets." Go d'utilisee sur ".$memTotalGOctets." Go. | Mem_Totale=".$
memTotalOctets."o; Mem_Used=".$memUsedOctets."o; Mem_Buffered=".$memBufferedOctets."o; Mem_Cached=".$memCachedOctets."o; Mem_Free=".$memFreeOctets."o";        $c_status       = "OK";
}
elsif ( ($percentMem >= $warn_value) && ($percentMem < $crit_value) ) {
        $c_output       = "WARNING - La memoire est utilisee a ".$percentMem."%. Il y a ".$memUsedGOctets." Go d'utilisee sur ".$memTotalGOctets." Go. | Mem_Total
e="
.$memTotalOctets."o; Mem_Used=".$memUsedOctets."o; Mem_Buffered=".$memBufferedOctets."o; Mem_Cached=".$memCachedOctets."o; Mem_Free=".$memFreeOctets."o";        $c_status       = "WARNING";
}
elsif ( $percentMem >= $crit_value ) {
        $c_output       = "CRITICAL - La memoire est utilisee a ".$percentMem."%. Il y a ".$memUsedGOctets." Go d'utilisee sur ".$memTotalGOctets." Go. | Mem_Tota
le="
.$memTotalOctets."o; Mem_Used=".$memUsedOctets."o; Mem_Buffered=".$memBufferedOctets."o; Mem_Cached=".$memCachedOctets."o; Mem_Free=".$memFreeOctets."o";
        $c_status       = "CRITICAL";
}

$session->close;
print "$c_output \n";
exit $ERRORS{$c_status};

Ce script permet de récupérer les mêmes valeurs que la commande suivante :

$ free -m

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Astuces en vrac (4)

Aujourd’hui, un nouveau petit mémo concernant 2 requêtes SQL pour récupérer des informations intéressantes sur votre supervision. Et un autre pour contrôler la synchronisation de votre serveur de temps.

La première requête permet de récupérer l’adresse IP/Nom DNS et le nom de tous les serveurs supervisés par un poller. Pour cela, il suffit juste d’exécuter la requête suivante sur la base Centreon :

SELECT host_name AS Name, host_address AS Adresse
FROM `host`, `ns_host_relation`, `nagios_server`
WHERE ns_host_relation.host_host_id=host.host_id
AND ns_host_relation.nagios_server_id=nagios_server.id
AND nagios_server.name='mypoller'
ORDER BY host_name;

Continuer la lecture de Astuces en vrac (4) 

[HowTo] Surveillance de ses disques avec S.M.A.R.T.

Bonjour à tous,

Aujourd’hui, nous allons nous intéresser à la surveillance de nos précieux disques durs. Ils sont de plus en plus importants car ils contiennent un tas d’informations « vitales » : photos, videos, musiques, papiers, etc. Ca pourrait être sympa si nous pouvions connaitre l’état de santé de nos disques et être prévenu quand ils commencent à ne plus tourner rond 🙂

Pour surveiller cela, nous allons utiliser le démon S.M.A.R.T. Il faut installer :

$ apt-get install smartmontools

Continuer la lecture de [HowTo] Surveillance de ses disques avec S.M.A.R.T. 

HowTo : SNMPv3 sur Cisco

Pour terminer ces articles sur la mise en place de la dernière version du SNMP (la v3), je vais présenter les commandes à appliquer sur un équipement Cisco.

ATTENTION, CETTE MANIPULATION N’EST DISPONIBLE QU’A PARTIR DE LA VERSION 12.0 d’iOS

$ snmp-server group V3Group v3 priv read V3Read
$ snmp-server user V3user V3Group v3 auth sha pass1 priv des pass2
$ snmp-server view V3Read iso included
$ snmp-server host @IP version 3 priv V3User

Une petite vérification comme dans l’article HowTo : SNMPv3 sur Linux et c’est terminé!!

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 1,50 out of 5)
Loading...

HowTo : SNMPv3 sur Windows

Suite à l’article précédent, je vais vous présenter ici la technique à utiliser pour pouvoir installer et utiliser la version 3 du SNMP sur vos serveurs Windows.

Pour cela, suivre les étapes suivantes :

  • Arrêter le service SNMP par défaut sur Windows et le désactiver totalement du démarrage (s’il était installer bien sûr)
  • Télécharger la version suivante : Agent Windows SNMPv3
  • Installer le nouveau service
  • Créer un utilisateur pour le SNMPv3 et l’assigner au groupe « root-users »
  • Aller dans les services Windows et démarrer ce nouvel agent

Afin de valider ce nouveau service, faire le même test que dans l’article HowTo : SNMPv3 sur Linux, et voilà du SNMPv3 en veux-tu en voilà!! 🙂

1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 1,00 out of 5)
Loading...

HowTo : SNMPv3 sur Linux

Bonjour à tous,

Aujourd’hui nous allons nous intéresser à l’installation et le paramétrage de la version 3 de SNMP (la plus sécurisée à l’heure actuelle).

Pour se faire, nous allons installer les pré-requis :

$ apt-get install snmpd snmp openssl libssl-dev

Avant de débuter la configuration, il faut arrêter le service SNMP (qui se lance par défaut) :

$ /etc/init.d/snmpd stop

Continuer la lecture de HowTo : SNMPv3 sur Linux