Module nagios
In: /home/david/repos/complete/modules/nagios/manifests/init.pp

Overview

==

To use the nagios resources, activate storeconfigs on the puppetmaster.

Monitor


On one node the "nagios" class has to be included. This installs nagios and apache and configures the cgi on node/nagios/

Hosts


On a node which shall be monitored with nagios, include the "nagios::target". This just creates a host declaration for this hosts "$fqdn". Set the $nagios_parent variable in the node scope for enabling the reachability features of nagios. If a node needs more customisation, use the "nagios::host" component directly.

To monitor hosts not managed by puppet, add "nagios::extra_host"s to the monitoring node. These can be used as intermediate $nagios_parent‘s

Services


Services can be monitored by using the "nagios::service" component.

The simplest form is::

        nagios::service { check_dns: }

The intention being obviously to put such declarations into a component defining a service, thereby being automatically applied together with all instances of the service.

Caveats

=

Performance


A major drawback is that currently the needed storeconfig setting and subsequent filling of the database is really a drag on performance. 0.22.1 for example breaks at approximatly 120 monitored services (depends on H/W of course). 0.22.3 has improved that my a factor of 3-4.

Consistency/Validation/Verification


After convergance of the configuration, the system is obviously consistent. That is, all defined services are monitored. The problem is though, that it is neither automatically valid - it is not guaranteed that all components declare a nagios::service - and even if the configuration is valid it definitly is unverified, since that is always a judgment call for an external observer.

Examples

==

Usage example::

node nagios {

        include nagios

        # Declare another nagios command
        nagios::command { http_port: command_line

> ’/usr/lib/nagios/plugins/check_http -p $ARG1$ -H $HOSTADDRESS$ -I

$HOSTADDRESS$’

        # Declare unmanaged hosts
        nagios_extra_host {
                "router01":
                        parent => "gateway",
                        ip => "10.0.0.1";
                "router02":
                        parent => "router01",
                        ip => "192.168.0.1";
        }

}

node target {

        # Monitor this host
        $nagios_parent = "router01"
        include nagios_target

        # monitor a service
        $apache2_port = 8080
        include apache

        # The apache class actually does this somewhere:
        #nagios::service { "http_${apache2_port}":
        #       check_command => "http_port!${apache2_port}"
        #}
        # which goes via export/collect to the nagios node.

}

License

=

Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at> See the file LICENSE in the top directory for the full license.

Defines

command   extra_host   host   service  

Classes and Modules

Class nagios::nagios
Class nagios::nagios2
Class nagios::target

Global Variables

nagios_cfgdir = ${module_dir_path}/nagios   the directory containing all nagios configs:

Defines

command( $command_line )
extra_host( $parent => 'none', $short_alias => 'fqdn', $ip => 'fqdn' )
host( $short_alias => 'fqdn', $ip => 'fqdn' )
service( $check_command => '', $nagios_description => '', $nagios_host_name => 'fqdn' )

[Validate]