web-dev-qa-db-ja.com

NRPEと$ USER1 $変数

すべてのリモートLinuxボックスでNRPEデーモンを実行しています。いくつかの構成があり、nrpe.cfgのパスを標準化しようとしています。変更はPuppetを介してデプロイされます。

次の構文を使用したいと思います。

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

$ USER1 $変数は、NRPEセットアップでは使用できません。すべてのバリアントのPuppetテンプレートを作成できましたが、これをネイティブメソッドで管理することを望みます。何かできることはありますか?そうでない場合、これを解決するサンプルのPuppet構成はありませんか?

5
Tim Brigham

私は自分のニーズに対応するカスタムファクトをまとめました。 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
1
Tim Brigham

すべてのバリアントの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では、リモートホストでは使用できません。

9
quanta

カスタムファクトの一部と、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",
                                            }
            # ..............
                            }
1
becomingwisest

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"),
}
0
Justin Ellison