Я написал плагин, который проверяет, подключены ли два хоста одновременно, и если да, то возвращает критическое. Когда я запускаю эту команду локально в командной строке, logi c работает правильно, и все операторы эха совпадают в зависимости от состояния проверенных хостов (например, «КРИТИЧЕСКИЙ - оба контроллера испытательного стенда в сети» или «ОК - $ VM1 - это только контроллер стенда онлайн. "et c). Проблема в том, что когда я запускаю эти команды через ./check_nrpe -H <NRPEHost> -c "controller_check"
(те же значения также отображаются на веб-странице Nag ios), они всегда возвращают одно и то же значение, независимо от статуса хостов: "КРИТИЧНО - оба контроллеры тестового стенда в настоящее время отключены " повторение фактических значений $ VM1 и $ VM2 показывает, что начальная проверка if всегда установлена на 0.
Скрипт работает, создавая двоичные значения из ping -c 1 -W 1 $HOSTNAME
, если сначала проверьте, а затем используйте эти значения для создания фактического значения предупреждения / выхода. Вот операторы if, создающие двоичные значения для сетевых состояний хоста:
if ping -c 1 -W 1 $VM1HOSTNAME; then
VM1=1
else
VM1=0
fi
if ping -c 1 -W 1 $VM2HOSTNAME; then
VM2=1
else
VM2=0
fi
И фактический logi c, который создает возврат NRPE:
if [ $VM1 -ne $VM2 ]; then
if [ $VM1 -gt $VM2 ]; then
echo "OK - $VM1 is currently the only testbed controller online."
exit 0
else
echo "OK - $VM2 is currently the only testbed controller online."
exit 0
fi
elif [ $VM1 -eq $VM2 ]; then
if [ $VM1 -eq 0 ]; then
echo "CRITICAL - Both testbed controllers currently offline"
exit 2
else
echo "CRITICAL - Both testbed controllers currently online."
exit 2
fi
else
echo "UNKNOWN - Unable to read output."
exit 3
fi
Я никогда не писал свои собственные Плагин NRPE раньше, поэтому я предполагаю, что делаю здесь что-то простое неправильно, но учебные пособия по написанию плагина NRPE, которые я видел в Интернете, похоже, совпадают с тем, что я написал. В качестве примечания, если я использую check_ping
вместо ping -c 1 -W 1
, возвращаемые значения верны , но единственное значение, которое отображается на веб-странице Nag ios, является результатом первой команды check_ping.
Например (это правильно):
./check_nrpe -H ikor -c "check_testbed_controller_status"
PING OK - Packet loss = 0%, RTA = 0.81 ms|rta=0.811000ms;10.000000;20.000000;0.000000 pl=0%;2;5;0
PING OK - Packet loss = 0%, RTA = 0.79 ms|rta=0.787000ms;10.000000;20.000000;0.000000 pl=0%;2;5;0
CRITICAL - Both testbed controllers currently online.
Но в информации о состоянии Nag ios отображается только PING OK - Packet loss = 0%, RTA = 0.79 ms
вместо желаемого мной эхо-оператора.
Итак, я думаю, смогу ли я: A) исправить, что не так с использованием / usr / bin / ping для проверки if, из-за которой NRPE всегда считывает эти хосты как автономные (проверка if всегда возвращает 0) или B. ) используйте check_ping, но верните в Nag ios только третью строку стандартного вывода, которая содержит фактическую информацию о статусе. Есть ли у кого-нибудь здесь какие-нибудь идеи или рекомендации по чтению? Спасибо.