我的所有远程 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"),
}