我正在尝试使用具有公共 IP 的一台服务器来监控远程服务器集群。我尝试嵌套check_by_ssh
检查诸如负载等内容。但无论我进行何种引用和转义,似乎都无法使其正常工作。
这是我最近的尝试:
command_line $USER1$/check_by_ssh -H [gatewayhost] -C '$USER1$/check_by_ssh -H $HOSTADDRESS$ -C "$USER1$/check_load -w $ARG1$ -c $ARG2$"'
但 Nagios 会抱怨“无法打开管道”。其他引号和反斜杠组合会导致相同的错误,或者抱怨check_by_ssh
外部或内部调用中的参数。我该如何让它工作?
我可以用国家可再生能源计划我想是的,但我更喜欢check_by_ssh
。
答案1
NRPE 是一个可行的选择。但你也可以使用 NSCA 来设置分布式监控在远程站点具有公共 IP 的机器上运行 Nagios,使用 NSCA 守护程序,但不使用 Web 界面。NSCA 的额外好处是通信至少是加密的。
另一种选择是在站点之间建立 VPN 隧道,此时您可以直接监控集群中的计算机。
答案2
啊哈,我终于明白了!感谢大家的建议。最后,我决定不再尝试使用引号作为内部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 脚本并对其进行了调整,直到最终发挥作用。
答案3
您可以在公共服务器上设置一个简单的检查脚本,该脚本接受 IP 地址和辅助检查命令。然后 nagios 可以调用,例如:check.sh 192.168.1.12 check_load。
Check.sh 随后会通过 ssh 连接到你传递的 ip 地址,运行你传递的命令,并将结果返回给 nagios
答案4
引用
check_by_ssh -H $HOSTADDRESS$ -C '$USER1$/check_load -w $ARG1$ -c $ARG2$'"