Estou executando o Nagios 3.5 em uma máquina Centos 7. A configuração é usada para monitorar algumas máquinas Windows via NRPE (comandos check_nrpe). Por enquanto estou usando os comandos 'alias' pré-configurados que vêm no arquivo 'nsclient-full.ini'. Tudo está funcionando bem até agora.
Desejo monitorar o estado das atualizações do Windows em meus hosts, usando o comando 'alias_updates'.
; alias_updates - Alias for alias_updates.
alias_updates = check_updates -warning 0 -critical 0 ShowAll=long
Aqui está a seção onde todos os scripts externos são definidos:
; 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
É claro que verifiquei se 'check_updates.vbs' existe no caminho que forneci. Afinal, ele veio junto com o NSClient++.
Eu habilitei a execução de scripts externos:
; Check External Scripts - A simple wrapper to run external scripts and batch files.
CheckExternalScripts = 1
As outras opções de configuração relevantes (na minha opinião) são:
; 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
No servidor Nagios, no prompt de comando, estou tentando o seguinte:
[root@mama365-account plugins]# ./check_nrpe -H 192.168.10.13 -c alias_updates
A resposta que estou recebendo é esta:
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)
Entendo que o NSClient pode executar plug-ins que não são executáveis (*.exe), mas apenas scripts. E este é um script VB. Além disso, a mesma mensagem de erro é exibida na GUI do Nagios, na caixa correspondente ao comando.
Alguém tem alguma ideia de como consertar isso? A leitura dos documentos do NSClient++ só me trouxe até agora...
ATUALIZAÇÃO 1:
Segui as instruções fornecidas por Michael Medin ao pé da letra. Agora meu 'nsclient-full.ini' está assim:
; 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%
O problema é que agora estou recebendo outro erro, desta vez algo relacionado à execução do script vb:
C:Program FilesNSClient++scriptscheck_updates.vbs(15, 1) Microsoft VBScript runtime error: Class not defined: 'NagiosPlugin'
Por outro lado, parece que o plug-in retornou 'OK', pois a caixa correspondente no Nagios é verde.
ATUALIZAÇÃO 2:
Depois de pesquisar nos fóruns do NSClient++, encontrei alguém com o mesmo problema. Acontece que estava faltando um '\':
check_updates=scripts\check_updates.vbs
Deveria estar:
check_updates=scripts\\check_updates.vbs
Mas ainda não consigo fazer funcionar. Parece que a comunicação e a execução do script estão OK agora, mas a operação atingiu o tempo limite. Se eu substituir o tempo limite para 120s com a opção '-t' na linha de comando, recebo esta mensagem de erro:
CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.
Como KrisFR apontou, você precisa prefixar o arquivo vbs com cscript.exe (e várias outras opções).
O script no Windows não funciona como scripts no unix, portanto, eles não são "executáveis" por si mesmos (ish). Assim, todos os scripts devem ser prefixados com seu tempo de execução.
Em teoria, isso deve ser documentado aqui: http://docs.nsclient.org/howto/external_scripts.html#languages , mas vejo que está faltando, então tentarei atualizá-lo o mais rápido possível.
check_updates=cscript.exe //T:30 //NoLogo "scripts\\check_updates.vbs"
Outra maneira de resolver isso é usar os chamados scripts "encapsulados" no NSClient++, então você pode definir "macros" para como várias extensões são executadas:
Mais detalhes podem ser encontrados aqui: http://docs.nsclient.org/howto/external_scripts.html#wrapped-scripts