Распределенный мониторинг Icinga2 — конечная точка, на которой запущены все службы в ее зоне

Я пытаюсь настроить распределенный мониторинг icinga для нескольких клиентов.

Я настроил зоны по мере необходимости, т.е.:

1) На мастер-узле это выглядит так

object Zone "edge-dev" { 
  parent="master"
  endpoints=[ 
    "edge-dev-docker",
    "edge-dev-aws"
  ]
}

object Endpoint "edge-dev-docker" {}
object Endpoint "edge-dev-aws" {}
object Endpoint "icinga.master" {}

object Zone "master" {
  endpoints = [ "icinga.master" ]
}

константы.conf:

...
const NodeName = "icinga.master"

const ZoneName = "icinga.master"
...

2) На каждом клиентском узле:

object Endpoint "icinga.master" {
    host = "icinga.master"
    port = "5665"
}

object Zone "master" {
    endpoints = [ "icinga.master" ]
}

object Zone "global-templates" {
    global = true
}

object Zone "director-global" {
    global = true
}

object Endpoint NodeName {}

object Zone ZoneName {
    endpoints = [ NodeName ]
    parent = "master"
}

и константы.conf:

const NodeName = "edge-dev-docker"

const ZoneName = "edge-dev"

а также

const NodeName = "edge-dev-aws"

const ZoneName = "edge-dev"

для каждого узла

Теперь я пытаюсь настроить мониторинг процесса squid на каждом клиентском узле:

curl -k -s -u user:pass -H 'Accept: application/json' -X PUT 'https://$ICINGA_HOST:$ICINGA_PORT/v1/objects/checkcommands/check_process' -d '{ "templates": [ "plugin-check-command" ], "attrs": { "command": [ "/usr/lib/nagios/plugins/check_procs" ], "arguments": { "--ereg-argument-array": "$process_regex$", "-c": "$range$" }, "vars.process_regex": "", "vars.range": "1:1", "zone": "edge-dev" } }'  | python -m json.tool

curl -k -s -u user:pass -H 'Accept: application/json' -X PUT 'https://$ICINGA_HOST:$ICINGA_PORT/v1/objects/hosts/edge-dev-ip-docker' -d '{ "templates": [ "generic-host" ], "attrs": { "address": "ip-docker", "check_command": "ssh", "vars.os" : "Linux", "zone": "edge-dev" } }' | python -m json.tool

curl -k -s -u user:pass -H 'Accept: application/json' -X PUT 'https://$ICINGA_HOST:$ICINGA_PORT/v1/objects/hosts/edge-dev-ip-aws' -d '{ "templates": [ "generic-host" ], "attrs": { "address": "ip-aws", "check_command": "ssh", "vars.os" : "Linux", "zone": "edge-dev" } }' | python -m json.tool

curl -k -s -u user:pass -H 'Accept: application/json' -X PUT 'https://$ICINGA_HOST:$ICINGA_PORT/v1/objects/services/edge-dev-ip-aws!edge-dev-ip-aws-squid' -d '{ "templates": [ "generic-service" ], "attrs": { "check_command": "check_process", "vars.process_regex": "'/usr/sbin/squid'", "vars.range": "1:2", "check_interval": 30,"retry_interval": 30, "max_check_attempts": 3, "zone": "edge-dev" } }'  | python -m json.tool

curl -k -s -u user:pass -H 'Accept: application/json' -X PUT 'https://$ICINGA_HOST:$ICINGA_PORT/v1/objects/services/edge-dev-ip-docker!edge-dev-ip-docker-squid' -d '{ "templates": [ "generic-service" ], "attrs": { "check_command": "check_process", "vars.process_regex": "'/usr/sbin/squid'", "vars.range": "1:2", "check_interval": 30,"retry_interval": 30, "max_check_attempts": 3, "zone": "edge-dev" } }'  | python -m json.tool

Все объекты хорошо распространяются на клиентские узлы. Проблема в том, что теперь каждый клиент выполняет обе службы (даже те, которые не являются «его», т.е. хост, который «владеет» службой, не единственный, кто ее запускает).

Чтобы прояснить проблему, теперь и edge-dev-ip-aws хост, и edge-dev-ip-docker хост запускают обе службы edge-dev-ip-docker!edge-dev-ip-docker-squid и edge-dev-ip-aws!edge-dev-ip-docker-aws.

Как я могу заставить каждый запускать только свои собственные службы?

Любая помощь или подсказка будут оценены :)


person Max Vlaschuk-Gorelik    schedule 14.02.2018    source источник
comment
@dnsmichi Видел несколько ваших постов об Айсинге. Надеялся, что вы протянете руку помощи :)   -  person Max Vlaschuk-Gorelik    schedule 14.02.2018


Ответы (1)


Ваш zone.conf должен быть одинаковым на всех серверах. Что-то типа

object Endpoint "icinga.master" {
        host = "<IP>"
}
object Endpoint "edge-dev-docker" {
        host = "<IP>"
}
object Endpoint "edge-dev-aws" {
        host = "<IP>"
}
object Zone "icinga.master" {
        endpoints = [ "icinga.master" ]
}
object Zone "edge-dev" {
        endpoints = [ "edge-dev-docker", "edge-dev-aws" ]
        parent = "icinga.master"
}
/*
 * Global zone for templates
 */
object Zone "global-templates" {
        global = true
}
object Zone "director-global" {
        global = true
}

Поскольку оба edge-dev-docker, edge-dev-aws находятся в одних и тех же кластер они оба смогут выполнять проверки. Так что, если edge-dev-aws не работает, edge-dev-docker сделает это. Если вы хотите, чтобы они были отдельными, им понадобятся свои собственные зоны, например:

object Endpoint "icinga.master" {
        host = "<IP>"
}
object Endpoint "edge-dev-docker" {
        host = "<IP>"
}
object Endpoint "edge-dev-aws" {
        host = "<IP>"
}
object Zone "icinga.master" {
        endpoints = [ "icinga.master" ]
}
object Zone "edge-dev-docker" {
        endpoints = [ "edge-dev-docker" ]
        parent = "icinga.master"
}
object Zone "edge-dev-aws" {
        endpoints = [ "edge-dev-aws" ]
        parent = "icinga.master"
}
/*
 * Global zone for templates
 */
object Zone "global-templates" {
        global = true
}
object Zone "director-global" {
        global = true
}
person cflinspach    schedule 14.02.2018
comment
Хммм. Я думаю, что понял. Возможно, причиной путаницы было то, что я перепутал хосты с конечными точками. Я хотел иметь хосты в зонах, которые выполняли бы одинаковые проверки для каждого хоста в зоне. Кажется, что это невозможно с этой раскладкой. - person Max Vlaschuk-Gorelik; 18.02.2018
comment
Благодарю за разъяснение :) - person Max Vlaschuk-Gorelik; 18.02.2018