nagios如何重复检查服务更多时间不同的论点

时间:2018-10-02 16:03:27

标签: nagios

我在nagios上有一个这样定义的主机:

define host {
    host_name                       my-host
    address                         ip
    display_name                    my-host
    hostgroups                      windows,windows-process-count
    use                             windows-server
    _PROCESSNAME                    my-process1.exe
    _PROCESSCOUNT                   1

}

在此主机上,我仅检查my-process1.exe是否已启动。 但我需要检查更多进程(my-process1,my-process2等...) 我想检查更多过程,定义如下:

    define host {
    host_name                       my-host
    address                         ip
    display_name                    my-host
    hostgroups                      windows,windows-process-count
    use                             windows-server
    _PROCESSNAME                    my-process1.exe
    _PROCESSCOUNT                   1
    _PROCESSNAME2                   my-process2.exe
    _PROCESSCOUNT2                  1
    _PROCESSNAME2                   my-process3.exe
    _PROCESSCOUNT2                  4
    etc...... for x process that i must control on this server

}

但是以这种方式,我必须定义x个服务,x个主机组和x个命令。 这很不舒服,也不是很优雅。

获得此结果的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

不幸的是,我认为没有一种优雅的方式可以做到。我一直与Nagios一起使用面向服务的方法,这意味着我定义了一个服务或进程的监视,然后链接了使用该进程且需要监视的所有主机或主机组,即使它是一台服务器。对我来说,我发现这是最可靠,整洁和可持续的方式。

如果您可以在任何一项服务失败时提供常规警报,则可以准备一个自定义命令来在一个单独的脚本中检查所有警报,我不希望在我的仪表板中看到它。

我知道这是您要避免的事情,但是,如果我是您,并且考虑到您有一台服务器来监视这些过程,那么我将准备一个单独的服务文件,例如:

#!/bin/bash

srvCfg = "/etc/nagios3/conf.d/host1procs.cfg" # I am using Nagios over Debian
server="host1"
processes=("process1.exe" "process2.exe")
srvGroup="customservicegroup"

for proc in "${processes[@]}"; do
    echo "define service{" >> $srvCfg
    echo "  use             generic-service" >> $srvCfg
    echo "  host_name       $server" >> $srvCfg
    echo "  servicegroups       $srvGroup" >> $srvCfg
    echo "  service_description Process monitoring for $proc" >> $srvCfg
    echo "  check_command  check_nt!PROCSTATE!-d SHOWALL -l $proc" >> $srvCfg
    echo "}" >> $srvCfg
done

我假设您的示例只是一个示例,进程名称实际上不能迭代生成列表。该脚本将生成类似以下文件:

define service{
  use           generic-service
  host_name     host1
  servicegroups     customservicegroup
  service_description   Process monitoring for process1.exe
  check_command  check_nt!PROCSTATE!-d SHOWALL -l process1.exe
}
define service{
  use           generic-service
  host_name     host1
  servicegroups     customservicegroup
  service_description   Process monitoring for process2.exe
  check_command  check_nt!PROCSTATE!-d SHOWALL -l process2.exe
}

如果不希望将所有服务自动包含在服务组中,则必须定义该服务组。

我知道这不是您要寻找的答案,但希望对您有帮助