Вопрос или проблема
У меня есть простой скрипт на Python, который проверяет, существует ли файл:
[me@myserver ~]$ sudo -H -u nrpe bash -c 'python3 /opt/nagios/nagios-plugins/check_illumio'
[sudo] пароль для me:
0
[me@myserver ~]$ cat /opt/nagios/nagios-plugins/check_illumio
#!/usr/bin/python3
import os
value = os.path.isfile('/tmp/illumio_working')
if value:
print("0")
else:
print("1")
Тем не менее, в Icinga я всегда получаю результат “1”.
Вот плагин nrpe:
[me@myserver ~]$ cat /etc/nrpe.d/check_illumio_ven_ctl_connectivity.cfg
command[check_illumio_ven_ctl_connectivity]=/opt/nagios/nagios-plugins/check_illumio
Что я здесь упустил? Могу ли яcinga читать строковое значение 0 или 1?
Ответ или решение
Вопрос, который вы подняли, касается различий в выводе скрипта, используемого для проверки существования файла, при его запуске локально и через Icinga с использованием NRPE. Рассмотрим основные аспекты проблемы и возможные решения.
Проблема: Неправильный статус проверки в Icinga
Вы указали, что при запуске скрипта напрямую из командной строки с использованием пользователя nrpe
возврат составляет 0
(файл существует), в то время как при выполнении через Icinga результат всегда 1
(файл не существует). Давайте проанализируем возможные причины этого поведения.
Возможные причины проблемы
-
Путь к файлу:
Убедитесь, что файл/tmp/illumio_working
доступен для пользователя, от имени которого работает NRPE. При запуске через Icinga может использоваться другой путь или контекст выполнения, который не имеет доступа к этому файлу. -
Права доступа:
Проверьте права доступа к файлу/tmp/illumio_working
. Убедитесь, что пользователь NRPE (обычно это пользовательnrpe
) имеет права на чтение. Выполните командуls -l /tmp/illumio_working
и убедитесь, что права соответствуют требованиям. -
Конфигурация NRPE:
Убедитесь, что ваш NRPE сервер правильно сконфигурирован для выполнения команд. Ваша команда должна корректно прописываться в файл конфигурации NRPE, который вы уже указали. Ваша строка:command[check_illumio_ven_ctl_connectivity]=/opt/nagios/nagios-plugins/check_illumio
должна быть правильно интерпретирована. Проверьте, нет ли синтаксических ошибок и что путь к скрипту корректен.
-
Запуск NRPE:
Иногда, если NRPE не перезапускается после внесения изменений в конфигурацию, это может привести к тому, что изменения не вступают в силу. Выполните команду для перезапуска службы NRPE:sudo systemctl restart nrpe
-
Логи NRPE:
Проверьте логи NRPE для выявления ошибок. Обычно логи можно найти по следующему пути:/var/log/syslog
или
/var/log/nagios/nrpe.log
Логи могут содержать подсказки о том, куда может не доходить выполнение скрипта.
-
Проблема с интерпретацией выхода:
Убедитесь, что Icinga правильно интерпретирует выходные данные скрипта. Хотя Icinga может обрабатывать цифровые значения, убедитесь, что формат вывода вашего Python-скрипта соответствует требованиям. Рассмотрим небольшой рефакторинг, чтобы скрипт возвращал не числовое значение, а текстовый статус:#!/usr/bin/python3 import os if os.path.isfile('/tmp/illumio_working'): print("OK - File exists") exit(0) else: print("CRITICAL - File does not exist") exit(2) # Возвращаем 2 для состояния "Критическое"
Заключение
Для диагностики и устранения проблемы следует проверить пути, права, конфигурацию NRPE, перезапуск службы и логи. После всех манипуляций и тестов, попробуйте снова запустить проверку в Icinga. Надеюсь, эти рекомендации помогут вам разрешить вашу проблему с NRPE и Icinga.