NRPE 和 $USER1$ 变量

NRPE 和 $USER1$ 变量

我的所有远程 Linux 机器上都运行有 NRPE 守护进程。我有一些配置,并且正在尝试标准化 nrpe.cfg 中的路径。更改通过 Puppet 进行部署。

我想使用以下语法:

command[mycommand]=$USER1$/check_tcp .. etc.

我的 NRPE 设置中没有 $USER1$ 变量。我可以为所有变体编写 Puppet 模板,但我更愿意通过本机方法管理它。有什么可以这样做的吗?如果没有,有没有人有可以解决这个问题的示例 Puppet 配置?

答案1

我可以为所有变体编写 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

AFAIK,你不能在远程主机上使用 NRPE

答案2

我整理了一个满足我需求的自定义 Fact。我还尝试了一个可以应用 arch 的小开关,但它不是跨平台的。

lib/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

答案3

以下是我们用于处理 nrpe 的一些自定义事实和清单代码。请确保 puppet 确保服务设置为在启动时启动并正在运行。由于我们运行的是 Fedora 15,使用的是旧版本的 puppet,因此请注意,某些版本的 puppet 无法处理 Fedora 15 的 systemd。

nrpe_plugin_目录.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_文件.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",
                                            }
            # ..............
                            }

答案4

在 modules/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-checks.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
...

在 modules/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"),
}

相关内容