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
に記述する。
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リポジトリを登録しておく。
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
必要なパッケージをインストールしていく。
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
サービスの起動
インストールしたパッケージの開始と自動起動の設定は下記の通り。
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
これを転送するようなコードをレシピに記述する。
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 %>
と書いておく。
# 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 %>
}
レシピには次のように記述する。
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
default["nrpe"]["nagios_server"] = "10.0.0.2"
attributeにより設定ファイルを変更する場合は template を、そうでない場合は cookbook_file を用いるのがいいらしい。
レシピ完成
通して記述すると下記のような感じになる。
レシピは上から処理されていくので、記述順には注意すること。
# ==== 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