Я испытываю затруднения при нахождении хорошей документации для подстановочных знаков и регулярных выражений (особенно, поскольку они работают с исключениями) в 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): После тестирования ответа Keith работает эта конфигурация:
В services.cfg
:
define service {
use generic-service
service_description Puppet check
hostgroup_name prod, staging, !lbs
check_command check_puppet_alive_nrpe
}
И в hostgroups.cfg
, Я определил новую группу узлов с помощью регулярного выражения в 'членской' директиве:
define hostgroup {
hostgroup_name lbs
alias Load Balancers
members ^lb.*
}
Я считаю, что единственный способ добиться этого - создать новую группу хостов, состоящую из рассматриваемых хостов (с использованием подстановочного знака), а затем исключить эту новую группу хостов.