Integrazione Server · 3 min read · Oct 18, 2025

Integrazione del Server Nagios 3.x.x/Icinga 1.x.x per Avvisi SMS tramite Dispositivi FoxBox su Debian Squeeze

Integrazione del Server Nagios 3.x.x/Icinga 1.x.x per Avvisi SMS tramite Dispositivi FoxBox su Debian Squeeze

Questo tutorial spiega come integrare un server di monitoraggio standard Nagios (o Icinga) con un dispositivo esterno di notifica SMS, il FoxBox ( www.smsfoxbox.it).

1 Nota preliminare

FoxBox, come dichiarato dai produttori, è disponibile in due versioni simili (G25 e LX800) che differiscono per specifiche hardware. In questa guida ci riferiremo al SMS Gateway LX800 (abbiamo acquistato questo perché offre prestazioni superiori e memoria CompactFlash), ma sono fiducioso che possa essere esteso ad altre versioni senza problemi.

Il nostro server esegue Nagios Core 3.5.0 (con plugin Nagios 1.4.16) su Debian Squeeze. Probabilmente per diverse distribuzioni i percorsi cambieranno, ma la logica rimane sostanzialmente la stessa.

2 Installazione sul lato FoxBox

Il dispositivo è progettato per questo tipo di compiti di comunicazione, quindi non c’è molto da fare qui se non:

  • Fornire un indirizzo IP valido, raggiungibile dal nostro server di monitoraggio;
  • Inserire una SIM card testata e funzionante, per inviare gli SMS.

3 Installazione sul lato Server

Prima di tutto dobbiamo posizionare questo script all’interno della cartella /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(" - Indirizzo IP o nome host del SMS FoxBox\n");
    print(" - nome dell'amministratore del SMS FoxBox\n");
    print(" - password dell'amministratore del SMS FoxBox\n");
    print(" - numero di telefono a cui verrà inviato l'SMS\n");
    print(" - messaggio da inviare\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("ERRORE: " . $response->status_line . "\n");
        $status_code = UNKNOWN;
    }
    $html_page =  $response->content;
    if($html_page =~ /p class="(\w+)"/g) {
        if($1 eq "confneg") {
            print("ERRORE: Impossibile inviare SMS\n");
            $status_code = UNKNOWN;
        }
        else {
            $status_code = OK;
        }
    }
    else {
        print("ERRORE: Uscita della pagina sconosciuta\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);

È anche importante impostare correttamente i permessi su questo file, per consentire all’utente Nagios di eseguirlo.

Ora dovremmo aggiungere i nuovi comandi di notifica, lavorando sul canale SMS invece di quello email classico. Per farlo, dobbiamo aggiungere queste righe al file /etc/nagios3/commands.cfg:

# definizione del comando '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 "Avviso Host: $HOSTNAME$ \nStato Host: $HOSTSTATE$ \nData/Ora: $LONGDATETIME$"
        }
# definizione del comando '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 "Avviso Servizio: $HOSTALIAS$/$SERVICEDESC$ \nStato Servizio: $SERVICESTATE$ \nData/Ora: $LONGDATETIME$"
        }

Come puoi vedere, abbiamo bisogno di una nuova informazione per i contatti: il numero di telefono. Quindi, dobbiamo definirlo come “pager” nel file /etc/nagios3/conf.d/contacts_nagios2.cfg.

Inoltre, impostiamo il comando di notifica per il servizio/host. Per impostazione predefinita, questi utilizzano il canale email, mentre noi vogliamo avvisare con i nuovi comandi di notifica, quindi dobbiamo modificare anche i parametri “service_notification_commands” e “host_notification_commands”:

define contact{
        contact_name                    test-contact
        use                             generic-contact
        alias                           tester
        email                           yourname@domain
        host_notification_commands      notify-host-by-foxbox
        service_notification_commands   notify-service-by-foxbox
        pager                           12453683421
        }

Ovviamente, una volta terminate le configurazioni dobbiamo riavviare il servizio Nagios per vedere i loro effetti.

Per controllare che tutto sia a posto, potresti lanciare il controllo pre-volo con

nagios3 -v /etc/nagios3/nagios.cfg

Come vedo, questa architettura è stata implementata anche su un paio di versioni di FoxBox, fornendo una soluzione di notifica tutto-in-uno (EasyG2 G25 e Monitoring LX800).

(Riferimento: www.smsfoxbox.it)

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.