Nagios отправка Warning`ов по e-mail (Стандартные инструкции в сети не подходят)

openSUSE, SUSE Linux Enterprise

Модератор: Модераторы разделов

Ответить
Аватара пользователя
step_slim
Сообщения: 431
ОС: SuSe 11.2 VB много ОС

Nagios отправка Warning`ов по e-mail

Сообщение step_slim »

Доброго времени суток коллеги!
Столкнулся с такой проблемой, на сервере установил и настроил Nagios, разобрался с конфигурационными файлами, но вот не в какую не хочет отчёты слать об ошибках на почту. Почта через Exchange server работает. Те маны, что нашёл в сети результата не дают. Если кто сталкивался, подскажите :rolleyes:

з.ы. Нужно ли на настраивать непосредственно почтовую программу на сервере для этого?
А голова что бы думать, ноги что бы ходить- никто не сможет меня остановить;
Спасибо сказали:
Аватара пользователя
xnu!l
Сообщения: 632
Статус: Linux Gangster 4 Life
ОС: openSUSE 11

Re: Nagios отправка Warning`ов по e-mail

Сообщение xnu!l »

step_slim

Смотрим commands.cfg

Код: Выделить всё

# 'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }


Т.е. он банально пайпом в mail отправляет, тут все ясно по-моему.

Я бы порекомендовал отправлять оповещения не на email, а себе на джаббер для более быстрого реагирования на ситуацию.
По дефолту nagios джаббер не умеет, я сделал так:
commands.cfg

Код: Выделить всё

# 'notify-service-by-jabber' command definition
define command{
        command_name    notify-service-by-jabber
        command_line    /usr/local/bin/notify_via_jabber  $CONTACTPAGER$ "***** Nagios ***** Notification Type: $NOTIFICATIONTYPE$ Service: $SERVICEDESC$ Host: $HOSTALIAS$ Address: $HOSTADDRESS$ State: $SERVICESTATE$ Date/Time: $LONGDATETIME$ Additional Info: $SERVICEOUTPUT$"
        }


notify_via_jabber - это небольшой perl скрипт, непосредственно отправляющий оповещения

Код: Выделить всё

#!/usr/bin/perl -w
#
# Author David Cox
# Created from various code examples found on the web
# Last Modified 08/06/2002
# Feel free to use or modify as needed to suit your needs
#######################################################
# MAXWAIT is used because the send message function didn't seem to
# like being called to fast. The message would be sent unless I waited a second
# or so. You can experiment with it but I just went with 2 seconds.
#######################################################

use strict;
use Net::Jabber qw(Client);
use Net::Jabber qw(Message);
use Net::Jabber qw(Protocol);
use Net::Jabber qw(Presence);

my $len = scalar @ARGV;

if ($len ne 2) {
   die "Usage...\n notify [jabberid] [message]\n";
}

my @field=split(/,/,$ARGV[0]);

use constant RECIPIENT => $ARGV[0];
use constant SERVER    => 'jabber.someserver.ru';
use constant PORT      => 5222;
use constant USER      => 'user_for_nagios';
use constant PASSWORD  => 'verysecretpassl';
use constant RESOURCE  => 'resource';
use constant MESSAGE   => $ARGV[1];
use constant MAXWAIT   => 2;

my $connection = Net::Jabber::Client->new();
$connection->Connect( "hostname" => SERVER,"port" => PORT )  or die
"Cannot connect ($!)\n";

my @result = $connection->AuthSend( "username" => USER,"password" =>
PASSWORD,"resource" => RESOURCE );
if ($result[0] ne "ok") {
 die "Ident/Auth with server failed: $result[0] - $result[1]\n";
}

foreach ( @field ) {
   my $message = Net::Jabber::Message->new();
   $message->SetMessage( "to"           => $_,
                         "subject"      => "Notification",
                         "type"         => "chat",
                         "body"         => MESSAGE);

   $connection->Send($message);
   sleep(MAXWAIT);
}
$connection->Disconnect();
exit;
EVOLVE OR DIE
Спасибо сказали:
Аватара пользователя
step_slim
Сообщения: 431
ОС: SuSe 11.2 VB много ОС

Re: Nagios отправка Warning`ов по e-mail

Сообщение step_slim »

xnu!l

