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
}
サービス名を「」(スペースのあるサービスで機能します)で囲み、サービス名の$の前にバックスラッシュを付けてみましたが、うまくいきませんでした。これができるかどうか誰かが知っていますか?
$
を別の$
でエスケープし、名前を一重引用符で囲む必要があります。
define service{
use generic-service
Host_name SERVERNAME
service_description MSSQL Service
check_command check_nt!SERVICESTATE!-d SHOWALL -l 'MSSQL$$PROD'
}
または、MSSQL\$$PROD
を使用して一重引用符を省略することもできます。私は最初の電話がもっと好きです;)
Krissiは正しい答えを持っています。
解析しやすいオプションについて説明したいと思います。コマンド定義を変更して別の$ARG$
を取得すると、この種のエスケープの複雑さは、各サービスではなくコマンド定義で処理されます。これで、サービスは次のようになります。
check_command check_nt!SERVICESTATE!-d SHOWALL -l MSSQL!PROD
およびcommands.cfg内:
command_line /path/to/commmand --someopt value1 $ARG1$"$$"$ARG2$
私は上記の答えを無駄に試しましたが、SQLServerインスタンスも監視しようとしています。さて、2017年には、見積もりを維持している限り、$を2倍にしないように見えます。
check_nt -H xx.xx.xx.xx -s "" -p 12489 -v SERVICESTATE -l 'MSSQL$BLAHBLAH' -d SHOWALL
何らかの理由で、それを「引用」して$記号を2倍にする必要があります。
たとえば、Windows内部データベースのサービス名は「MSSQL $ Microsoft ## SSEE」です。
私のcheck_command:
check_command check_nt_srv!MSSQL"$$"Microsoft\#\#SSEE