Intégration serveur · 3 min read · Oct 18, 2025

Intégration du serveur Nagios 3.x.x/Icinga 1.x.x pour les alertes SMS via des dispositifs FoxBox sur Debian Squeeze

Intégration du serveur Nagios 3.x.x/Icinga 1.x.x pour les alertes SMS via des dispositifs FoxBox sur Debian Squeeze

Ce tutoriel explique comment intégrer un serveur de surveillance Nagios (ou Icinga) standard avec un dispositif externe de notification SMS, le FoxBox ( www.smsfoxbox.it).

1 Remarque préliminaire

FoxBox, comme l’indiquent les fabricants, existe en deux versions similaires (G25 et LX800) différant par des spécificités matérielles. Dans ce guide, nous ferons référence à la passerelle SMS LX800 (nous avons acheté celle-ci en raison de ses performances supérieures et de son stockage CompactFlash), mais je suis convaincu qu’elle pourrait être étendue à d’autres versions sans problème.

Notre serveur exécute Nagios Core 3.5.0 (avec les plugins Nagios 1.4.16) sur Debian Squeeze. Probablement que pour différentes distributions, les chemins changeront, mais la logique reste à peu près la même.

2 Installation du côté de FoxBox

Le dispositif est conçu pour ce type de tâches de communication, donc il n’y a pas grand-chose à faire ici, sauf :

  • Fournir une adresse IP valide, accessible depuis notre serveur de surveillance ;
  • Insérer une carte SIM testée et entièrement fonctionnelle, pour envoyer le SMS.

3 Installation du côté du serveur

Tout d’abord, nous devons placer ce script dans le dossier /usr/lib/nagios/plugins/ :

#!/usr/bin/perl
use LWP::UserAgent;
use Getopt::Long;
use strict;
use warnings;
use constant OK => 0;
use constant WARNING => 1;
use constant CRITICAL => 2;
use constant UNKNOWN => 3;
use constant SEND_PAGE => "/source/send_sms.php";
my($host);
my($username);
my($password);
my($number);
my($message);
sub usage() {
    print("Usage: send_sms -h|--host  -u|--user  --pw|--pass
 -n|--number
 -m|--message \n\n");
    print(" - adresse IP ou nom d'hôte du SMS FoxBox\n");
    print(" - nom de l'administrateur du SMS FoxBox\n");
    print(" - mot de passe de l'administrateur du SMS FoxBox\n");
    print(" - numéro de téléphone où le SMS sera envoyé\n");
    print(" - message à envoyer\n");
}
sub send_sms {
    my($host, $user, $pass, $phonenum, $text) = @_;
    my($ua);
    my($html_page);
    my($response);
    my($status_code);
    $ua = LWP::UserAgent->new;
    $ua->timeout(10);
    $response = $ua->post("http://$host" . SEND_PAGE,
                [
                    "username" => $user,
                    "pwd" => $pass,
                    "from" => 'Nagios',
                    "nphone" => $phonenum,
                    "testo" => $text,
                    "nc" => "http://$host" . SEND_PAGE
                ]);
    if(!$response->is_success) {
        print("ERROR: " . $response->status_line . "\n");
        $status_code = UNKNOWN;
    }
    $html_page =  $response->content;
    if($html_page =~ /p class="(\w+)"/g) {
        if($1 eq "confneg") {
            print("ERROR: Impossible d'envoyer le SMS\n");
            $status_code = UNKNOWN;
        }
        else {
            $status_code = OK;
        }
    }
    else {
        print("ERROR: Sortie de page inconnue\n");
        $status_code = UNKNOWN;
    }
    return $status_code;
}
undef $host;
undef $username;
undef $password;
undef $number;
undef $message;
GetOptions(    'host|H=s'    => \$host,
        'user|u=s'     => \$username,
        'pass|pw=s'     => \$password,
        'number|n=s'     => \$number,
        'message|m=s'     => \$message);
if(!defined $host || !defined $username || !defined $password || !defined $number || !defined $message) {
    usage();
    exit(UNKNOWN);
}

$message =~ s/\\n/\n/g;
my($ret_status);
$ret_status = send_sms($host, $username, $password, $number, $message);
exit($ret_status);

Il est également important de définir correctement les permissions sur ce fichier, pour permettre à l’utilisateur Nagios de l’exécuter.

Nous devrions maintenant ajouter les nouvelles commandes de notification, fonctionnant sur le canal SMS au lieu du classique email. Pour ce faire, nous devons ajouter ces lignes au fichier /etc/nagios3/commands.cfg :

# définition de la commande 'notify-host-by-foxbox'
define command{
        command_name    notify-host-by-foxbox
        command_line    /usr/lib/nagios/plugins/sendSMS.sh -h "127.0.0.1" -u "nagiosadmin" -pw "nagios" -n "$CONTACTPAGER$" -m "Alerte d'hôte : $HOSTNAME$ \nÉtat de l'hôte : $HOSTSTATE$ \nDate/Heure : $LONGDATETIME$"
        }
# définition de la commande 'notify-service-by-foxbox'
define command{
        command_name    notify-service-by-foxbox
        command_line    /usr/lib/nagios/plugins/sendSMS.sh -h "127.0.0.1" -u "nagiosadmin" -pw "nagios" -n "$CONTACTPAGER$" -m "Alerte de service : $HOSTALIAS$/$SERVICEDESC$ \nÉtat du service : $SERVICESTATE$ \nDate/Heure : $LONGDATETIME$"
        }

Comme vous pouvez le voir, nous avons besoin d’une nouvelle information pour les contacts : le numéro de téléphone. Ainsi, nous devons le définir comme “pager” dans le fichier /etc/nagios3/conf.d/contacts_nagios2.cfg.

De plus, nous configurons la commande de notification de service/hôte. Par défaut, celles-ci utilisent le canal email, tandis que nous voulons alerter avec les nouvelles commandes de notification, donc nous devons également modifier les paramètres “service_notification_commands” et “host_notification_commands” :

define contact{
        contact_name                    test-contact
        use                             generic-contact
        alias                           testeur
        email                           votre_nom@domaine
        host_notification_commands      notify-host-by-foxbox
        service_notification_commands   notify-service-by-foxbox
        pager                           12453683421
        }

Évidemment, une fois les configurations terminées, nous devons redémarrer le service Nagios afin de voir leurs effets.

Pour vérifier que tout va bien, vous pourriez peut-être lancer le contrôle pré-vol avec

nagios3 -v /etc/nagios3/nagios.cfg

Comme je le vois, cette architecture a également été mise en œuvre sur une paire de versions FoxBox, fournissant une solution de notification tout-en-un (EasyG2 G25 et Monitoring LX800).

(Reference: www.smsfoxbox.it)

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.