web-dev-qa-db-ja.com

Icinga / Nagiosのサービス名に$が含まれるサービスを監視する

Windowsサーバーに存在するいくつかのMSSQLインスタンスで監視を設定しようとしています。ここでの問題は、サービス名に$(たとえば、MSSQL$PROD)が含まれている場合、check_ntコマンドがnullの警告を返すことです。

以下は私がwindows.cfgに持っているものの例です

define service{
        use                     generic-service
        Host_name               SERVERNAME
        service_description     MSSQL Service
        check_command           check_nt!SERVICESTATE!-d SHOWALL -l MSSQL$PROD
        }

サービス名を「」(スペースのあるサービスで機能します)で囲み、サービス名の$の前にバックスラッシュを付けてみましたが、うまくいきませんでした。これができるかどうか誰かが知っていますか?

1
DKNUCKLES

$を別の$でエスケープし、名前を一重引用符で囲む必要があります。

define service{
        use                     generic-service
        Host_name               SERVERNAME
        service_description     MSSQL Service
        check_command           check_nt!SERVICESTATE!-d SHOWALL -l 'MSSQL$$PROD'
        }

または、MSSQL\$$PRODを使用して一重引用符を省略することもできます。私は最初の電話がもっと好きです;)

3
krissi

Krissiは正しい答えを持っています。

解析しやすいオプションについて説明したいと思います。コマンド定義を変更して別の$ARG$を取得すると、この種のエスケープの複雑さは、各サービスではなくコマンド定義で処理されます。これで、サービスは次のようになります。

check_command    check_nt!SERVICESTATE!-d SHOWALL -l MSSQL!PROD

およびcommands.cfg内:

command_line     /path/to/commmand --someopt value1 $ARG1$"$$"$ARG2$
1
BMDan

私は上記の答えを無駄に試しましたが、SQLServerインスタンスも監視しようとしています。さて、2017年には、見積もりを維持している限り、$を2倍にしないように見えます。

check_nt -H xx.xx.xx.xx -s "" -p 12489 -v SERVICESTATE -l 'MSSQL$BLAHBLAH' -d SHOWALL

0
trpt4him

何らかの理由で、それを「引用」して$記号を2倍にする必要があります。

たとえば、Windows内部データベースのサービス名は「MSSQL $ Microsoft ## SSEE」です。

私のcheck_command:

check_command           check_nt_srv!MSSQL"$$"Microsoft\#\#SSEE
0
ThatGraemeGuy