Назад | Перейти на главную страницу

Подстановочные знаки в исключениях Nagios hostgroup_name

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

В nagios.cfg, устанавливаются следующие, предположительно позволяющие * и ? как подстановочные знаки:

use_regexp_matching=1
use_true_regexp_matching=0

В services.cfg, у нас есть служба, которую мы хотели бы применить ко всем объектам, кроме нескольких; это все хосты Linux, но не балансировщики нагрузки. Явное исключение работает:

define service {
     use                  generic-service
     service_description  Puppet check
     hostgroup_name       prod, staging, !prod-site_a-lbs
     check_command        check_puppet_alive_nrpe
}

Но у нас много сайтов, каждый с балансировщиками нагрузки в своих группах хостов (так что уведомлениями можно легко управлять по сайту). Вместо того, чтобы иметь длинный список !prod-site_a-lbs, !staging-site_a-lbs, !prod-site_b-lbs. Я надеялся, что смогу изменить hostgroup_name строка к:

     hostgroup_name       prod, staging, !*-lbs

Я пробовал это, и, хотя мы не получаем ошибки, эта проверка службы все еще применяется к нашим балансировщикам нагрузки. Чтобы дважды проверить, я также пробовал:

     hostgroup_name        prod, staging, !.*-lbs

Но это не удается, как и ожидалось (поскольку use_true_regexp_matching не установлен), при запуске checkconfig-noprecache:

 Error: Could not find any hostgroup matching '!.*lbs' ...

При тестировании .* принимается checkconfig-noprecache если ! устранен.

Возможно ли то, что мы пытаемся сделать? Можно ли использовать подстановочные знаки для исключения совпадающих групп хостов? Или есть альтернатива, которая была бы такой же чистой?


Обновить (2015-09-21): После тестирования ответа Кита эта конфигурация работает:

В services.cfg:

define service {
    use                  generic-service
    service_description  Puppet check
    hostgroup_name       prod, staging, !lbs
    check_command        check_puppet_alive_nrpe
}

И в hostgroups.cfg, Я определил новую группу хостов, используя регулярное выражение в директиве members:

define hostgroup {
    hostgroup_name  lbs
    alias           Load Balancers
    members         ^lb.*
}

Я считаю, что единственный способ добиться этого - создать новую группу хостов, состоящую из рассматриваемых хостов (с использованием подстановочного знака), а затем исключить эту новую группу хостов.