![Nagios check_procs 未报告非由 root 生成的进程](https://linux22.com/image/770432/Nagios%20check_procs%20%E6%9C%AA%E6%8A%A5%E5%91%8A%E9%9D%9E%E7%94%B1%20root%20%E7%94%9F%E6%88%90%E7%9A%84%E8%BF%9B%E7%A8%8B.png)
我正在尝试设置 Nagios 来监控负载均衡器上的 nginx 服务,但无法让它显示服务正在运行。命令和服务定义如下。似乎任何不是由 root 生成的进程都不会显示为正在运行。nginx 进程由 www-data 运行。我甚至尝试了一些简单的事情,比如让它检查我以不同用户身份运行的“顶级”进程。只要我选择一个由 root 运行的进程,下面介绍的方法就可以正常工作。如果该进程是由任何其他用户生成的,它会显示为关键进程并且不起作用。有什么想法吗?
define command {
command_name check_nginx
command_line $USER1$/check_procs -c 1: -C nginx
}
define service {
use local-service
host_name my_host
service_description Load Balance Service
check_command check_nginx
}
答案1
在尝试了 check_proc 插件中包含的所有不同选项但都无济于事后,我决定走一条不同的路线。我创建了以下 python 脚本并将其包含在插件目录中。python 脚本名称是 check_service.py。如果您将其命名为其他名称,则必须相应地修改下面的服务和命令。
import os
status = os.system('systemctl is-active --quiet nginx')
if status == 768:
print('Critical, Service is not running')
exit(2)
elif status == 0:
print('OK, Service is Running')
exit(0)
然后我将以下命令添加到了commands.cfg文件中。$ARG1$用于我正在编写的脚本的未来版本。它不是必需的。
define command{
command_name check_service
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_service $ARG1$
}
像这样定义服务
define service {
use local-service
host_name debian
service_description Load Balance Service
check_command check_service
}
然后在客户端我将此命令添加到 nrpe.cfg 文件中
command[check_service]=python3 /usr/lib/nagios/plugins/check_service.py
希望这对以后的某人有所帮助。