Применение зависимости к сервису в icinga2

Мы используем 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.

Правила обращения к другим объектным переменным при применении Dependency кажутся немного отличными от применения службы.

Есть ли у кого-нибудь идеи или примеры динамического применения зависимостей служб к службам, которые были сгенерированы динамически?


person AndyJ    schedule 24.05.2019    source источник


Ответы (1)


вам, вероятно, придется перебрать существующие хосты и посмотреть, совпадают ли они. Затем вы определяете зависимость внутри цикла.

У меня был аналогичный пример для динамической генерации проверок диска. Если найду, на днях выложу здесь.

Не уверен, что это возможно с зависимостями, но я посмотрю.

edit: посмотрите, будет ли что-то подобное, чтобы вы начали:

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

}
person kovalsky    schedule 22.07.2019