はじめに
前回の記事では、仮想マシン上に、Nagiosをインストールし、監視対象サーバを登録する方法について解説しました。今回は、Chefを用いたLAMP開発環境の構築方法~仮想環境構築編で作成した既存のBoxにNRPEエージェントを導入する方法について解説します。
監視対象サーバの構築
- 監視対象サーバの起動
仮想環境構築編で作成したBoxを起動します。
$ cd ~/vagrant/chef-lamp $ vagrant up
$ cd ~/vagrant/chef-lamp $ vagrant up Bringing machine 'default' up with 'virtualbox' provider... [default] Clearing any previously set forwarded ports... [default] Fixed port collision for 22 => 2222. Now on port 2200. [default] Clearing any previously set network interfaces... [default] Preparing network interfaces based on configuration... [default] Forwarding ports... [default] -- 22 => 2200 (adapter 1) [default] Booting VM... [default] Waiting for machine to boot. This may take a few minutes... DL is deprecated, please use Fiddle [default] Machine booted and ready! [default] Configuring and enabling network interfaces... [default] Mounting shared folders... [default] -- /vagrant [default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks [default] VM already provisioned. Run `vagrant provision` or use `--provision` to force it
- NRPEリモート監視 Cookbookの作成
$ knife cookbook create nrpe_remote -o site-cookbooks
$ knife cookbook create nrpe_remote -o site-cookbooks ** Creating cookbook nrpe_remote ** Creating README for cookbook: nrpe_remote ** Creating CHANGELOG for cookbook: nrpe_remote ** Creating metadata for cookbook: nrpe_remote
- レシピの作成
$ vi site-cookbooks/nrpe_remote/recipes/default.rb
# パッケージインストール %w{ nagios-nrpe nagios-plugins-all perl-Params-Validate perl-Nagios-Plugin }.each do |p| package p do action :install options "--enablerepo=epel" end end # メモリ使用量チェックプラグインのインストール remote_file "check_mem" do path "/usr/lib/nagios/plugins/check_mem" source "https://raw.github.com/jasonhancock/nagios-memory/master/plugins/check_mem" mode 0755 action :create not_if "test -f /usr/lib/nagios/plugins/check_mem" end # 監視サーバからのアクセスを許可する script "allow nagios server" do interpreter 'bash' user "root" code <<-EOC sed -i -e 's|^allowed_hosts.*$|allowed_hosts=127.0.0.1,#{node[:nrpe_remote][:nagios]}|' /etc/nagios/nrpe.cfg EOC not_if "grep -q #{node[:nrpe_remote][:nagios]} /etc/nagios/nrpe.cfg" end # 死活監視用ダミーファイル作成 template "index.html" do path "/var/www/html/index.html" source "index.html.erb" mode 0644 action :create # /var/www/html/index.htmlが無かったら作成する not_if "test -f /var/www/html/index.html" end # NRPEコマンドの登録 script "add nrpe cmd" do interpreter 'bash' user "root" code <<-EOC cat /tmp/nrpe.cfg >> /etc/nagios/nrpe.cfg touch /tmp/.nrpe_cfg_done EOC action :nothing not_if "test -f /tmp/.nrpe_cfg_done" end template "nrpe.cfg" do path "/tmp/nrpe.cfg" source "nrpe_command.erb" notifies :run, 'script[add nrpe cmd]', :immediately end # サービス起動と自動起動設定 service "nrpe" do action [:start, :enable] end
- HTTP死活監視用テンプレートの作成
Nagiosプラグインのcheck_httpコマンドがアクセスするトップページテンプレートを作成します。
$ vi site-cookbooks/nrpe_remote/templates/default/index.html.erb
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> NAGIOS</title> </head> <body> </body> </html>
- NRPEコマンドテンプレートの作成
$ vi site-cookbooks/nrpe_remote/templates/default/nrpe_command.erb
# ディスク使用量監視コマンドの登録 command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% / # メモリ使用量監視コマンドの登録 command[check_mem]=/usr/lib/nagios/plugins/check_mem -w 90 -c 99 # HTTP死活監視コマンドの登録 command[check_http]=/usr/lib/nagios/plugins/check_http -I 127.0.0.1 # MySQL監視コマンドの登録 command[check_mysql]=/usr/lib/nagios/plugins/check_mysql -H 127.0.0.1 -u root -p<%= node[:mysql][:passwd] %> # SSH監視コマンドの登録 command[check_ssh]=/usr/lib/nagios/plugins/check_ssh 127.0.0.1 # Swap監視コマンドの登録 command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20% -c 10%
- レシピの追加
作成したCookbookのレシピを指定し、レシピ内で参照する変数を設定します。
$ vi Vagrantfile
chef.add_recipe "nrpe_remote" nrpe_remote: { nagios: "192.168.0.50" },
- プロビジョニング
作成したレシピをBoxに適用します。
$ vagrant provision
$ vagrant provision DL is deprecated, please use Fiddle [default] Chef 11.8.2 Omnibus package is already installed. [default] Running provisioner: chef_solo... Generating chef JSON and uploading... Running chef-solo... [2014-01-27T18:02:48+09:00] INFO: Forking chef instance to converge... [2014-01-27T18:02:48+09:00] INFO: *** Chef 11.8.2 *** [2014-01-27T18:02:48+09:00] INFO: Chef-client pid: 2574 [2014-01-27T18:02:50+09:00] INFO: Setting the run_list to ["recipe[base]", "recipe[repo]", "recipe[httpd]", "recipe[mysql]", "recipe[php54]", "recipe[nrpe_remote]"] from JSON [2014-01-27T18:02:50+09:00] INFO: Run List is
, recipe[repo], recipe[httpd], recipe[mysql], recipe[php54], recipe[nrpe_remote]] [2014-01-27T18:02:50+09:00] INFO: Run List expands to [base, repo, httpd, mysql, php54, nrpe_remote] [2014-01-27T18:02:50+09:00] INFO: Starting Chef Run for chef-lamp.vagrantup.com [2014-01-27T18:02:50+09:00] INFO: Running start handlers [2014-01-27T18:02:50+09:00] INFO: Start handlers complete. [2014-01-27T18:02:50+09:00] WARN: Cloning resource attributes for service[mysqld] from prior resource (CHEF-3694) [2014-01-27T18:02:50+09:00] WARN: Previous service[mysqld]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/default.rb:21:in `from_file' [2014-01-27T18:02:50+09:00] WARN: Current service[mysqld]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/default.rb:45:in `from_file' [2014-01-27T18:03:37+09:00] INFO: service[mysqld] restarted [2014-01-27T18:04:34+09:00] INFO: package[nagios-nrpe] installing nrpe-2.14-5.el6 from epel repository [2014-01-27T18:04:49+09:00] INFO: package[nagios-plugins-all] installing nagios-plugins-all-1.4.16-10.el6 from epel repository [2014-01-27T18:05:31+09:00] INFO: package[perl-Params-Validate] installing perl-Params-Validate-0.92-3.el6 from base repository [2014-01-27T18:05:38+09:00] INFO: package[perl-Nagios-Plugin] installing perl-Nagios-Plugin-0.35-1.el6 from epel repository [2014-01-27T18:06:02+09:00] INFO: remote_file[check_mem] created file /usr/lib/nagios/plugins/check_mem [2014-01-27T18:06:07+09:00] INFO: remote_file[check_mem] updated file contents /usr/lib/nagios/plugins/check_mem [2014-01-27T18:06:07+09:00] INFO: remote_file[check_mem] mode changed to 755 [2014-01-27T18:06:07+09:00] INFO: script[allow nagios server] ran successfully [2014-01-27T18:06:07+09:00] INFO: template[index.html] created file /var/www/html/index.html [2014-01-27T18:06:07+09:00] INFO: template[index.html] updated file contents /var/www/html/index.html [2014-01-27T18:06:07+09:00] INFO: template[index.html] mode changed to 644 [2014-01-27T18:06:07+09:00] INFO: template[nrpe.cfg] created file /tmp/nrpe.cfg [2014-01-27T18:06:07+09:00] INFO: template[nrpe.cfg] updated file contents /tmp/nrpe.cfg [2014-01-27T18:06:07+09:00] INFO: template[nrpe.cfg] sending run action to script[add nrpe cmd] (immediate) [2014-01-27T18:06:07+09:00] INFO: script[add nrpe cmd] ran successfully [2014-01-27T18:06:08+09:00] INFO: service[nrpe] started [2014-01-27T18:06:08+09:00] INFO: service[nrpe] enabled [2014-01-27T18:06:08+09:00] INFO: Chef Run complete in 198.566855063 seconds [2014-01-27T18:06:08+09:00] INFO: Running report handlers [2014-01-27T18:06:08+09:00] INFO: Report handlers complete [2014-01-27T18:02:48+09:00] INFO: Forking chef instance to converge... - NRPEプラグインの動作確認
Boxに接続した後、NRPE監視エージェントに登録された監視コマンドを実行します。
実行時にエラーとなったコマンドがあった場合、Nagios管理画面でもエラーとなって状態表示されますので、エラーが出た場合、対処して下さい。$ vagrant ssh $ grep ^'command\[' /etc/nagios/nrpe.cfg | grep -v hda1 | sed 's/^.*=//' | sh
$ vagrant ssh Last login: Fri Jan 17 20:35:24 2014 from 10.0.2.2 [vagrant@chef-lamp ~]$ grep ^'command\[' /etc/nagios/nrpe.cfg | grep -v hda1 | sed 's/^.*=//' | sh USERS OK - 1 users currently logged in |users=1;5;10;0 OK - load average: 0.00, 0.05, 0.05|load1=0.000;15.000;30.000;0; load5=0.050;10.000;25.000;0; load15=0.050;5.000;20.000;0; PROCS OK: 0 processes with STATE = Z PROCS OK: 79 processes DISK OK - free space: / 36920 MB (96% inode=98%);| /=1347MB;32252;36284;0;40316 MEMORY OK - used: 70932 kB cached: 296860 kB buffers: 19820 kB free: 380876 kB | used=72634368;; cached=303984640;; buffers=20295680;; free=390017024;; HTTP OK: HTTP/1.1 200 OK - 467 bytes in 0.029 second response time |time=0.028643s;;;0.000000 size=467B;;;0 Uptime: 446 Threads: 1 Questions: 2 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.004 SSH OK - OpenSSH_5.3 (protocol 2.0) | time=0.017498s;;;0.000000;10.000000 SWAP OK - 100% free (0 MB out of 0 MB) |swap=0MB;0;0;0;0 [vagrant@chef-lamp ~]$
- 監視ステータスの確認
前回の記事では、監視サーバ上の管理画面では、エラーになっていたステータスを確認します。
なお、リモート監視サーバ上で実行されたチェックコマンドが順次実行されステータスとして徐々に反映されていきます。このため、ステータスが一気に変わらないからと言って慌てることはありません。
ステータス画面の更新は、90秒ごとに行われますので、概ね監視項目数×90秒くらいの時間を見ておいた方が良いでしょう。
まとめ
ここまで、監視対象サーバにNRPE監視エージェントを導入する方法について解説しました。今回作成したCookbookは、CentOS用に作成しましたが、カスタマイズによって他のLinuxサーバにも適用できます。2回に渡って仮想インフラ上のサーバ監視について解説しましたが、仮想マシンだけで無く物理マシンでも同様にChefを用いたプロビジョニングが実行できますので、チャレンジしてみましょう。