我们正在使用icinga2进行监视。我们有很多服务检查,这些检查通过应用规则动态地应用。此外,这些服务适用于各种主机上的数据库实例的哈希图。总而言之,我们的服务名称是动态确定的,因此可以是HOST!DBNAME-svcvheck
。
因此,情况是大多数这些服务都依赖于数据库,例如,“ HOST!DBNAME-tnsping”。不幸的是,documentation示例非常简单,并且不包括动态创建父级服务参考。我想做的事情是这样的:
apply Dependency "db-connectivity" to Service {
parent_service_name = "$host.name$!$service.vars.envname$-tnsping"
# also tried variants of this, e.g.
# parent_service_name = host.name + "!" + service.vars.envname + "-tnsping"
child_service_name = service.name
child_host_name = host.name
disable_checks = true
assign where "oracle-db-svc" in service.templates
}
对于我而言,主机并不重要,因为依赖项仅是服务,而child_host_name
是必填字段。
无论我做什么,我似乎都无法识别父服务。例如:
Error: Dependency 'scan-szepdb041x.myhost.org!UAT2-beqfilelast!db-connectivity' references a parent host/service which doesn't exist.
在应用Dependency
时引用其他对象变量的规则似乎与应用服务有所不同。
有人对将服务依赖项动态应用于动态生成的服务有任何想法或示例吗?
答案 0 :(得分:1)
您可能必须遍历现有主机,然后查看它们是否匹配。然后在循环内部定义依赖项。
我有一个类似的示例,用于动态生成磁盘检查。如果找到它,我会在几天后将其发布在这里。
不确定依赖项是否可行,但是我会看到的。
编辑:看看这样的事情是否足以让您入门:
for (server in get_objects(Host)) {
if (match("somename*", server.name)) {
apply Dependency "db-connectivity" + server.name to Service use (server) {
parent_service_name = server.name + service.vars.envvname + "-tnsping"
child_service_name = service.name
child_host_name = host.name
disable_checks = true
assign where "oracle-db-svc" in service.templates
}
}
}