Настраиваемый плагин Nag ios всегда возвращает неверное значение, но работает в командной строке - PullRequest
1 голос
/ 16 июня 2020

Я написал плагин, который проверяет, подключены ли два хоста одновременно, и если да, то возвращает критическое. Когда я запускаю эту команду локально в командной строке, 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 только третью строку стандартного вывода, которая содержит фактическую информацию о статусе. Есть ли у кого-нибудь здесь какие-нибудь идеи или рекомендации по чтению? Спасибо.

1 Ответ

1 голос
/ 16 июня 2020

Оказывается, SE Linux предотвращал выполнение / usr / bin / ping демоном NRPE. Вместо того, чтобы пытаться написать политику SE Linux, позволяющую это сделать, я использовал плагин Nag ios check_ping и направил вывод в / dev / null. Окончательный logi c плагина NRPE выглядит следующим образом:

if $NRPEPING -H $VM1HOSTNAME -w 10,2% -c 20,5% > /dev/null 2>&1; then
  VM1=1
else
  VM1=0
fi

if $NRPEPING -H $VM2HOSTNAME -w 10,2% -c 20,5% > /dev/null 2>&1; then
  VM2=1
else
  VM2=0
fi

Это означает, что A) Мне не нужно устанавливать SE Linux как разрешающий или разрешать демону NRPE выполнять ping и B ) мой вывод в столбце информации о состоянии Nag ios правильно показывает эхо-операторы и никакой другой информации.

...