Nagios 用于对象继承的自定义变量

Nagios 用于对象继承的自定义变量

在我们的 Nagios 设置中,我们使用模板和对象继承来提供服务和主机。

#Le Hosts
define host{
    use            linux-nrpe,linux-dc3,linux-cassandra
    host_name      tigris
    alias          tigris
    address        192.168.4.72
    }

define host{
    use            linux-nrpe,linux-dc3,linux-cassandra
    host_name      euphrates
    alias          euphrates
    address        192.168.4.177
    }

#Le Templates
define host{
    name           linux-nrpe
    use            all-hosts
    hostgroups     linux-nrpe
    contact_groups rhands,usergroup1,opcomms
    register       0
}

#Le Services
define service{
    hostgroup_name      linux-nrpe
    use                 high-priority-service,graphed-service
    service_description Load
    check_command       check_by_nrpe!check_load!5,5,6!9,9,9
    contact_groups      rhands,usergroup1,opcomms
    }
[...etc...]

这种设置的问题在于,linux-nrpe当负载水平达到服务中定义的水平时,组内的所有服务器都会触发警报,但我们的主力服务器可能会以 20 的负载全天候运行,但我们的数据库服务器除非出现问题,否则负载水平会保持在 1 左右,因此我们发现系统发出了太多警报,或者不得不忽略/不发出警报。为每台服务器(很多台)定义单独的服务定义会花费很长时间,我们真正想要做的是

define host{
    name           linux-nrpe
    use            all-hosts
    hostgroups     linux-nrpe
    contact_groups rhands,usergroup1,opcomms
    register       0
    perf_load      2,2,3 5,5,6
    perf_mem       95% 97%
    [...more...]
    }

define service{
    hostgroup_name      linux-nrpe
    use                 high-priority-service,graphed-service
    service_description    Load
    check_command       check_by_nrpe!check_load!$perf_mem$
    contact_groups      rhands,usergroup1,opcomms
    }

我查看了文档,什么也没看到,除非我遗漏了什么。有什么想法吗?

答案1

我们在 Nagios 监控中运行了一个非常相似的解决方案。自定义主机/服务变量在定义时必须以下划线开头,在引用时必须添加 _HOST 或 _SERVICE 作为前缀,并以大写字母作为名称。

因此,您必须将 perf_load 和 perf_mem 自定义变量定义为

define host {
    [..]
    _perf_load      2,2,3 5,5,6
    _perf_mem       95% 97%
    [..]
}

并引用为

define service {
    [..]
    check_command   check_by_nrpe!check_load!$_HOSTPERF_LOAD$
    [..]
}

以下是我们 Nagios 运行配置的一个片段:

define host {
       host_name               target
       alias                   target
       address                 target
       use                     tmpl_host
       _gprs_address           192.168.0.1
}
[...]
define service {
        host_name               target
        service_description     GPRS ping
        use                     tmpl_service_ping
        check_command           check_fping-by-ssh!-H 1.2.3.4 -S $_HOSTGPRS_ADDRESS$ -n 7 -t 1000 -w 1000 -c 2000
        event_handler           check_restart-GPRS-PPP
        notes_url               https://wiki.
        contact_groups          admin_allday
}

您可以在 Nagios 中找到更多详细信息文档

作为参考,这项工作在 Icinga 中也很好。

答案2

您还可以在主机本身的 NRPE 配置中定义阈值。如果您有几十台以上的主机,这种方法就不切实际了,除非您有某种配置管理(如 puppet,甚至只是 git/hg/svn/whatever)并在 nrpe.cfg 中使用“includes”。

不过,Lairsdragon 的建议要好得多。我想补充的是:

使用两个前导下划线 ($__FOO) 来命名自定义对象变量会很有帮助,因此它们可以被称为“$_HOST_FOO”。

相关内容