すべてのリモートLinuxボックスでNRPEデーモンを実行しています。いくつかの構成があり、nrpe.cfgのパスを標準化しようとしています。変更はPuppetを介してデプロイされます。
次の構文を使用したいと思います。
command[mycommand]=$USER1$/check_tcp .. etc.
$ USER1 $変数は、NRPEセットアップでは使用できません。すべてのバリアントのPuppetテンプレートを作成できましたが、これをネイティブメソッドで管理することを望みます。何かできることはありますか?そうでない場合、これを解決するサンプルのPuppet構成はありませんか?
私は自分のニーズに対応するカスタムファクトをまとめました。 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
すべてのバリアントの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では、リモートホストでは使用できません。
カスタムファクトの一部と、nrpeの処理に使用するマニフェストコードを次に示します。 Puppetがサービスが起動時に開始するように設定され、実行されていることを確認してください。古いバージョンのパペットでFedora 15を実行しているため、一部のバージョンのパペットはFedora 15のsystemdを処理できないことに注意してください。
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",
}
# ..............
}
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"),
}