在 Icinga/Nagios 中监控服务名称中包含 $ 的服务

在 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

您必须$用另一个来逃避$,并用单引号括住名称:

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

或者,您可以使用 来省略单引号MSSQL\$$PROD。我更喜欢第一个调用 ;)

答案2

Krissi 给出了正确答案。

我只想提一个可能更容易解析的选项:将命令定义更改为另一个$ARG$,然后这种转义的复杂性将在您的命令定义中处理,而不是在每个服务中处理。所以现在您的服务看起来像:

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

在你的commands.cfg中:

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

答案3

出于某种原因,您需要“引用”它并将 $ 符号加倍。

例如,Windows 内部数据库的服务名称是“MSSQL$MICROSOFT##SSEE”。

我的check_command:

check_command           check_nt_srv!MSSQL"$$"MICROSOFT\#\#SSEE

答案4

我尝试了上述答案,但无济于事,并且还试图监视 SQL Server 实例。现在,在 2017 年,看来只要您保留引号,不将 $ 加倍也是可行的:

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

相关内容