我试图设置监视在我的Windows服务器上存在的几个MSSQL实例。 这里的问题是,如果服务名称包含$
(例如, MSSQL$PROD
),那么check_nt命令将返回一个空警告。
以下是我在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
省略单引号。 我更喜欢第一个电话;)
克里斯有正确的答案。
我只想提一个可能更容易parsing的选项:改变你的命令定义来获取另一个$ARG$
,因此这种转义的复杂性是在你的命令定义而不是在每个服务中处理的。 所以现在你的服务看起来像:
check_command check_nt!SERVICESTATE!-d SHOWALL -l MSSQL!PROD
并在你的commands.cfg中:
command_line /path/to/commmand --someopt value1 $ARG1$"$$"$ARG2$
您需要“引用”它,并出于某种原因使$符号翻倍。
例如,Windows Internal Database的服务名称是“MSSQL $ MICROSOFT ## SSEE”。
我的check_command:
check_command check_nt_srv!MSSQL"$$"MICROSOFT\#\#SSEE
我试过上面的答案无济于事,也试图监视SQL Server实例。 现在,在2017年,只要你保持报价,看起来不要加倍$作品:
check_nt -H xx.xx.xx.xx -s "" -p 12489 -v SERVICESTATE -l 'MSSQL$BLAHBLAH' -d SHOWALL