Назад | Перейти на главную страницу

Вывод плагинов / команд Nagios в системный журнал

Знаете ли вы, есть ли простой способ отправлять вывод каждой проверки, выполняемой nagios, в системный журнал?

Вы настроили use_syslog вариант в конфигурации Nagios?

http://nagios.sourceforge.net/docs/nagioscore/3/en/configmain.html#use_syslog

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

Это легко использовать, добавив пользовательский системный журнал с определенными опциями notify-by-syslog. Просто добавьте этого пользователя в качестве контакта, где бы вы ни хотели, чтобы конкретная служба регистрировалась в системном журнале.

Команда Nagios в файле конфигурации:

define command{
        command_name    notify-service-by-syslog
        command_line    /usr/bin/perl $USER1$/send_syslog.pl \
                 --state $SERVICESTATE$ --host $HOSTADDRESS$ \
                --msg "$HOSTADDRESS$ $SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$ $LONGSERVICEOUTPUT$" --hard $SERVICESTATETYPE$
        }
define command{
        command_name    notify-host-by-syslog
        command_line    /usr/bin/perl $USER1$/send_syslog.pl \
                --hard $HOSTSTATETYPE$ --state $HOSTSTATE$ --host $HOSTADDRESS$ \
                --msg "$HOSTADDRESS$: $HOSTSTATE$ $HOSTOUTPUT$ $LONGHOSTOUTPUT$"
         }

Скрипт send_syslog.pl

#!/usr/bin/perl -w

use Sys::Syslog qw(:standard :macros);
use strict;
use Getopt::Long;
&Getopt::Long::config('bundling');

my $help;
my $hard;
my $state;
my $host;
my $msg;

get_options();
run_process();

sub run_process
{
    if( $hard eq "SOFT" )
    {
        return 0;
    }
    my $alert=LOG_DEBUG;
    $alert=LOG_EMERG    if $state eq  "DOWN";
    $alert=LOG_INFO     if $state eq  "UP";
    $alert=LOG_CRIT     if $state eq  "CRITICAL";
    $alert=LOG_WARNING  if $state eq  "WARNING";
    $alert=LOG_INFO     if $state eq  "OK";

    openlog('nagios','','daemon');
    syslog($alert,"$host     $msg");
}

sub get_options
{
    GetOptions
        ("help|h"        => \$help,
         "hard:s"        => \$hard,
         "state:s"       => \$state,
         "host:s"        => \$host,
         "msg:s"         => \$msg
         );
    if( defined($help) )
    {
        print "--help called\n\n";
        print_usage();
    }
}
sub print_usage
{
    print "--help | -H: Print this screen\n";
    print "--hard <HOSTSTATETYPE|SERVICESTATETYPE>\n";
    print "  with a SOFT or HARD state; only alerts on the HARD states.\n";
    print "--state <HOSTSTATE|SERVICESTATE>";
    print "--host <HOSTADDRESS>\n";
    print "--msg <Message Body>: Defines the message body to render\n";
    exit 1;
}