Интеграция SMS · 3 min read · Oct 18, 2025

Интеграция сервера Nagios 3.x.x/Icinga 1.x.x для SMS-уведомлений через устройства FoxBox на Debian Squeeze

Интеграция сервера Nagios 3.x.x/Icinga 1.x.x для SMS-уведомлений через устройства FoxBox на Debian Squeeze

Этот учебник объясняет, как интегрировать стандартный сервер мониторинга Nagios (или Icinga) с внешним устройством для уведомлений по SMS, FoxBox ( www.smsfoxbox.it).

1 Предварительная заметка

FoxBox, как заявляют производители, выпускается в двух похожих версиях (G25 и LX800), отличающихся аппаратными характеристиками. В этом руководстве мы будем ссылаться на SMS Gateway LX800 (мы купили его из-за его высокой производительности и CompactFlash памяти), но я уверен, что его можно расширить на другие версии без проблем.

Наш сервер работает на Nagios Core 3.5.0 (с плагинами Nagios 1.4.16) на Debian Squeeze. Вероятно, для разных дистрибутивов пути будут изменяться, но логика остается практически такой же.

2 Установка на стороне FoxBox

Устройство предназначено для таких видов коммуникационных задач, поэтому здесь не так много что делать, кроме:

  • Указать действительный IP-адрес, доступный с нашего сервера мониторинга;
  • Вставить протестированную и полностью рабочую SIM-карту для отправки SMS.

3 Установка на стороне сервера

Прежде всего, нам нужно поместить этот скрипт в папку /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("Использование: send_sms -h|--host  -u|--user  --pw|--pass
 -n|--number
 -m|--message \n\n");
    print(" - IP-адрес или имя хоста SMS FoxBox\n");
    print(" - имя администратора SMS FoxBox\n");
    print(" - пароль администратора SMS FoxBox\n");
    print(" - номер телефона, на который будет отправлено SMS\n");
    print(" - сообщение, которое будет отправлено\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("ОШИБКА: " . $response->status_line . "\n");
        $status_code = UNKNOWN;
    }
    $html_page =  $response->content;
    if($html_page =~ /p class="(\w+)"/g) {
        if($1 eq "confneg") {
            print("ОШИБКА: Не удалось отправить SMS\n");
            $status_code = UNKNOWN;
        }
        else {
            $status_code = OK;
        }
    }
    else {
        print("ОШИБКА: Неизвестный вывод страницы\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);

Также важно правильно установить разрешения на этот файл, чтобы пользователь Nagios мог его выполнять.

Теперь мы должны добавить новые команды уведомлений, работающие по SMS-каналу вместо классического email. Для этого нам нужно добавить эти строки в файл /etc/nagios3/commands.cfg:

# Определение команды '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 "Предупреждение о хосте: $HOSTNAME$ \nСостояние хоста: $HOSTSTATE$ \nДата/Время: $LONGDATETIME$"
        }
# Определение команды '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 "Предупреждение о сервисе: $HOSTALIAS$/$SERVICEDESC$ \nСостояние сервиса: $SERVICESTATE$ \nДата/Время: $LONGDATETIME$"
        }

Как вы видите, нам нужна новая информация для контактов: номер телефона. Таким образом, мы должны определить его как “pager” в файле /etc/nagios3/conf.d/contacts_nagios2.cfg.

Более того, мы настраиваем команду уведомления о сервисе/хосте. По умолчанию они используют email-канал, в то время как мы хотим уведомлять с помощью новых команд уведомлений, поэтому нам также нужно отредактировать параметры “service_notification_commands” и “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
        }

Очевидно, что после завершения конфигураций нам нужно перезапустить службу Nagios, чтобы увидеть их эффекты.

Чтобы проверить, что все в порядке, вы можете запустить предварительную проверку с помощью

nagios3 -v /etc/nagios3/nagios.cfg

Как я вижу, эта архитектура также была реализована на паре версий FoxBox, предоставляя универсальное решение для уведомлений (EasyG2 G25 и Monitoring LX800).

(Ссылка: www.smsfoxbox.it)

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.