Я запускаю Nagios 3.5 на машине Centos 7. Установка используется для мониторинга некоторых компьютеров Windows через NRPE (команды check_nrpe). В настоящее время я использую предварительно настроенные команды «псевдонима», которые находятся в файле «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.
Как указал krisFR, вам необходимо префикс файла vbs с помощью cscript.exe (и различных других параметров).
Скрипт в Windows не работает как скрипт в UNIX, поэтому они сами по себе «не запускаются» (иш). Таким образом, все сценарии должны иметь префикс времени выполнения.
Теоретически это должно быть задокументировано здесь: http://docs.nsclient.org/howto/external_scripts.html#languages но я вижу, что его нет, поэтому я постараюсь обновить его как можно скорее.
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#wrapped-scripts