web-dev-qa-db-ja.com

Nagios-NSClient ++は含まれている外部スクリプトを実行できません

Centos 7マシンでNagios 3.5を実行しています。このセットアップは、NRPE(check_nrpeコマンド)を介して一部のWindowsマシンを監視するために使用されます。とりあえず、「nsclient-full.ini」ファイルに入っている事前設定された「エイリアス」コマンドを使用しています。これまでのところすべてが正常に機能しています。

'alias_updates'コマンドを使用して、ホストのWindows Updateの状態を監視したいと思います。

; 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 GUIのコマンドに対応するボックスに同じエラーメッセージが表示されます。

誰でもこれを修正する方法を知っていますか? 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の対応するボックスが緑色であるため、プラグインは 'OK'を返したように見えます。

更新2:

NSClient ++フォーラムで検索した後、同じ問題を持つ誰かを見つけました。 「\」が欠落していたことがわかりました:

check_updates=scripts\check_updates.vbs

する必要があります:

check_updates=scripts\\check_updates.vbs

しかし、私はそれをまだ機能させることができません。スクリプトの通信と実行は今や問題ないようですが、操作がタイムアウトしました。コマンドラインから '-t'オプションを使用してタイムアウトを120秒にオーバーライドすると、次のエラーメッセージが表示されます。

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

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"

これを解決するもう1つの方法は、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

3
Michael Medin