我有一个用作 NRPE 插件的 Python 脚本。此脚本通过执行附加了“ps ax | grep process”的 SSH 单行命令来检查进程是否在虚拟机上运行。手动执行脚本时,它会按预期工作,并为 NRPE 返回一行输出以及基于进程是否正在运行的状态。
当我尝试运行命令setup来执行此脚本(从我的Nagios服务器)时,我即刻得到输出“NRPE:无法读取输出”,但是当我手动运行脚本时,它需要大约一秒钟才能返回输出。其他命令运行正常,因此看起来 NRPE 需要等待一两秒钟才能输出,而不是立即失败,但我一直找不到任何方法来实现这一点;有什么提示吗?
PS:除了主机之外,虚拟机无法从任何地方访问,因此需要 nrpe 插件从主机 ssh 进入虚拟机来检查该过程。
答案1
答案2
为什么不使用检查过程插入?
在虚拟机上,为您的服务定义一个命令/etc/nagios/nrpe.cfg
:
command[check_<service_name>]=/usr/lib64/nagios/plugins/check_procs -c 1:1 -C <service_name>
从 Nagios 服务器:
define service{
use critical-service
host_name xx
service_description <service_name>
check_command check_nrpe!check_<service_name>
event_handler autostart_<service_name>!xx
process_perf_data 0
contact_groups admin
}
示例结果:
# su - nagios -s /bin/bash
-bash-3.2$ /usr/local/nagios/libexec/check_nrpe -H xx -c check_<service_name>
PROCS OK: 1 process with command name '<service_name>'
答案3
我认为默认超时时间大约为 10 秒,所以可能不是这样。
如果您使用 ssh 执行检查,请记住 nrpe 可能以用户“nagios”的身份运行(取决于安装选项)。该用户是否拥有正确的密钥和 ssh 选项?