Мне трудно найти хорошую документацию для подстановочных знаков и регулярных выражений (особенно когда они работают с исключениями) в 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.*
}
Я считаю, что единственный способ добиться этого - создать новую группу хостов, состоящую из рассматриваемых хостов (с использованием подстановочного знака), а затем исключить эту новую группу хостов.