Спасибо коллега :rolleyes: Только вот ничего не понятно. Приведённые Вами конфиги, аналогичны моим, по крайне мере COMMANDS вкладка, но ничего не работает. Nagios говорит, что всё ОК сообщение отправлено, но получатель его не получает, полез смотреть в логи mail, там типа того: "Невозможно определить адрес и способ отправки".
Вопрос в другом, какой Вы почтовый клиент используете? Стандартный postfix что то у меня не работет, установил EXIM, я думаю настройки его мне ещё разбирать и разбирать...- и нужен ли вообще он, клиент?
Джаберы и Аськи не подходять- политика безопасности :mellow:
А голова что бы думать, ноги что бы ходить- никто не сможет меня остановить;
Спасибо сказали:
Аватара пользователя
xnu!l
Сообщения: 632
Статус: Linux Gangster 4 Life
ОС: openSUSE 11

Re: Nagios отправка Warning`ов по e-mail

Сообщение xnu!l »

step_slim писал(а):
03.12.2009 12:28
Вопрос в другом, какой Вы почтовый клиент используете?


Вместе с nagios у меня работает обычный postfix в околодефолтной конфигурации. ( Кстати, он не почтовый клиент(как Thunderbird), он MTA=).
Вы можете mail настроить на использование внешнего SMTP сервера, к примеру.

Джаберы и Аськи не подходять- политика безопасности


Аналогично. Это одна из причин, по которой нужен внутрикорпоративный джаббер =)
EVOLVE OR DIE
Спасибо сказали:
Аватара пользователя
step_slim
Сообщения: 431
ОС: SuSe 11.2 VB много ОС

Re: Nagios отправка Warning`ов по e-mail

Сообщение step_slim »

Извините загавариваюсь уже, два дня пытаюсь заставить работать оповещение :rolleyes: Пожалуйста по подробнее можно про настройку postfix, я его настраивал по инструкции через Yast, но что то результата нет, может есть какая хитрость? Как заставить сцепится Nagios и MTA?

По поводу внутрикорпаротивного джабера, да я не смогу объяснить нашему отмороженному безопаснику- зачем это и для чего :mellow:
А голова что бы думать, ноги что бы ходить- никто не сможет меня остановить;
Спасибо сказали:
Аватара пользователя
xnu!l
Сообщения: 632
Статус: Linux Gangster 4 Life
ОС: openSUSE 11

Re: Nagios отправка Warning`ов по e-mail

Сообщение xnu!l »

step_slim писал(а):
03.12.2009 12:49
Извините загавариваюсь уже, два дня пытаюсь заставить работать оповещение :rolleyes: Пожалуйста по подробнее можно про настройку postfix, я его настраивал по инструкции через Yast, но что то результата нет, может есть какая хитрость? Как заставить сцепится Nagios и MTA?

По поводу внутрикорпаротивного джабера, да я не смогу объяснить нашему отмороженному безопаснику- зачем это и для чего :mellow:


В стандартном случае его и настраивать не надо=) Издалека кажется, что у вас на сервере что то с dns и он банально не может резолвнуть днс имя exchange сервера.
IMHO в вашей конфигурации проще натравить утилиту mail на использование SMTP самого exchange сервера, уж внутри себя то он думаю разрулит на какой аккаунт оповещение положить =)
Cмотрите man mail на предмет smtp, smtp-auth, smtp-auth-password.
EVOLVE OR DIE
Спасибо сказали:
Аватара пользователя
step_slim
Сообщения: 431
ОС: SuSe 11.2 VB много ОС

Re: Nagios отправка Warning`ов по e-mail

Сообщение step_slim »

Перепробовал уже кучу разных способов, добился того, что в логах Nagios нет ошибки, а вот сообщение всё же адресат не получает.... Не знаю уже куда копать :mellow: Кстати, с dns всё нормально, я вообще грешу на сами настройки postfixa...
А голова что бы думать, ноги что бы ходить- никто не сможет меня остановить;
Спасибо сказали:
Аватара пользователя
xnu!l
Сообщения: 632
Статус: Linux Gangster 4 Life
ОС: openSUSE 11

Re: Nagios отправка Warning`ов по e-mail

Сообщение xnu!l »

step_slim писал(а):
03.12.2009 14:55
Перепробовал уже кучу разных способов, добился того, что в логах Nagios нет ошибки, а вот сообщение всё же адресат не получает.... Не знаю уже куда копать :mellow: Кстати, с dns всё нормально, я вообще грешу на сами настройки postfixa...


В какой форме дан $CONTACTEMAIL$ - корректно ли он передаетcя mail'у ?
В журналах postfix'а отображается попытка отправки сообщения в какой либо форме?
EVOLVE OR DIE
Спасибо сказали:
Puritan
Сообщения: 2

Re: Nagios отправка Warning`ов по e-mail

