Nagios通过pid文件监控进程

Nagios通过pid文件监控进程

有没有可能使用 nagios 来监控进程?我找到了 check_procs 命令,但我无法使用它,因为它不允许我指定一个文件来读取 PID。另外,我在 Google 上似乎找不到任何关于此内容的信息,所以也许我对 nagios 的实际用途存在误解?

我的情况是,我有一个包含几个 VirtualHost 的 Web 服务器。我可以使用 check_http 来监控它们。

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

答案1

解决这个问题的真正方法是编写一个检查程序来监控后台进程是否正常运行。如果您真的只是想确保某个进程在给定的 PID 下运行,那么只需运行一个脚本pgrep $(cat /path/to/pidfile)就可以了,但这充满了误报的可能性——如果您的进程已经死亡,然后其他进程运行并获得相同的 PID,那么您的进程检查就会成功,而它不应该成功。

恰当的实现此目的的方法是关闭服务中的守护进程代码,并在类似daemontools-- 的情况下运行它,这样当它崩溃时就会自动重新启动。然后您还需要监视功能,以捕捉进程未终止但因某种原因无法正常运行的情况。

答案2

nagios 通过不同的检查来检查进程,而不是通过 PID。所有服务(如 HTTP、MySQL、DNS 等)都有单独的可配置检查。

例如,我有一个正在运行的 Web 服务器和 DNS 服务器。然后我将使用 check_http 插件和 check_dns,并让 nagios 对我托管 DNS 的其中一个域执行 DNS 查找,看看 Web 服务器是否仍在运行。

如果服务无法正常工作,nagios 将显示警报。Web 服务器检查和其他检查也一样。check_procs 命令用于查看您的服务器是否同时运行了太多进程(过载)。

nagios 中的所有检查都可以配置不同的参数。

答案3

hrSWRunName您可以通过从中提取信息来实现主机资源MIB

  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. 最后,创建服务定义:

        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
        }
    

从命令行测试:

$ /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"* | 

答案4

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

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

# '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

或者是否存在某些原因导致您不能依赖进程名称来验证它是否正在运行?

相关内容