Пишим скрипты для Nagios

Потребовалось мониторить затухания для MRV , с событиями WARNING и CRITICAL (в общем все по взрослому). Задача конечно стояла с минимальными требованиями , но тем не менее данный скрипт можно использовать как  скилет для более глубокого и детально мониторинга .

И так правим файлик  nagios.cfg и добавляем новый конфиг

cfg_file=/usr/local/nagios/etc/objects/muxes.cfg

#cat > muxes.cfg

define service{
 use                             critical-service
 host_name                       MRV_CWDM_CT
 service_description             RX_from_CWDM[SDH]
 check_command                   check_mrv_rxpower!1.2.2
 }
 #cat > mrv_rxpower.pl

#!/usr/bin/perl

use Net::SNMP;
 my $ip = $ARGV[0];
 my $index = $ARGV[1];

my ($session, $error) = Net::SNMP->session( -hostname  => $ip, -community => 'Ail6fiek', -port => '161' );
 if (!defined($session)) { printf("ERROR: %s.\n", $error); exit 1; }

my $RXPower = "1.3.6.1.4.1.629.200.8.1.1.32.$index";

my $result = $session->get_request( -varbindlist => [$RXPower]);

if (!defined($result)) { printf("ERROR: %s.\n", $session->error); $session->close; exit 1; }

#printf("RXPower for host '%s' is %s\n", $session->hostname, $result->{$RXPower} );
 my $power = $result->{$RXPower};
 $power = $power / 1000;
 $session->close;

if ($result->{$RXPower} =~ /^-?\d+$/)
 {

if ($power > -21) { print "OK: RXPOWER=$power"; exit 0; }
 if ($power < -22 and $power >= -25 ) { print "WARNING: RXPOWEr=$power"; exit 1; }
 if ($power < -25) { print "CRITICAL: RXPOWEr=$power"; exit 2; }

}
 else { die "Unknown error!\n"; }

 

Или такой вот скрипт :

 

#!/usr/bin/perl

use Net::SNMP;
my $ip = $ARGV[0];
my $index = $ARGV[1];


$power = `snmpwalk -v1 -c public 172.16.16.79 ifOperStatus.1 | awk '{ print $4 }'`;

if ($power =~ /up/) { print "OK: ifOperStatus=$power"; exit 0; }
if ($power =~ /down/) { print "CRITICAL: ifOperStatus=$power"; exit 2; }

else { die "Unknown error \n"; }

После чего смотри и радуемся ….