Жалкая пародия на межсетевой экран в Microsoft Windows по умолчанию запрещает ICMP-ответы. Это осложняет мониторинг ансамбля хостов, используя nagios. В то же время утилита arping позволяет точно определить наличие в сети хоста с заданным IP-адресом. По умолчанию в nagios есть только скрипт cheсk_ping, который используется для проверки сервиса.
Поиск в Google говорит о наличии плагина check_arping для Linux, однако под FreeBSD собрать нужные для него хитрые модули perl, не получается. А ведь по сути достаточно иметь просто скрипт, запускающий поставленную из портов утилиту arping, и согласовывающий его с nagios. Собственно, в этой заметке, я предлагаю такой способ.
Прежде всего меняем в описании сервиса в конфиге nagios:
define service{ use ping-service host_name somehost service_description ARPING check_command check_arping!em0!25 # check_command check_ping!100.0,20%!500.0,60% }
Т.е. передаем для arping 2 аргумента, имя интерфейса и таймаут в миллисекундах.
Далее добавляем в файл /usr/local/etc/nagios/commands.cfg следующие строки:
# 'check_arping' command definition define command{ command_name check_arping command_line $USER1$/check_arping -H $HOSTADDRESS$ -I $ARG1$ -T $ARG2$ }
И, наконец, в директории /usr/local/libexec/nagios создаем скрипт check_arping следующего содержания.
#! /usr/bin/perl $ip =$ARGV[1]; $iface =$ARGV[3]; $timeout =$ARGV[5]*1000; $cmd = "/usr/local/sbin/arping -i $iface -w $timeout -c 4 $ip"; @res = `$cmd`; foreach $str (@res) { if (index($str,'packets')>-1) { $more = $str; } } $more =~ /.*\s(\d+)%.*/; $percent = $1; if ($percent == 0) { $status = "OK"; $code = 0; } if ($percent > 25) { $status = "WARNING"; $code = 1; } if ($percent == 100) { $status = "CRITICAL"; $code = 2; } print "ARPING $status - |$more"; exit $code; __END__
Скрипт рабочий, но в самом минимуме. Выдает одну строку вида:
# ./check_arping -H 192.168.2.166 -I em0 -T 30 ARPING OK - |4 packets transmitted, 4 packets received, 0% unanswered
Если из четырех пакетов потеряно менее двух скрипт возвращает код 0 — «OK» для nagios, если потеряно два или три пакета скрпит возвращает код 1 — «WARNING«, а если потеряны все четыре — то скрипт возвращает 2 — «CRITICAL«.
В перспективе планирую облагообразить обработку аргументов, так, как сейчас, — это решение, обусловленное катастрофическим отсутствием времени, поэтому заранее прошу прощения за индусский код.
Источник http://myfreebsd.ru/other/nagios-i-arping-pod-freebsd