Eu escrevi um pequeno script que pode ser usado como notificação e / ou manipulador de eventos. Isso foi benéfico na época, pois eu não queria registrar estados de erros suaves e a compilação com a qual eu estava trabalhando não conseguia separar os dois. Também fornece algumas opções de formatação.
Isso é fácil de usar, adicionando um syslog de usuário com as opções notify-by-syslog definidas. Basta adicionar esse usuário como um contato onde você deseja que um serviço específico faça o login no syslog.
O comando Nagios no arquivo de configuração:
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$"
}
O script 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;
}