我目前正在尝试为主机组中的所有主机定义一组服务,这个效果很好。
我的问题是,我希望能够从主机组覆盖主机中包含的这些服务定义。例如,当某个特定的 Linux 服务器需要将其 PING 检查阈值从默认值提高时。
例如,我希望linux-server
主机组中有一个主机,它继承了几个服务(SSH,磁盘,PING 等),但对于特定服务,我想用它们自己的唯一值覆盖,并使用自定义值定义特定于该主机的服务。
linux-server
例如,使用自定义PING
服务定义来定义主机:
define host {
use n1-host
host_name server-01
hostgroups linux-server
alias Test Linux Server
parents my-gateway,upstream-gateway
address server01.test.com
}
define service {
use generic-service
host_name server-01
service_description PING
check_command check_ping!100.0,5%!400.0,15%
}
不幸的是,目前,即使主机名和服务描述与组级 PING 检查相匹配,也只列出了一个 PING 服务,server-01
而且这是组级 PING 检查,而不是主机级 PING 检查。
它似乎正在注册在某种程度上在我的 Nagios 日志中我可以看到:
7 月 16 日 19:12:27 localhost nagios:警告:在主机“server-01”上发现服务“PING”的重复定义
但最终,它不起作用,因为如果我检查服务检查结果的“性能数据”,我可以看到数据中包含的阈值是组检查的阈值,而不是主机检查的阈值。
不过,我的理解是,版本发生了变化,
3.2.0
允许主机级服务优先于主机组级服务。我目前正在运行3.4.1
,所以我认为这应该可以工作。一些链接让我相信这个功能应该已经得到实施:
此外,我检查了
xdata/xodtemplate.c
3.4.1 源代码中的文件副本,乍一看,在“跳过列表”中,主机级别检查似乎优先于主机组检查。尽管我承认,我的分析还很初级。我知道可以从一个组中排除某些主机,但这对我来说不起作用,因为一个主机组可能有多个服务,而我不希望将所有这些服务从主机中删除。
我还发现,必须维护一个与主机本身实际定义位置不同的排除列表,这很不直观。例如,上面的一个链接(第二个)给出了以下建议:
在服务定义中“hostgroup_name”下添加一行:“host_name !zlinux_hostname”
这将把 zlinux 主机排除在服务检查之外。
对我来说,这不是一个理想的解决方案,因为我们最终可能不得不做出许多例外,而且这似乎很难维持。
如果有人对如何实现这一点有任何建议和见解,我将不胜感激!
附加位
目前,我正在定义我的组级 PING 服务,如下所示:
define hostgroup {
hostgroup_name linux-server
name Linux Servers
}
define service {
use generic-service
hostgroup_name linux-server
service_description PING
check_command check_ping!100.0,2%!400.0,10%
}
答案1
我知道这是一篇旧帖子,但我在寻找其他内容时偶然发现了这个问题。我不是 Nagios 专家,但我确实喜欢它。
您在主机组中设置的任何检查都将应用于该主机组中的任何主机(您已经知道)。如果您在主机 cfg 中创建相同的检查,那么它将覆盖主机组检查。
无论如何,我这样做的方法是:
1. 设置一个包含检查内容的 hostgroup cfg 文件。以下是我基本的 C: 驱动器空间检查。
define service{
use generic-service
hostgroup_name windows-servers
service_description C: Drive Space
notification_period workhours
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}
2. 但是,有一台服务器的可用空间比正常情况下少得多。因此,在其主机 cfg 中,我拥有:
define service{
use generic-service
host_name ServerName
service_description C: Drive Space
check_command check_nt!USEDDISKSPACE!-l c -w 95 -c 99
notification_period workhours
}
现在,服务检查将在主机组中所有主机达到 80% 和 90% 时向您发出警报,但您添加了检查并且其中包含更改值的主机除外。
通过这种方式安排,我只能添加自定义服务以及主机定义中不属于常态的服务检查。
我不确定这是否常见,但是本文在设置配置文件时,我大吃一惊。我已经厌倦了编辑这些巨大的文本文件,而这让一切变得如此简单。
无论如何,我希望这会有所帮助。
答案2
您可以使用“自定义变量宏”(http://nagios.sourceforge.net/docs/3_0/macros.html)
在您的 ping 服务定义中使用例如:
check_command check_ping!200.0,20%!$_HOSTVAR_SERVICE_PING_CRITICAL_RTA$,40%
在您的主机模板中设置一个默认值:
_VAR_SERVICE_PING_CRITICAL_RTA 500
在主机定义中应该使用差异值集,例如
_VAR_SERVICE_PING_CRITICAL_RTA 1500
明确地。