Puppet: System Administration Automated

Puppet Training Schedule
Next Class July 27-29
New York, New York
Discount before July 1st

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