Интеграция 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)
Get new posts in your inbox
No spam. Unsubscribe anytime.