Nagios - NSClient++ не может запустить включенный внешний скрипт

Я использую Nagios 3.5 на машине Centos 7. Настройка используется для мониторинга некоторых машин Windows через NRPE (команды check_nrpe). В настоящее время я использую предварительно сконфигурированные команды 'alias', которые находятся в файле 'nsclient-full.ini'. Пока все работает нормально.

Я хочу отслеживать состояние обновлений Windows на моих хостах с помощью команды alias_updates.

; alias_updates - Alias for alias_updates.
alias_updates = check_updates -warning 0 -critical 0 ShowAll=long

Вот раздел, в котором определены все внешние скрипты:

; A list of scripts available to run from the CheckExternalScripts module.
[/settings/external scripts/scripts]
check_updates=C:\Program Files\NSClient++\scripts\check_updates.vbs

Конечно, я проверил, что 'check_updates.vbs' существует в указанном мною пути. В конце концов, он поставляется в комплекте с NSClient++.

Я включил выполнение внешних скриптов:

; Check External Scripts - A simple wrapper to run external scripts and batch files.
CheckExternalScripts = 1

Другие соответствующие параметры конфигурации (на мой взгляд):

; Section for NRPE (NRPEServer.dll) (check_nrpe) protocol options.
[/settings/NRPE/server]

; COMMAND ARGUMENT PROCESSING
allow arguments = true

; COMMAND ALLOW NASTY META CHARS
allow nasty characters = false

; PORT NUMBER - Port to use for NRPE.
port = 5666


; Section for external scripts configuration options (CheckExternalScripts).
[/settings/external scripts]

; COMMAND ARGUMENT PROCESSING
allow arguments = true

; COMMAND ALLOW NASTY META CHARS
allow nasty characters = false

; SCRIPT DIRECTORY
script path = 

; COMMAND TIMEOUT
timeout = 60

На сервере Nagios из командной строки я пытаюсь это:

[root@mama365-account plugins]# ./check_nrpe -H 192.168.10.13 -c alias_updates

Ответ, который я получаю, таков:

ExternalCommands: failed to create process (C:\Program Files\NSClient++\scripts\check_updates.vbs): it is not an exe file (check NSC.log for more info) - failed to lookup error code: 193( reson: 87)

Я понимаю, что NSClient может запускать плагины, которые не являются исполняемыми (*.exe), а являются просто сценариями. И это сценарий VB. Кроме того, то же сообщение об ошибке отображается в графическом интерфейсе Nagios в поле, соответствующем команде.

У кого-нибудь есть идеи, как это исправить? Чтение документации по NSClient ++ только привело меня...

ОБНОВЛЕНИЕ 1:

Я следовал инструкциям, данным Михаилом Медином к письму. Теперь мой nsclient-full.ini выглядит так:

; A list of wrappped scripts (ie. using the template mechanism)
[/settings/external scripts/wrapped scripts]
check_updates=scripts\check_updates.vbs

; VISUAL BASIC WRAPPING - 
vbs=cscript.exe //T:30 //NoLogo %SCRIPT% %ARGS%

Дело в том, что теперь я получаю еще одну ошибку, на этот раз что-то связанное с выполнением скрипта vb:

C:Program FilesNSClient++scriptscheck_updates.vbs(15, 1) Microsoft VBScript runtime error: Class not defined: 'NagiosPlugin' 

С другой стороны, похоже, что плагин возвратил "ОК", поскольку соответствующая ячейка в Nagios зеленая.

ОБНОВЛЕНИЕ 2:

После поиска на форумах NSClient ++ я нашел кого-то с такой же проблемой. Оказывается, мне не хватало '\':

check_updates=scripts\check_updates.vbs

Должно быть:

check_updates=scripts\\check_updates.vbs

Но я все еще не могу заставить это работать. Похоже, что связь и выполнение скрипта в порядке, но время ожидания истекло. Если я переопределил тайм-аут до 120 секунд с помощью опции -t из командной строки, я получу следующее сообщение об ошибке:

CHECK_NRPE: Received 0 bytes from daemon.  Check the remote server logs for error messages.

1 ответ

Решение

Как указывал krisFR, вам нужно добавить префикс vbs к файлу cscript.exe (и другим различным опциям) .

Скрипт в Windows не работает как скрипты в Unix, поэтому они не являются "запускаемыми" самими собой (ish). Таким образом, все сценарии должны иметь префикс с их временем выполнения.

Теоретически это должно быть задокументировано здесь: http://docs.nsclient.org/howto/external_scripts.html, но я вижу, что он отсутствует, поэтому я постараюсь обновить его как можно скорее.

check_updates=cscript.exe //T:30 //NoLogo "scripts\\check_updates.vbs"

Другой способ решить эту проблему - использовать так называемые "обернутые" сценарии в NSClient++, после чего вы можете определить "макросы" для выполнения различных расширений:

[/settings/external scripts/wrappings]
vbs=cscript.exe //T:30 //NoLogo %SCRIPT% %ARGS%

[/settings/external scripts/wrapped scripts]
check_updates=scripts\check_updates.vbs

Более подробную информацию можно найти здесь: http://docs.nsclient.org/howto/external_scripts.html

Другие вопросы по тегам