Puppet: System Administration Automated

Support

Nagios and NRPE

This module contains two classes, one for an NRPE client (set up for Debian and FreeBSD), and one for the Nagios server (Debian):

modules/nagios/manifest/init.pp:

class nagios-nrpe {

  case $operatingsystem {
    "freebsd": {
      $nrpeservice = "nrpe2"
      $nrpepattern = "nrpe2"
      $nrpepackage = "nrpe2"
      $nrpedir     = "/usr/local/etc"
      $nagiosuser  = "root"
      $nagiosgroup = "wheel"
      $pluginsdir  = "/usr/local/libexec/nagios"
      $sudopath    = "/usr/local/bin"
    }
    default: {
      $nrpeservice = "nagios-nrpe-server"
      $nrpepattern = "nrpe"
      $nrpepackage = "nagios-nrpe-server"
      $nrpedir     = "/etc/nagios"
      $nagiosuser  = "nagios"
      $nagiosgroup = "nagios"
      $pluginsdir  = "/usr/lib/nagios/plugins"
      $sudopath    = "/usr/bin"
    }
  }

  file { $pluginsdir:
    mode    => "755",
    require => Package["nagios-plugins"],
    source  => "puppet:///nagios/client-plugins/",
    purge   => false,
    recurse => true,
  }

  file { "$nrpedir/nrpe.cfg":
    mode    => "644",
    owner   => $nagiosuser,
    group   => $nagiosgroup,
    content => template("nagios/nrpe.cfg"),
    require => Package[$nrpepackage],
  }

  package {
    $nrpepackage: ensure => present;
    "nagios-plugins": ensure => present;
  }

  service { "$nrpeservice":
    ensure    => running,
    enable    => true,
    pattern   => "$nrpepattern",
    subscribe => File["$nrpedir/nrpe.cfg"];
  }
}

class nagios-server {

  file { "/var/log/nagios2/rw":
    ensure  => directory,
    owner   => "nagios",
    group   => "www-data",
    require => [ Package["nagios2"], Package["apache2"] ],
    mode    => "2770",
  }

  file { "/usr/lib/nagios/plugins/check_dhcp":
    mode => "4755",
  }

  file { "/etc/nagios2":
    mode    => "644",
    source  => "puppet:///nagios/nagios",
    recurse => true,
    purge   => true,
    force   => true,
    ignore  => [ ".svn", "nrpe.cfg" ],
    require => Package["nagios2"],
  }

  file { "/usr/share/nagios2/htdocs/images/logos":
    mode    => "644",
    source  => "puppet:///nagios/logos",
    recurse => true,
    purge   => false,
    require => Package["nagios2"],
  }

  file { "/etc/default/nagios2":
    mode    => "644",
    source  => "puppet:///nagios/default.$hostname",
    require => Package["nagios2"],
  }

  user { "www-data":
    ensure     => present,
    groups     => "nagios",
    membership => minimum,
    require    => [ Package["nagios2"], Package["apache2"] ],
  }

  package {
    "nagios-nrpe-plugin":              ensure => present;
    "nagios2":                         ensure => present;
    "nagios2-common":                  ensure => present;
    "nagios2-doc":                     ensure => present;
  }

  service { "nagios2":
    ensure     => running,
    enable     => true,
    hasrestart => true,
    subscribe  => [ File["/etc/nagios2"], File["/etc/default/nagios2"] ],
  }

}

Our nrpe.cfg template looks like this:

modules/nagios/templates/nrpe.cfg:

##############################################################################
# This file is mananged by puppet.  Do NOT edit on the server, your changes  #
# will be blown away on the next puppet run.                                 #
##############################################################################

server_port=5666
allowed_hosts=10.10.10.10
nrpe_user=<%= nagiosuser %>
nrpe_group=<%= nagiosgroup %>
dont_blame_nrpe=0
debug=0
command_timeout=600

command[check_dummy]=<%= pluginsdir %>/check_dummy 0
command[check_load]=<%= pluginsdir %>/check_load -w 15,20,25 -c 30,35,40
command[check_zombie_procs]=<%= sudopath %>/sudo <%= pluginsdir %>/check_procs -w 100 -c 150 -s Z -t 60
command[check_total_procs]=<%= sudopath %>/sudo <%= pluginsdir %>/check_procs -N cronolog -w 1500 -c 2000 -t 60
command[check_postfix]=<%= pluginsdir %>/check_mailq -w 200 -c 300 -M postfix

Please send comments and bug reports for this recipe to Martha Greenberg