Сообщение Puritan »

xnu!l писал(а):
03.12.2009 12:10
step_slim

Смотрим commands.cfg

Код: Выделить всё

# 'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }


Т.е. он банально пайпом в mail отправляет, тут все ясно по-моему.

Я бы порекомендовал отправлять оповещения не на email, а себе на джаббер для более быстрого реагирования на ситуацию.
По дефолту nagios джаббер не умеет, я сделал так:
commands.cfg

Код: Выделить всё

# 'notify-service-by-jabber' command definition
define command{
        command_name    notify-service-by-jabber
        command_line    /usr/local/bin/notify_via_jabber  $CONTACTPAGER$ "***** Nagios ***** Notification Type: $NOTIFICATIONTYPE$ Service: $SERVICEDESC$ Host: $HOSTALIAS$ Address: $HOSTADDRESS$ State: $SERVICESTATE$ Date/Time: $LONGDATETIME$ Additional Info: $SERVICEOUTPUT$"
        }


notify_via_jabber - это небольшой perl скрипт, непосредственно отправляющий оповещения

Код: Выделить всё

#!/usr/bin/perl -w
#
# Author David Cox
# Created from various code examples found on the web
# Last Modified 08/06/2002
# Feel free to use or modify as needed to suit your needs
#######################################################
# MAXWAIT is used because the send message function didn't seem to
# like being called to fast. The message would be sent unless I waited a second
# or so. You can experiment with it but I just went with 2 seconds.
#######################################################

use strict;
use Net::Jabber qw(Client);
use Net::Jabber qw(Message);
use Net::Jabber qw(Protocol);
use Net::Jabber qw(Presence);

my $len = scalar @ARGV;

if ($len ne 2) {
   die "Usage...\n notify [jabberid] [message]\n";
}

my @field=split(/,/,$ARGV[0]);

use constant RECIPIENT => $ARGV[0];
use constant SERVER    => 'jabber.someserver.ru';
use constant PORT      => 5222;
use constant USER      => 'user_for_nagios';
use constant PASSWORD  => 'verysecretpassl';
use constant RESOURCE  => 'resource';
use constant MESSAGE   => $ARGV[1];
use constant MAXWAIT   => 2;

my $connection = Net::Jabber::Client->new();
$connection->Connect( "hostname" => SERVER,"port" => PORT )  or die
"Cannot connect ($!)\n";

my @result = $connection->AuthSend( "username" => USER,"password" =>
PASSWORD,"resource" => RESOURCE );
if ($result[0] ne "ok") {
 die "Ident/Auth with server failed: $result[0] - $result[1]\n";
}

foreach ( @field ) {
   my $message = Net::Jabber::Message->new();
   $message->SetMessage( "to"           => $_,
                         "subject"      => "Notification",
                         "type"         => "chat",
                         "body"         => MESSAGE);

   $connection->Send($message);
   sleep(MAXWAIT);
}
$connection->Disconnect();
exit;



В коде с джабером не все понятно, сервер, логин и пароль для входа в сам джабер тут все ясно, а вот куда он будет отправлять неясно! Если несложно, вы бы могли объяснить ?
Спасибо сказали:
MrClon
Сообщения: 838
ОС: Ubuntu 10.04, Debian 7 и 6

Re: Nagios отправка Warning`ов по e-mail

Сообщение MrClon »

Вроде первый параметр notify_via_jabber, $CONTACTPAGER$. Значение задаётся в настройках пользователей в нагиосе.
Спасибо сказали:
Puritan
Сообщения: 2

Re: Nagios отправка Warning`ов по e-mail

Сообщение Puritan »

MrClon писал(а):
26.05.2014 23:17
Вроде первый параметр notify_via_jabber, $CONTACTPAGER$. Значение задаётся в настройках пользователей в нагиосе.

ок, где именно и код?
Спасибо сказали:
MrClon
Сообщения: 838
ОС: Ubuntu 10.04, Debian 7 и 6

Re: Nagios отправка Warning`ов по e-mail

Сообщение MrClon »

Ок, давай я поищу это за тебя:
http://nagios.sourceforge.net/docs/nagiosc...ns.html#contact

Обрати особое внимание на строчу начинающуюся со слова pager и на название переменной $CONTACTPAGER$
Спасибо сказали:
Ответить