简体   繁体   中英

Applying a dependency to a service in icinga2

We are using icinga2 for monitoring. We have a lot service checks which are applied dynamically through apply rules. Additionally, these are services applied to a hashmap of database instances which are on various hosts. The long and the short of it is that our service names are determined dynamically so one might be, for example HOST!DBNAME-svcvheck .

So the scenario is that most of these services depend on a database is up, eg, `HOST!DBNAME-tnsping". Unfortunately, the documentation examples are fairly simple and don't include dynamically creating a parent service reference. What I think I want to do is something like this:

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
}

The host doesn't really matter in my case because the dependencies are only the services but the child_host_name is a required field.

No matter what I do I can't seem to get it to recognize the parent service. For example:

Error: Dependency 'scan-szepdb041x.myhost.org!UAT2-beqfilelast!db-connectivity' references a parent host/service which doesn't exist.

The rules for referencing other object variables while applying a Dependency seem a bit different from applying a Service.

Does anyone have any ideas or examples of dynamically apply service dependencies to services which were generated dynamically?

you probably have to loop over existing hosts and see if they match. Then you define dependency inside of a loop.

I had a similar example for dynamically generating disk checks. If i find it, i'll post it here in a few days.

Not sure if that is possible with dependencies, but I'll see.

edit: see if somethig like that will be enough to get you started:

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

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM