LoginSignup
5
5

More than 5 years have passed since last update.

knife-solo(chef)でnrpe(nagios)のセットアップをしてみる

Last updated at Posted at 2014-06-09

Vagrantのセットアップが完了したので今度はchefを使って、nagiosでの監視でクライアント側にインストールするnrpeのセットアップをやってみる。

事前準備

knife-soloのインストール

RubyGemsとして公開されているのでgemでインストールする。
knife-soloをインストールすることで、knifeコマンドのサブコマンドとしてknife soloコマンドが利用可能になる。

$ gem install knife-solo

knife soloコマンドは

キッチン(Chefリポジトリ)の作成

VagrantfilがあるディレクトリにChefリポジトリを作成する。
※一応、キッチンと呼ぶらしい。

$ knife solo init .

作成すると、次のようなディレクトリ構成になるはず。

├── Vagrantfile
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks

クックブックの作成

nrpeというクックブックを作成する。
自作のクックブックは site-cookbooks に置くのが慣習らしい。

$ knife cookbook create nrpe -o site-cookbooks

レシピを編集する

ユーザ作成

nagiosユーザを作る為に次のようにレシピsite-cookbooks/nrpe/recipes/default.rbに記述する。

site-cookbooks/nrpe/recipes/default.rb
group 'nagios' do
    group_name  'nagios'
    gid         9999
    action      :create
end
user 'nagios' do
    comment     'nrpe'
    uid         9999
    group       'nagios'
    home        '/usr/local/nagios'
    shell       '/bin/false'
    password    nil
    supports    :manage_home =>true
    action      [:create, :manage]
end

この状態でknife-soloを実行するとnagiosグループとユーザが出来る。
※centos-6.5は仮想マシンの名前

$ knife solo cook centos-6.5

パッケージのインストール

パッケージのインストールの前に、epelリポジトリを登録しておく。

site-cookbooks/nrpe/recipes/default.rb
yum_repository 'epel' do
    description 'Extra Packages for Enterprise Linux'
    mirrorlist  'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch'
    gpgkey      'http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6'
    enabled     false
    action      :create
end

必要なパッケージをインストールしていく。

site-cookbooks/nrpe/recipes/default.rb
package "xinetd" do
    action :install
end

複数のパッケージをまとめてインストールする際は次のように記述する。

site-cookbooks/nrpe/recipes/default.rb
%w{nrpe nagios-plugins nagios-plugins-all}.each do |pkg|
    package pkg do
        options '--enablerepo=epel'
        action :install
    end
end

サービスの起動

インストールしたパッケージの開始と自動起動の設定は下記の通り。

site-cookbooks/nrpe/recipes/default.rb
service "xinetd" do
    action [ :enable, :start ]
end

ファイルの転送

よく監視で使うスクリプトを転送しておく。
check_log3.pl というログ監視に用いるスクリプトをsite-cookbooks/nrpe/files/defaultに配置する。

site-cookbooks
    └── nrpe
        ├── files
        │   └── default
        │       └── check_log3.pl
        └── recipes
            └── default.rb

これを転送するようなコードをレシピに記述する。

site-cookbooks/nrpe/recipes/default.rb
cookbook_file "check_log3.pl" do
    source  "check_log3.pl"
    path    "/usr/lib64/nagios/plugins/check_log3.pl"
    owner   "root"
    group   "root"
    mode    0755
    action  :create
end

source とか path は明示しなくても大丈夫らしいが一応書いておいた。

テンプレートから設定ファイルを生成

xinetdの設定ファイルのテンプレートをsite-cookbooks/nrpe/templates/defaultに配置する。

site-cookbooks
    └── nrpe
        ├── files
        │   └── default
        │       └── check_log3.pl
        ├── recipes
        │   └── default.rb
        └── templates
            └── default
                └── xinetd_nrpe.erb

監視を行うNgiosサーバは環境によって異なるので、許可するホストのIPは<%= @nagios_server %>と書いておく。

site-cookbooks/nrpe/templates/default/xinetd_nrpe.erb
# default: on
# description: NRPE (Nagios Remote Plugin Executor)
service nrpe
{
        flags           = REUSE
        socket_type     = stream
        port            = 5666
        wait            = no
        user            = nagios
        group           = nagios
        server          = /usr/sbin/nrpe
        server_args     = -c /etc/nagios/nrpe.cfg --inetd
        log_on_failure  += USERID
        disable         = no
        only_from       = <%= @nagios_server %>
}

レシピには次のように記述する。

site-cookbooks/nrpe/recipes/default.rb
template "xinetd_nrpe.erb" do
    source  "xinetd_nrpe.erb"
    path    "/etc/xinetd.d/nrpe"
    owner   "root"
    group   "root"
    mode    0644
    action  :create
    variables(
        :nagios_server => node["nrpe"]["nagios_server"]         #Attribute設定
    )
    notifies :reload, 'service[xinetd]'                         #xinetdのリロード
end

このままではnagios_serverに入る値がないので、attributeの設定をsite-cookbooks/nrpe/attribute/default.rbに記述する。

site-cookbooks
    └── nrpe
        ├── attributes
        │   └── default.rb
        ├── files
        │   └── default
        │       └── check_log3.pl
        ├── recipes
        │   └── default.rb
        └── templates
            └── default
                └── xinetd_nrpe.erb
site-cookbooks/nrpe/attribute/default.rb
default["nrpe"]["nagios_server"] = "10.0.0.2"

attributeにより設定ファイルを変更する場合は template を、そうでない場合は cookbook_file を用いるのがいいらしい。

レシピ完成

通して記述すると下記のような感じになる。
レシピは上から処理されていくので、記述順には注意すること。

site-cookbooks/nrpe/recipes/default.rb
# ==== create user & group
group 'nagios' do
    group_name  'nagios'
    gid         9999
    action      :create
end
user 'nagios' do
    comment     'nrpe'
    uid         9999
    group       'nagios'
    home        '/usr/local/nagios'
    shell       '/bin/false'
    password    nil
    supports    :manage_home =>true
    action      [:create, :manage]
end

# ==== add the EPEL repo
yum_repository 'epel' do
    description 'Extra Packages for Enterprise Linux'
    mirrorlist  'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch'
    gpgkey      'http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6'
    enabled     false                               #デフォルトでは使用しない様にしておく
    action      :create
end

# ==== install packages
package "xinetd" do
    action :install
end

%w{nrpe nagios-plugins nagios-plugins-all}.each do |pkg|
    package pkg do
        options '--enablerepo=epel'
        action :install
    end
end

# ==== start service
service "xinetd" do
    action [ :enable, :start ]
    supports :reload => true                        #後述のコードで許可する動作
end

# === create custom plugins
cookbook_file "check_log3.pl" do
    source  "check_log3.pl"
    path    "/usr/lib64/nagios/plugins/check_log3.pl"
    owner   "root"
    group   "root"
    mode    0755
    action  :create
end

# ==== create xinetd config
template "xinetd_nrpe.erb" do
    source  "xinetd_nrpe.erb"
    path    "/etc/xinetd.d/nrpe"
    owner   "root"
    group   "root"
    mode    0644
    action  :create
    variables(
        :nagios_server => node["nrpe"]["nagios_server"]
    )
    notifies :reload, 'service[xinetd]'             #"xinetd"に値を引き渡す
end

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5