我怎样才能让 check_nrpe 等待我的远程脚本完成执行?

我怎样才能让 check_nrpe 等待我的远程脚本完成执行?

我有一个用作 NRPE 插件的 Python 脚本。此脚本通过执行附加了“ps ax | grep process”的 SSH 单行命令来检查进程是否在虚拟机上运行。手动执行脚本时,它会按预期工作,并为 NRPE 返回一行输出以及基于进程是否正在运行的状态。

当我尝试运行命令setup来执行此脚本(从我的Nagios服务器)时,我即刻得到输出“NRPE:无法读取输出”,但是当我手动运行脚本时,它需要大约一秒钟才能返回输出。其他命令运行正常,因此看起来 NRPE 需要等待一两秒钟才能输出,而不是立即失败,但我一直找不到任何方法来实现这一点;有什么提示吗?

PS:除了主机之外,虚拟机无法从任何地方访问,因此需要 nrpe 插件从主机 ssh 进入虚拟机来检查该过程。

答案1

您可以按照说明更改超时时间这里或搜索超时nrpe 文档,虽然我不认为这是你的问题,否则你会看到这样的错误:

CHECK_NRPE: Socket timeout after 270 seconds.

可能还有一个 nagios 插件,它将返回您想要的已写入的数据。

答案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 选项?

相关内容