Nagiosによる企業向け監視システムの構築 第2回「監視対象サーバ構築」

Nagiosを用いたサーバー監視システムの構築~監視対象サーバ構築編

はじめに

前回の記事では、仮想マシン上に、Nagiosをインストールし、監視対象サーバを登録する方法について解説しました。今回は、Chefを用いたLAMP開発環境の構築方法~仮想環境構築編で作成した既存のBoxにNRPEエージェントを導入する方法について解説します。

監視対象サーバの構築

  1. 監視対象サーバの起動

    仮想環境構築編で作成した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
    
  2. 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
    
  3. レシピの作成
    $ 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
    
    4001-03
  4. 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>
    
  5. 4001-04
  6. 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%
    
    4001-05
  7. レシピの追加

    作成したCookbookのレシピを指定し、レシピ内で参照する変数を設定します。

    $ vi Vagrantfile
    
        chef.add_recipe "nrpe_remote"
          nrpe_remote: {
            nagios: "192.168.0.50"
          },
    
    4001-06
  8. プロビジョニング

    作成したレシピを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...
  9. 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 ~]$
    
  10. 監視ステータスの確認

    前回の記事では、監視サーバ上の管理画面では、エラーになっていたステータスを確認します。
    なお、リモート監視サーバ上で実行されたチェックコマンドが順次実行されステータスとして徐々に反映されていきます。このため、ステータスが一気に変わらないからと言って慌てることはありません。
    ステータス画面の更新は、90秒ごとに行われますので、概ね監視項目数×90秒くらいの時間を見ておいた方が良いでしょう。

    4001-10 4001-11

まとめ

ここまで、監視対象サーバにNRPE監視エージェントを導入する方法について解説しました。今回作成したCookbookは、CentOS用に作成しましたが、カスタマイズによって他のLinuxサーバにも適用できます。2回に渡って仮想インフラ上のサーバ監視について解説しましたが、仮想マシンだけで無く物理マシンでも同様にChefを用いたプロビジョニングが実行できますので、チャレンジしてみましょう。

Comments are closed.