我的Nagios 3(Icinga 1,实际)configuration中的一个大的易失部分看起来像这样:
... define host{ host_name bla0037 use template-bla } define host{ host_name bla0042 use template-bla } ...
如果我可以将主机定义绑定到单行,脚本化pipe理将会更容易,如下所示:
... define host{ host_name bla0037; use template-bla } define host{ host_name bla0042; use template-bla } ...
但我还没有发现如何。 (例如,分号使剩下的一行成为注释)。 想法?
(生成大量的小型host-bla0XYZ.cfg文件也将有助于自动化,但我宁愿不要混乱configuration文件)。
不,你不能这样做。 configuration文件parsing器一次只读取一行,并且每行需要一个指令。 您将不得不大量修改xodtemplate.c的parsing器来执行此操作。
parsing器中唯一的特殊例外是; 或# (注释)和\ (将长行分成多行)。
我能想到的唯一方法就是在pipe理系统输出中使用一些不同的分隔符作为替身,然后在Nagios上对这些文件进行后处理(如sed -e ) / Icinga结束到configuration文件。
例如,您可以在每次重装/ HUP之前修改init脚本以运行后处理作业。 这将是一个丑陋的黑客,但它可以工作。
你提到你正在使用Icinga。 如果您使用的是最新的Icinga2,则configuration格式通过分号支持单行定义。 我在自己的设置中执行此操作,以便在使用合理的configuration时添加新的服务。 例如
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而不适合你,那么可能还有一些格式问题。