Nagios - 如何在传递给 NRPE 服务器的参数中使用逻辑运算符

Nagios - how to use logical operators in args passed to NRPE server

我需要对作为字符串传递给 NRPE 的参数使用逻辑运算符。该运算符也被 NRPE 用作 FIELD 分隔符。哪个是 splat 或 !令牌。

引用传递的 arg 的不同方式。没有影响。

Nagios Command.cfg
define command{
        command_name    check_remote_container_broker_health
        command_line    $USER1$/check_jmx4perl $ARG1$ $ARG2$ $ARG3$
        }

Nagios Remote Service
define service{
        use                             generic-service
        host_name                       alphprdfuse1i
        service_description             Container IPRCMT1 Broker Health
        check_command                   check_nrpe!check_remote_container_broker_health!-a '--user iprcmtx --password G00gl3M3 --url http://localhost:9091/jolokia --mbean org.apache.activemq:type=Broker,brokerName=amq,service=Health --attribute CurrentStatus --string --critical '!Good''
        }

NRPE 服务器 NRPE.cfg

command[check_remote_container_non_heap_used]=/usr/local/nagios/libexec/check_jmx4perl $ARG1$ $ARG2$

当 NRPE 评估语句时,它应该执行为 如果 return.string 不等于 好

但是,NRPE 将其视为字段分隔符

谢谢

将 NRPE 服务器命令更改为:

command[check_remote_container_broker_health]=/usr/local/nagios/libexec/check_jmx4perl $ARG1$ '!$ARG2$'

在 Nagios 服务器上

define service{
        use                             generic-service
        host_name                       alphprdfuse1i
        service_description             Container Delta FADEC Broker Health
        check_command                   check_nrpe!check_remote_container_broker_health!-a "--user deltafadec --password B@dM0nk3y --url http://localhost:9093/jolokia --mbean org.apache.activemq:type=Broker,brokerName=amq,service=Health --attribute CurrentStatus --string --critical" "Good"
        }

所以删除!从传递给 NRPE 的参数中,让 NRPE 命令发出逻辑 NOT 或 !

根据this thread我的猜测是感叹号不能在check_command中转义,你需要完全避免它们。

一种方法是将感叹号移到其他地方,例如 NRPE 配置中的命令定义。

另一种可能是使用 resources.cfg 并定义一个带有 Nagios 将解析的数字的 $USERX 宏,这可能是密码等情况下最好的做法,但也许不是在这种情况下。

谢谢!!!

我确实尝试过使用 resources.cfg 并添加 $USERn$ 定义。这对我不起作用。 我确实尝试在 NRPE 服务器上形成表达式,以接受特殊字符。这行得通。这都是因为我们通过允许脏字符和 bash shell 运算符来避免网络安全风险。所以,这是最好的解决方案。只是需要一些时间来了解发生了什么。如果您将日志记录设置得较高,您可以看到宏是如何分解它的。不管怎样,这是我针对几个实现的解决方案。

我将分享2个例子和情况。

在 NRPE 服务器上,NRPE.cfg

command[check_remote_container_broker_health]=/usr/local/nagios/libexec/check_jmx4perl $ARG1$ '!$ARG2$'

在 Nagios 服务器上

define service{
        use                             generic-service
        host_name                       alphprdfuse1i
        service_description             Container PassThru Context State
        check_command                   check_nrpe!check_remote_container_context_state!-a '--user passthru --password B@dC0mpany --url http://localhost:9090/jolokia --mbean org.apache.karaf:type=admin,name="PassThru MultiTenant" --attribute Instances --path "PassThru MultiTenant"/State --critical' 'Started'
        }

在 NRPE 服务器上,NRPE.cfg

command[check_remote_container_context]=/usr/local/nagios/libexec/check_jmx4perl $ARG1$ $ARG2$ $ARG3$ $ARG4$ '$ARG5$"$ARG6$"' $ARG7$

在 Nagios 服务器上

define service{
        use                             generic-service
        host_name                       alphprdfuse1i
        service_description             Container PassThru Context ExchangesCompleted
        check_command                   check_nrpe!check_remote_container_context!-a "--user passthru" "--password B@dC0mpany" "--url http://localhost:9090/jolokia" "--mbean" "org.apache.camel:context=passthrumt1.core-com.ge.digital.passthru.coreCamelContext,type=context,name=" "com.ge.digital.passthru.coreCamelContext" "--attribute ExchangesCompleted"
        }

总结 所以,如果你不启用在 NRPE 上使用特殊字符,并且将这些字符从 Nagios 服务器发送到 NRPE 系统,这被声明为安全风险并且你可以避免使用。所以,它就变成了一个字符串操作来确定什么有效。基本上,如果您在 Nagios 请求 NRPE 时有任何特殊字符,您需要将此语句分成几个没有特殊字符的字符串,并在 NRPE 端应用特殊字符。 NRPE 将在评估消息时删除所有这些字符。