Nagios通过pid文件监视进程

有没有可能监控进程与Nagios? 我发现check_procs命令,我不能使用它,因为它不让我指定一个文件来读取PID。 另外,我似乎没有在Google上find任何关于这个的东西,所以我可能对nagios实际上应该做的一些误解。

我的情况是,我有一个有几个虚拟主机的networking服务器。 我可以用check_http来监视那些。

但是,其中一个站点依赖于我也想用nagios监视的后台进程。

解决这个问题的办法就是编写一个检查程序来监视你的后台进程是否有正确的function。 如果你真的只想确定某个PID在运行,那么只运行pgrep $(cat /path/to/pidfile)的脚本就可以运行,但是这个脚本充满了假阳性 – 如果你的进程已经死了,那么其他的东西就会运行并获得相同的PID,那么当它不应该的时候你的进程检查会成功。

这样做的正确方法是在您的服务中剔除守护进程代码,并在daemontools之类的环境下运行它 – 然后当它被炸死时它会自动重启。 然后,您还需要监视function,以捕捉进程不会死的时间,但无法正常运行。

nagios检查进程是由于不同的检查,而不是通过PID。 所有服务(如HTTP,MySQL,DNS等)都有独立的可configuration检查。

例如,我有一个networking服务器和DNS服务器运行。 然后,我将使用check_http插件和check_dns,并使nagios做一个dns查找我主持的DNS的域之一,看看是否仍在运行networking服务器。

如果服务工作不正常,nagios将显示警报。 同样的networking服务器检查和其他人。 check_procs命令用于查看您的服务器是否没有同时运行多个进程(过载)。

在nagios中的所有检查可以configuration不同的参数。

您可以通过从HOST-RESOURCES-MIB中提取hrSWRunName信息来完成。

  1. 在远程主机上安装net-snmp
  2. 编辑如下所示的snmp.conf文件:

     rocommunity s3cret view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.25 
  3. 在监视主机上,用类似下面的方法定义一个check_snmp命令:

     define command{ command_name check_snmp command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P $ARG1$ -o $ARG2$ -C $ARG3$ -r $ARG4$ } 
  4. 最后,创build一个服务定义:

      define service{ use generic-service host_name remote_host service_description <your_service_name> check_command check_snmp!2c!HOST-RESOURCES-MIB::hrSWRunName.<your_service_pid>!s3cret!<service_name> contact_groups admin } 

从命令行testing:

 $ /usr/local/nagios/libexec/check_snmp -o HOST-RESOURCES-MIB::hrSWRunName.2910 -C s3cret -H <ip_address> -P 2c -r nrpe SNMP OK - "nrpe" | $ /usr/local/nagios/libexec/check_snmp -o HOST-RESOURCES-MIB::hrSWRunName.2910 -C s3cret -H <ip_address> -P 2c -r gmond SNMP CRITICAL - *"nrpe"* | 

如果后台进程始终具有相同的名称,那么check_procs命令将起作用。

以下是我在服务器上查看的两个后台进程的本地命令定义。 第一个(OpenDKIM)必须运行2个进程才能通过testing。 第二个(dk-filter)必须有一个进程正在运行。

 # 'check_local_opendkim' command definition define command{ command_name check_local_opendkim command_line $USER1$/check_procs -c 2:2 -C opendkim } # 'check_local_dk-milter' command definition define command{ command_name check_local_dk-milter command_line $USER1$/check_procs -c 1:1 -C dk-filter } 

以下是如何在nrpe.cfg文件中设置相同的检查:

 command[check_opendkim]=/usr/local/nagios/libexec/check_procs -c 2:2 -C opendkim command[check_dk-milter]=/usr/local/nagios/libexec/check_procs -c 1:1 -C dk-filter 

还是有一些原因,你不能依靠进程名称进行validation,它正在运行?