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

Posted

技术标签:

【中文标题】Nagios - 如何在传递给 NRPE 服务器的参数中使用逻辑运算符【英文标题】:Nagios - how to use logical operators in args passed to NRPE server 【发布时间】:2019-07-15 20:27:51 【问题描述】:

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

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

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 评估语句时,它应该执行为 if return.string NOT EQUAL 好

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

将 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 的 args 中,让 NRPE 命令发出逻辑 NOT 或!

【讨论】:

【参考方案3】:

谢谢!!!

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

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

【讨论】:

您可能希望在资源文件中定义用户宏,以便避免在服务定义中使用--password B@dC0mpany。这是最佳实践,因为 “CGI 不会尝试读取资源文件,因此您可以对它们设置限制性权限(600 或 660)以保护敏感信息。” -- 请参阅文档了解更多信息.

以上是关于Nagios - 如何在传递给 NRPE 服务器的参数中使用逻辑运算符的主要内容,如果未能解决你的问题,请参考以下文章

Nagios nrpe 插件安装在远程主机上

NRPE 教程:Nagios 的扩展

Nagios & NRPE 插件连接被拒绝

Nagios+NSClient+nrpe环境搭建

实战Nagios网络监控—— Nagios+Nrpe监控其他主机

Nagios学习笔记四:基于NRPE监控远程Linux主机