我的 Nagios 3(实际上是 Icinga 1)配置中很大一部分不稳定的部分如下所示:
...
define host{
host_name bla0037
use template-bla
}
define host{
host_name bla0042
use template-bla
}
...
如果我可以将主机定义捆绑成单行,那么脚本管理将会容易得多,如下所示:
...
define host{ host_name bla0037; use template-bla }
define host{ host_name bla0042; use template-bla }
...
但我还没找到方法。(例如,分号使该行的其余部分成为注释)。有什么想法吗?
(生成大量小host-bla0XYZ.cfg
文件也有助于自动化,但我不想使配置文件目录变得混乱)。
答案1
不,您不能这样做。配置文件解析器每次读取一行,并且每行只读取一个指令。您必须对解析器进行大量修改才能xodtemplate.c
做到这一点。
解析器中唯一的特殊例外是;
或#
(注释)和\
(将长行拆分为多行)。
我能想到的唯一方法是使用一些不同的分隔符作为管理系统输出中的替代品\n
,然后sed -e
在 Nagios/Icinga 端对这些文件进行后期处理(例如)并将其转换为配置文件。
例如,您可以修改 init 脚本,使其在每次重新加载/HUP 之前运行后处理作业。这可能是一个丑陋的 hack,但它可以发挥作用。
答案2
您提到您正在使用 Icinga。如果您使用的是最新版 Icinga2,配置格式支持通过分号进行单行定义。我在自己的设置中执行此操作,以便在使用 ansible 进行配置时添加新服务。例如
apply Service "freshness_etl_vendor_import_6am" to Host { import "etl-freshness-service" ; vars.dependens_on_job = "etl_vendor_import_6am" ; assign where "etl_host" in host.groups }
看这里欲了解更多详情,请参阅文档。如果您使用的是 icinga2,但它无法正常工作,则可能是存在其他格式问题。