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

Тест доступности хоста NAGIOS для хоста, который не может быть PINGed, не разговаривает со мной, но может быть отслежен

Часть моего сетевого состояния имеет довольно важную зависимость от хоста, доступность которого трудно проверить. У меня есть несколько хостов, и у моего провайдера NAGIOS VPS иногда возникают проблемы с маршрутизацией, которые отключают провайдера, на котором расположены все эти хосты. Когда он недоступен, я бы предпочел, чтобы ведущие за ним показали UNAVAILABLE чем DOWN, потому что они не ВНИЗ.

Но его наличие трудно обнаружить, потому что его нельзя пинговать.

[me@nagios systems]$ ping -c 1 -w 1 205.251.232.153
[...]
1 packets transmitted, 0 received, 100% packet loss, time 1000ms

и, похоже, на нем нет сетевых служб, отвечающих на запросы:

[me@nagios systems]$ nmap -P0 -sT 205.251.232.153
[...]
All 1000 scanned ports on 205.251.232.153 are filtered

Однако он участвует и отвечает на traceroutes, в результате чего я обнаружил, что он будет возвращать ICMP-port-unreachable, когда я пытаюсь поговорить с выбранным диапазоном портов UDP. Это tcpdump вывод, пока я делаю echo foo|nc -u 205.251.232.197 33459:

[me@nagios systems]$ sudo tcpdump -n -n -i p1p1 host 205.251.232.197
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on p1p1, link-type EN10MB (Ethernet), capture size 65535 bytes
15:04:01.278269 IP a.b.c.d.36139 > 205.251.232.197.33459: UDP, length 4
15:04:01.448659 IP 205.251.232.197 > a.b.c.d: ICMP 205.251.232.197 udp port 33459 unreachable, length 36

Мне кажется, что мне нужен тест, который отправляет UDP-пакет на хост и порт и рассматривает ICMP-port-unreachable как свидетельство успеха (ничего не слышно - это неудача). Кто-нибудь знает, как это сделать? Как другие справляются с аналогичными проблемами мониторинга?

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

Все плагины, связанные с traceroute, которые я мог найти в таких местах, как Биржа NAGIOS более сложные, чем это; они хотят проверить такие вещи, как идентификация первого или второго перехода в цепочке и т. д. Все, что мне нужно, это плагин, который проверяет, могу ли я проследить маршрут до хоста и получить ответ. Я нашел плагин, который (примерно) сделал это, и придал ему форму для использования с Linux (в частности, CentOS 6); он появляется ниже на тот случай, если он кому-то пригодится.

#!/bin/sh
#set -vx

################################################################################
# AUTHOR: Vladimir Vuksan
# E-mail: Check http://vuksan.com/linux/
# License: GPL
# changes by Tom Yates, http://www.teaparty.net/
################################################################################
if [ $# -ne 1 ]; then
        echo "Usage: $0 <ip.address>"
        exit;
fi

IP=${1}

TRACEROUTE=`/bin/traceroute -n ${IP} 2>&1 | grep "${IP} "`
RESULT=`echo $TRACEROUTE | grep -c ms`

if [ $RESULT -eq 1 ]; then
        echo TRACERT OK: `echo $TRACEROUTE | cut -f4- -d" "`
        exit 0
else
        echo TRACERT CRITICAL: Host unreachable
        exit 2
fi

С тех пор этот хост несколько раз становился недоступным, и мой NAGIOS поступил правильно: все хосты на противоположной стороне получили предупреждение как НЕДОСТУПНО вместо DOWN.

Независимо от того, какой протокол вы используете для проверки доступности хостов, если есть проблемы с маршрутизацией к хосту, он будет отображаться как неработающий. Если вы хотите проверить доступность хостов и не хотите включать ICMP, вы можете выполнить check_tcp или check_udp для любой из запущенных там служб. Например. check_tcp -p 80 для HTTP или check_tcp -p 22 для ssh.

Хотя, похоже, более серьезная проблема, которую вы пытаетесь решить, - это не предупреждение для хостов за шлюзом, когда шлюз недоступен. Это можно решить, указав зависимости в nagios. Хосты (или службы) за шлюзом должны зависеть от шлюза. Затем, если шлюз не работает, он не будет предупреждать вас о других хостах. (http://nagios.sourceforge.net/docs/3_0/dependencies.html)