Назад | Перейти на главную страницу

NRPE и переменная $ USER1 $

У меня есть демоны 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"),
}