У меня есть демоны NRPE, работающие на всех моих удаленных компьютерах с Linux. У меня есть пара конфигураций, и я пытаюсь стандартизировать пути в моем nrpe.cfg. Изменения развертываются через Puppet.
Я хотел бы использовать следующий синтаксис:
command[mycommand]=$USER1$/check_tcp .. etc.
Переменная $ USER1 $ недоступна в моей настройке NRPE. Я мог бы написать шаблоны Puppet для всех вариантов, но я бы предпочел управлять этим с помощью собственного метода. Есть ли что-нибудь для этого? Если нет, есть ли у кого-нибудь образец конфигурации Puppet, который поможет решить эту проблему?
Я мог бы написать шаблоны Puppet для всех вариантов, но я бы предпочел управлять этим с помощью собственного метода.
$USERn$
это стандартный макрос для Nagios. Они определены в resource.cfg
файл:
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec
# Sets $USER2$ to be the path to event handlers
#$USER2$=/usr/local/nagios/libexec/eventhandlers
и этот файл включен в основную конфигурацию:
# This is an optional resource file that contains $USERx$ macro
# definitions. Multiple resource files can be specified by using
# multiple resource_file definitions. The CGIs will not attempt to
# read the contents of resource files, so information that is
resource_file=/usr/local/nagios/etc/resource.cfg
НАСКОЛЬКО МНЕ ИЗВЕСТНО, вы не можете использовать его на удаленном хосте с NRPE.
Вот некоторые настраиваемые факты и код манифеста, который мы используем для обработки nrpe. Убедитесь, что марионетка гарантирует, что служба настроена для запуска при загрузке и работает. Поскольку мы запускаем Fedora 15 со старой версией puppet, имейте в виду, что некоторые версии puppet не могут обрабатывать systemd в Fedora 15.
nrpe_plugin_directory.rb
Facter.add("nrpe_plugin_directory") do
setcode do
%x{dirs="/usr/lib/nagios/plugins /usr/lib64/nagios/plugins /usr/local/nagios/libexec"; for dir in $dirs; do [[ -e $dir ]] && [[ ! -L $dir ]] && { echo $dir; exit; }; done}.chomp
end
end
nrpe_cfg_file.rb
Facter.add("nrpe_cfg_file") do
setcode do
%x{files="/etc/nagios/nrpe.cfg /usr/local/nagios/etc/nrpe.cfg /usr/local/nagios/nrpe.cfg"; for file in $files; do [[ -f $file ]] && { echo $file; exit; }; done}.chomp
end
end
Код манифеста:
file{"/nagios/plugins":
ensure => "symlink",
target => "${nrpe_plugin_directory}",
force => 'true',
}
file{"$nrpe_plugin_directory":
source => "/..../plugins",
ensure => "directory",
recurse => "true",
ignore => ".svn",
}
case $nrpe_cfg_file {
undef: { }
default:{
file{"/nagios/nrpe.cfg":
ensure => "symlink",
target => "${nrpe_cfg_file}",
require => File["/nagios"],
}
file{"$nrpe_cfg_file":
source => "/..../nrpe.cfg",
}
# ..............
}
Я составил индивидуальный факт, соответствующий моим потребностям. Я также попробовал небольшой переключатель, который применял бы арку, но это не было кросс-платформенным.
библиотека / facter / nrpe.rb
file = File.open("/etc/nagios/resource.cfg" , "r" )
while ( line = file.gets )
if /^\$USER1\$=(.*)/ =~ line
matched="#{$1}"
end
end
file.close
Facter.add("nrpe") do
setcode do
matched
end
end
В модулях / nagios / target / params.pp:
class nagios::target::params {
case $operatingsystem {
redhat,centos: {
$nagios_plugin_dir = $architecture ? {
x86_64 => "/usr/lib64/nagios/plugins/",
i386 => "/usr/lib/nagios/plugins/",
}
}
solaris: {
$nagios_plugin_dir = '/opt/csw/libexec/nagios-plugins/'
}
}
}
В modules / nagios / templates / custom-check.cfg
...
command[check_ram]=<%= scope.lookupvar('nagios::target::params::nagios_plugin_dir') %>check_mem.pl -C -w<%= ramwarn %> -c<%= ramcrit %> -f
command[check_puppet]=<%= scope.lookupvar('nagios::target::params::nagios_plugin_dir') %>check_puppet.rb -w 1800 -c 3600
...
В модулях / nagios / target.pp:
include nagios::target::params
file { "/etc/nrpe.d/50-custom-checks.cfg":
ensure => present,
notify => Service["nrpe"],
require => Package['nrpe'],
content => template("${module_name}/custom-checks.cfg.erb"),
}