phpservermon/puphpet/puppet/modules/monitor/manifests/plugin.pp

121 lines
3.4 KiB
Puppet

# define monitor::plugin
#
# A monitor define to manage NAGIOS plugins
# It can be used to define monitoring via whatever Nagios plugin
# This define requires Example42 nrpe module
#
# == Parameters
#
# [*plugin*]
# Name of the Nagios plugin. As it appears in the Nagios plugins path
# (do not specify the full path, it's autocalculated for your OS)
# Required argument
#
# [*tool*]
# The monitoring tool to use. Currently supported: nagios, puppi
# To add a monitoring tool (that supports the usage of Nagios plugins)
# just add the relevant resources (local or exported) in the code
#
# [*arguments*]
# The arguments to pass to the plugin.
#
# [*checksource*]
# From where the check is executed:
# local = Check is executed via Nrpe
# remote = Check is executed from the Nagios server
#
# [*template*]
# Template to use to manage configuration. Path is as used in
# content => template ( $template )
# Content actually depends on the monitoring tool used
#
# [*enable*]
# Use this to enable or disable the check. Default: true
#
# == Example
#
# monitor::plugin { "Fsi_Import_Errors":
# plugin => 'check_log' ,
# arguments => '-F /var/log/app.log -O /var/tmp/app.log -q error',
# tool => [ 'puppi' , 'nagios' ],
# }
#
define monitor::plugin (
$plugin,
$tool,
$arguments = '',
$checksource = 'local', # Note: Remote checksource might not work properly
$template = '',
$enable = true
) {
$bool_enable = any2bool($enable)
$safe_name = regsubst($name, '(/| )', '_', 'G')
$ensure = $bool_enable ? {
false => 'absent',
true => 'present',
}
# Manage template
$real_template = $template ? {
'' => undef,
default => $template,
}
$check_command = $checksource ? {
local => "check_nrpe!${safe_name}!blank",
remote => "${plugin}!${arguments}",
}
if ($tool =~ /nagios/) {
nagios::service { $safe_name:
ensure => $ensure,
template => $real_template,
check_command => $check_command,
}
# If plugin check is via nrpe, we create a local configuration entry
if $checksource == local {
file { "nrpe-check_${safe_name}":
ensure => $ensure,
path => "${nrpe::config_dir}/check_${safe_name}.cfg",
require => Package['nrpe'],
notify => $nrpe::manage_service_autorestart,
replace => $nrpe::manage_file_replace,
audit => $nrpe::manage_audit,
content => "command[${safe_name}]=${nrpe::pluginsdir}/${plugin} ${arguments}\n",
}
}
}
if ($tool =~ /icinga/) {
icinga::service { $safe_name:
ensure => $ensure,
template => $real_template,
check_command => $check_command,
}
# If plugin check is via nrpe, we create a local configuration entry
if $checksource == local {
file { "nrpe-check_${safe_name}":
ensure => $ensure,
path => "${nrpe::config_dir}/check_${safe_name}.cfg",
require => Package['nrpe'],
notify => $nrpe::manage_service_autorestart,
replace => $nrpe::manage_file_replace,
audit => $nrpe::manage_audit,
content => "command[${safe_name}]=${nrpe::pluginsdir}/${plugin} ${arguments}\n",
}
}
}
if ($tool =~ /puppi/) {
puppi::check { $safe_name:
enable => $bool_enable,
hostwide => 'yes',
command => "${plugin} ${arguments}",
}
}
}