Wildcards in Nagios hostgroup_name exclusions

monitoringnagios

I'm having difficulty finding good documentation for wildcards and regular expressions (particularly as they work with exclusions) in Nagios. Here is an example of what I'm trying to do:

In nagios.cfg, the following are set, supposedly enabling * and ? as wildcards:

use_regexp_matching=1
use_true_regexp_matching=0

In services.cfg, we have a service that we would like to apply to all but a few objects; that is all Linux hosts, but not load balancers. Explicit exclusion works:

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

But, we have many sites, each with load balancers in their own hostgroups (so notifications can be easily managed by site). Rather than having a long list of !prod-site_a-lbs, !staging-site_a-lbs, !prod-site_b-lbs. I'd hoped to be able to modify the hostgroup_name line to:

     hostgroup_name       prod, staging, !*-lbs

I have tried this, and while we don't get an error, this service check is still being applied to our load balancers. To double check, I have also tried:

     hostgroup_name        prod, staging, !.*-lbs

But, this fails, as expected (since use_true_regexp_matching is not set), when running checkconfig-noprecache:

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

In testing, .* is accepted by checkconfig-noprecache if ! is removed.

Is what we're trying possible? Can we use wildcards to exclude matching hostgroups? Or, is there an alternative that would be just as clean?


Update (2015-09-21): After testing Keith's answer, this configuration is working:

In services.cfg:

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

And in hostgroups.cfg, I have defined a new hostgroup using a regular expression in the 'members' directive:

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

Best Answer

The only way I believe you can achieve this is by making a new hostgroup comprised of the hosts in question (using a wildcard), and then excluding this new hostgroup.

Related Topic