为了从一开始就消除一些可能产生的混淆,我并不打算在主机定义中定义自己的字段,而是创建一个可以在多个主机定义中使用该变量来填充其中一个标准字段。
当我将虚拟机添加到我们的 Nagios 服务器时,我会将虚拟化集群中的计算机添加为该计算机的父级,因为只要其中任何一台服务器启动,虚拟机就应该可以访问。这会导致在每个虚拟机的定义中出现以下形式的条目:
define host{
host_name xxx1
alias xxx1.domain.tld
address xxx.xxx.xxx.xxx
parents dom0_1, dom0_2, dom0_3, dom0_4, dom0_5, dom0_6
...
}
问题是,我们的集群不断变化和扩展,并且必须在每个虚拟机中更新此条目,这很麻烦,我希望能够在一个地方更改它,并让该更改影响我们所有虚拟机的定义。
答案1
同意使用模板,但模板语法需要稍微不同。模板是添加了“register 0”的主机/服务定义,然后您在实际主机定义中使用时继承模板,不要忘记在新模板中继承系统默认主机
define host {
name host-template1
use generic-host
parents dom0_1,dom0_2
register 0
}
define host {
use host-template1
host_name .....
....
}
答案2
Nagios 将这些称为“宏”,并在 resource.cfg 中定义它们,您可以在 Nagios 安装的 /etc 目录中找到该文件。例如:
$USER5$=dom0_1,dom0_2,dom0_3,dom0_4,dom0_5,dom0_6
添加到 resource.cfg 应该可以完成这项工作 ($USER1$ 到 $USER4$ 已被占用);不过,您可能需要使用反斜杠和其他东西来转义所有逗号/空格。然后您可以像这样定义您的主机:
define host{
host_name xxx1
alias xxx1.domain.tld
address xxx.xxx.xxx.xxx
parents $USER5$
...
}
答案3
我认为您想使用模板:
define template {
parents dom0_1, dom0_2
name cluster_parents_tmpl
}
define host {
use cluster_parents_tmpl
host_name xxx1
alias xxx1.domain.tld
address xxx.xxx.xxx.xxx
...
}