/puppet-monit

A general-purpose monit module for Puppet

Primary LanguagePuppetBSD 2-Clause "Simplified" LicenseBSD-2-Clause

Build Status

monit

A general-purpose monit module for Puppet. Support for M/Monit is available but not tested on recent platforms.

Module usage

The simplest way to use this module:

class { '::monit':
  email => 'monitoring@example.org',
}

The email parameter can be omitted if global variable $::servermonitor is defined.

On Debian 10 this module includes the ::apt::backports class from puppetlabs-apt automatically to allow installing monit. You can override this behavior by setting manage_backports => false. In that case you need to ensure that you include a ::apt::backports class (not necessarily the Puppetlabs version) somewhere else or monit installation will fail.

By default monit monitors CPU usage, load averages and memory, plus disk space and inode consumption on the root filesystem. The pre-configured thresholds can be customized as needed.

This module also includes additional defines:

Both ::monit::filesystem and ::monit::directory support parameter called $exec_cmd, which can be used to run a command if the check fails. A fairly typical use-case is cleaning up unused kernels in Ubuntu:

::monit::filesystem { 'boot-filesystem':
  path     => '/boot',
  exec_cmd => 'apt-get -y autoremove',
}

For this particular use-case, though, there's a sepate convenience class:

include ::monit::boot

The class runs a platform-specific autoremove task.

This module also supports creating monit fragments from other Puppet modules:

Any virtual ::monit::fragment resource tagged with 'default' is realized in the main ::monit class. The postfix module uses this feature:

Also, if a File resource is tagged with 'monit' it will be realized as well; the use-case for this is adding test scripts for monit from other modules.

It is also possible to reuse a single template from several places, passing variables to it as a hash. For example:

class myclass::daemon1 {

  $vars = { 'service_name'  => $::myclass::params::daemon1_service_name,
            'pidfile'       => $::myclass::params::daemon1_pidfile,
            'service_start' => $::myclass::params::daemon1_service_start,
            'service_stop'  => $::myclass::params::daemon1_service_stop, }

  ::monit::fragment { 'daemon1.monit':
    ensure     => 'present',
    basename   => 'myservice',
    modulename => 'myclass',
    identifier => 'daemon1',
    vars       => $vars,
    epp        => true,
  }

In this case you'd have an EPP template in myclass/templates/myservice.monit.epp that uses the parameters along these lines:

### THIS FILE IS MANAGED BY PUPPET. ANY MANUAL CHANGES WILL GET OVERWRITTEN.

check process <%= $service_name %> with pidfile <%= $pidfile %>
    start program = "<%= $service_start %>"
    stop  program = "<%= $service_stop %>"
    alert <%= $::monit::email %> with reminder on 480 cycles

You could then pass the ::monit::fragment a different set of variables to make it configure some other service.