【问题标题】:nagios how repeat check service more time different argumentnagios 如何重复检查服务更多时间不同的参数
【发布时间】:2018-10-02 16:03:27
【问题描述】:

我在 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 命令。 这很不舒服,也不是很优雅。

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

【问题讨论】:

    标签: nagios


    【解决方案1】:

    不幸的是,我认为没有一种优雅的方式可以按照您的意愿进行操作。我一直使用面向服务的方法与 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
    }
    

    如果您希望所有服务都自动包含在其中,则必须定义服务组,如果不取出服务组行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多