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



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

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

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 评估语句时,它应执行为 如果返回字符串不等于好

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

谢谢

基于这个线程,我的猜测是感叹号无法在check_command中转义,您需要完全避免它们。

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

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

将NRPE 服务器命令更改为:

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

在纳吉奥斯服务器上

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 或 !

谢谢你!!

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

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

在NRPE服务器上,NRPE

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

在纳吉欧斯服务器上

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$

在纳吉欧斯服务器上

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 将在评估消息时删除所有这些字符。

最新更新