0

我们正在使用 icinga2 进行监控。我们有很多通过应用规则动态应用的服务检查。此外,这些服务应用于各种主机上的数据库实例的哈希映射。总而言之,我们的服务名称是动态确定的,例如HOST!DBNAME-svcvheck.

所以场景是这些服务中的大多数都依赖于一个数据库,例如,“HOST!DBNAME-tnsping”。不幸的是,文档示例相当简单,不包括动态创建父服务引用。我认为我想做的是这样的:

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.

应用 a 时引用其他对象变量的规则Dependency似乎与应用 Service 有点不同。

有没有人有任何想法或示例将服务依赖项动态应用于动态生成的服务?

4

1 回答 1

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
                }
        }

}
于 2019-07-22T13:50:10.103 回答