Nagios - NSClient ++ não pode executar script externo incluído

2

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.

Eu quero monitorar o estado das atualizações do Windows nos 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, veio junto com o NSClient ++.

Eu ativei 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 fazer isso:

[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)

Eu entendo que o NSClient pode executar plugins 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? Ler os documentos do NSClient ++ só me trouxe até agora ...

UPDATE 1:

Eu segui as instruções fornecidas por Michael Medin ao pé da letra. Agora meu 'nsclient-full.ini' é 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' 

Em uma nota lateral, parece que o plugin retornou 'OK', já que a caixa correspondente no Nagios é verde.

UPDATE 2:

Depois de pesquisar nos fóruns do NSClient ++, encontrei alguém com o mesmo problema. Acontece que eu estava faltando um '\':

check_updates=scripts\check_updates.vbs

Deve ser:

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 corretas agora, mas a operação expira. Se eu substituir o tempo limite para 120s com a opção '-t' da linha de comando, recebo esta mensagem de erro:

CHECK_NRPE: Received 0 bytes from daemon.  Check the remote server logs for error messages.
    
por dsljanus 27.10.2014 / 16:30

1 resposta

3

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 eles mesmos (ish). Assim, todos os scripts devem ser prefixados com seu tempo de execução.

Em teoria, isso deve ser documentado aqui: link , mas vejo que está faltando, então vou tentar para 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 "embrulhados" no NSClient ++, então você pode definir "macros" de como várias extensões são executadas:

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

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

Mais detalhes podem ser encontrados aqui: link

    
por 28.10.2014 / 08:41