在Nagios中嵌套check_by_ssh?

我试图用一台具有公共IP的服务器来监视远程服务器集群。 我试图嵌套check_by_ssh检查负载等东西,但不pipe是什么样的引用和转义我做,我似乎无法得到它的工作。

这是我最近的尝试:

 command_line $USER1$/check_by_ssh -H [gatewayhost] -C '$USER1$/check_by_ssh -H $HOSTADDRESS$ -C "$USER1$/check_load -w $ARG1$ -c $ARG2$"' 

Nagios抱怨“无法打开pipe道”。 引号和反斜杠的其他组合会导致相同的错误,或者在外部调用或内部调用中报告check_by_ssh参数。 我如何得到这个工作?

我可以使用NRPE ,但我更喜欢check_by_ssh

NRPE是应该工作的一个选项。 但是,您也可以使用NSCA来设置分布式监控 ,在远程站点上拥有公共IP的计算机上运行Nagios(带NSCA守护程序并减去Web界面)。 NSCA的额外好处是通信至less被encryption。

另一个select是在站点之间build立一个VPN隧道,您可以直接监视群集中的计算机。

啊哈,我终于明白了! 感谢大家的build议。 最后,我决定不用尝试使用内部check_by_ssh命令的引号,而是转义空格。 双黑色工作,所以最后的工作nagios.cfg线是:

 command_line $USER1$/check_by_ssh -H [gatewayhost] -C "$USER1$/check_by_ssh -H $HOSTADDRESS$ -C $USER1$/check_load\\ -w\\ $ARG1$\\ -c\\ $ARG2$" 

为了缓解一切,我最终写出了一个扩展的参数到一个Bash脚本,并调整它,直到它终于奏效。

你可以在你的公共服务器上设置一个简单的检查脚本,它需要一个IP地址和辅助检查命令。 然后nagios可以调用,例如:check.sh 192.168.1.12 check_load。

Check.sh会然后ssh到你通过的IP地址,运行你传递的命令,并返回结果给nagios

validationNagios用户的正确密钥设置:
我使用check_by_ssh进行各种检查,工作正常。 首先确保你有正确的SSH密钥设置。 使用以下语法切换到nagios用户(您需要envvariables,我认为):

 su - nagios 

然后SSH到另一个盒子,以确保基于密钥的身份validation没有问题。

引用问题:
引用/扩展可能有点难以理解。 通过这个关键是要启用完整的debugging,所以你可以看到什么东西扩展到。 为此,请在nagios.cfg中设置以下三项内容,然后拖放您的debugging文件:

 debug_level=-1 # DEBUG VERBOSITY # This option determines how verbose the debug log out will be. # Values: 0 = Brief output # 1 = More detailed # 2 = Very detailed debug_verbosity=2 # DEBUG FILE # This option determines where Nagios should write debugging information. debug_file=/usr/local/nagios/var/nagios.debug 

您可能需要通过grep进行筛选,因为最终会得到相当数量的输出。

通过SSH检查的参考:
也供你参考,例如工作check_by_ssh命令:

 command_line $USER1$/check_by_ssh -t 300 -H $HOSTADDRESS$ -C "$USER1$/checkBandwidth.pl -w $_HOSTPARAM_BAND_W$ -c $_HOSTPARAM_BAND_C$ -s 8 -d" 

编辑,也许使用IPTables绕过嵌套:
哦,我错过了整个筑巢部分…叹了口气。 无论哪种方式,检查这两个部分的密钥以及debugging日志站。 但是,由于使用嵌套的check_by_ssh正在运行一个命令,您可能无法获得所需的环境variables。 你可能会考虑在中间主机上使用iptables转发一个端口来绕过整个嵌套问题。

也许在帮助中指定嵌套检查中的密钥文件。 我认为check_by_ssh的以下选项可能会有所帮助:

  identity of an authorized key [optional] -O, --output=FILE 

引用

check_by_ssh -H $HOSTADDRESS$ -C '$USER1$/check_load -w $ARG1$ -c $ARG2$'"