Hadoop運用 >

目次

概要

  • Nagiosの基本情報については、webframe:Nagiosをご参照ください。
  • エージェント監視のGangliaと連携するため、Nagiosはネットワークを介したアクティブな障害検知とそのアラート通知に徹します(Gangliaと機能が重複し構築が煩雑になるため、基本的にNRPEなどのNagiosのエージェント機構は使用しません)。Gangliaが収集した監視データの中で障害検知が必要なものについては、Nagiosが定期的にそれらのデータを取得し、設定された閾値に従いアラート通知を行います。
  • 以下の説明ではGanglia環境は前提ですので、セットアップ等については、GangliaセットアップforHadoopをご参照ください。

モデル環境

サーバ

No.ホスト説明備考
1nm{00,01}.grid.example.com冗長化されたNagiosサーバ
2gm{00,01}.grid.example.com冗長化されたGanglia(gmetad)サーバ構築済の前提

VIP

No.VIPのDNS説明備考
1pleiades-nm.grid.example.comNagiosサーバの冗長化と負荷分散のため
2pleiades-gm.grid.example.comGangliaサーバの冗長化と負荷分散のため

Nagios with Ganglia のセットアップ

Chefレシピ

参考までに、これらはここで説明している環境を構築するChefレシピ(ロール)です。

基本

  1. Nagiosをインストールします。
    1. debian.pngDebian
      $ sudo apt-get install --no-install-recommends nagios3 nagios-plugins nagios-images
    2. centos.pngCentOS
      $ sudo yum install nagios nagios-plugins nagios-plugins-{load,users,ping,ssh,ntp,http,disk,swap,procs,file_age}
      $ sudo service nagios start
      $ sudo chkconfig nagios on
  2. クラスタ監視のための設定ファイルを用意します。設定ファイルのルートディレクトリはそれぞれdebian.png/etc/nagios3centos.png/etc/nagios ですので、以降の説明では適宜、読み替えてください。
    1. クラスタ名でディレクトリを作成し、以下のようなファイルを作成します。ホストや通知先の定義方法については、Nagiosのマニュアルをご参照ください。設定例一式はこちらからダウンロードできます。note.png通常、NagiosではホストのaddressはIPアドレスで定義しますが、Gangliaが監視データをホスト名(FQDN)で出力している場合にはホスト名で定義します。
      /etc/nagios3/pleiades
      ├── checkcommands.cfg
      ├── contacts.cfg
      ├── hosts.cfg
      └── services.cfg
    2. /etc/nagios3/nagios.cfg で、上記のディレクトリにある設定ファイルをロードするようにします。
      1. # Debian
      2. cfg_dir=/etc/nagios3/pleiades
      3. # CentOS
      4. #cfg_dir=/etc/nagios/pleiades

Webコンソールへのアクセス制御

認証

  • セキュアHadoopを構築している場合にはバックエンドにKerberos認証環境がありますので、Webサーバ(Apache2)向けのKerberos認証(SPNEGO)モジュール(mod_auth_kerbなど)の利用を検討するとよいでしょう。

認可

  • cgi.cfg ファイルで設定します。

Ganglia連携監視(check_ganglia_metric)

  1. Gangliaと連携できるよう、Gangliaの設定ファイル(/etc/ganglia/gmetad.conf)でNagiosのホストからgmetadのサービスへのアクセスを許可します。
    1. trusted_hosts 127.0.0.1 nm00.grid.example.com nm01.grid.example.com
    $ sudo /etc/init.d/gmetad restart
  2. gmetadから情報収集するためのNagios監視プラグイン check_ganglia_metric をインストールします。python-setuptoolsパッケージには、easy_installコマンドが含まれています。
    1. debian.pngDebian
      $ sudo apt-get install --no-install-recommends python-setuptools
      $ sudo easy_install check_ganglia_metric
    2. centos.pngCentOS
      $ sudo yum install python-setuptools
      $ sudo easy_install -U distribute    # 不要の場合もあります。
      $ sudo easy_install check_ganglia_metric
  3. note.pngcheck_ganglia_metric が利用している NagAconda の最新版(0.2.1)は動作自体には問題ないものの、監視結果を複数行で出力しNagiosでの表示が見難くなりますので、以前のバージョン(0.1.4)を明示的にインストールしそれをアクティブにします。
    $ sudo easy_install NagAconda==0.1.4
    ...
    Removing NagAconda 0.2.1 from easy-install.pth file
    Adding NagAconda 0.1.4 to easy-install.pth file
    
    Installed /usr/local/lib/python2.7/dist-packages/NagAconda-0.1.4-py2.7.egg
    Processing dependencies for NagAconda==0.1.4
    Finished processing dependencies for NagAconda==0.1.4
    • なお、0.2.1の場合の出力例は以下のようになります。設定閾値を出力しますので、デバッグログのようです。
      $ check_ganglia_metric.py --gmetad_host=localhost --metric_host=localhost \
      > --metric_name=part_max_used --critical=90 --warning=80
      checking warning
      range was warning
      (0, 80.0, False)
      86.8:0:80.0 =  True
      checking critical
      range was critical
      (0, 90.0, False)
      86.8:0:90.0 =  False
      Status Warning, Maximum Disk Space Used = 86.8 %|part_max_used=86.8%;80;90;;
  4. まずはコマンドラインから check_ganglia_metric の動作を確認します。
    $ check_ganglia_metric.py --gmetad_host=gm00.grid.example.com \
    > --metric_host=nn00.grid.example.com --metric_name=part_max_used
    Status Ok, Maximum Disk Space Used = 16.5 %|part_max_used=16.5%;;;;
    $ check_ganglia_metric.py --gmetad_host=gm00.grid.example.com \
    > --metric_host=nn00.grid.example.com --metric_name=part_max_used --critical=15
    Status Critical, Maximum Disk Space Used = 16.5 %|part_max_used=16.5%;;15;;
  5. Gangliaと連携した監視サービスを定義します。
    1. /etc/nagios3/pleiades/checkcommands.cfg: 監視コマンドを定義します。第1パラメータに監視項目名、第2と第3パラメータにそれぞれワーニングとクリティカルの閾値を与えられるようにします。
      1. define command {
      2.         command_name    check_ganglia_metric
      3.         # 一行で記述
      4.         # Debian
      5.         command_line    /usr/local/bin/check_ganglia_metric.py --gmetad_host=pleiades-gm.grid.example.com
      6. --cache_path=/var/lib/nagios3/.check_ganglia_metric.cache --metric_host=$HOSTADDRESS$ --metric_name=$ARG1$
      7. --warning=$ARG2$ --critical=$ARG3$
      8.         # CentOS
      9.         #command_line    /usr/bin/check_ganglia_metric.py --gmetad_host=pleiades-gm.grid.example.com
      10. # --cache_path=/var/log/nagios/.check_ganglia_metric.cache --metric_host=$HOSTADDRESS$ --metric_name=$ARG1$
      11. # --warning=$ARG2$ --critical=$ARG3$
      12. }
    2. /etc/nagios3/pleiades/services.cfg: サービスのテンプレート(register 0)を定義しておくと、運用時の設定変更を柔軟に行えるようになります。
      1. # Service templates
      2. define service {
      3.         name            generic-ganglia-service
      4.         use             generic-service
      5.  
      6.         service_description     Ganglia Metric
      7.         is_volatile             0
      8.         check_period            24x7
      9.         max_check_attempts      3
      10.         normal_check_interval   5
      11.         retry_check_interval    1
      12.         contact_groups          grid-admins
      13.         notification_interval   240
      14.         notification_period     24x7
      15.         notification_options    w,u,c,r
      16. #        check_command           check_ganglia_metric!metricName!warning!critical
      17.         register                0
      18. }
      19.  
      20. define service {
      21.         name            generic-part_max_used-service
      22.         use             generic-ganglia-service
      23.  
      24.         service_description     Maximum Disk Space Used via Ganglia
      25.         check_command           check_ganglia_metric!part_max_used!80!90
      26.         register                0
      27. }
      28.  
      29. ...
      30. # Real Objects
      31. define service{
      32.         use                 generic-part_max_used-service
      33.         hostgroup_name      grid-servers
      34. }
  6. Nagiosを再起動させ、設定を反映させます。
    nagios00.png

check_ganglia_metricキャッシュファイルの監視

  • もしNagiosとGangliaとの連携が絶たれた場合、その時点でGanglia経由の監視サービスは意味をなさなくなります。そのような事態に対処するために、check_ganglia_metricのキャッシュファイルを監視し、連携に問題がある(正しい頻度で更新されない)場合にはGanglia経由の監視サービスの実行を抑止するようにします。これらは、Nagiosのサービス依存定義を利用して実現します。
  1. /etc/nagios3/pleiades/checkcommands.cfg に、まず check_file_age コマンドを定義します。
    1. define command {
    2.         command_name    check_file_age
    3.         command_line    /usr/lib/nagios/plugins/check_file_age -f $ARG1$ -w $ARG2$ -c $ARG3$
    4. }
  2. /etc/nagios3/pleiades/services.cfg に、check_ganglia_metricキャッシュファイルの監視サービスを追加します。
    1. define service {
    2.         name            generic-check_ganglia_cache-service
    3.         use             generic-service
    4.  
    5.         service_description     Cache for check_ganglia_metric
    6.         is_volatile             0
    7.         check_period            24x7
    8. #       check_interval          1
    9.         max_check_attempts      1
    10.         normal_check_interval   1
    11.         retry_check_interval    1
    12.         contact_groups          grid-admins
    13.         notification_interval   240
    14.         notification_period     24x7
    15.         notification_options    w,u,c,r
    16.         # Debian
    17.         check_command           check_file_age!/var/lib/nagios3/.check_ganglia_metric.cache!90!120
    18.         # CentOS
    19.         #check_command           check_file_age!/var/log/nagios/.check_ganglia_metric.cache!90!120
    20.         register                0
    21. }
    22.  
    23. define service{
    24.         use                 generic-check_ganglia_cache-service
    25.         host_name           localhost
    26. }
  3. 同じく /etc/nagios3/pleiades/services.cfg に、サービス依存定義を追加します。正規表現マッチ機能を使用するため、あらかじめ /etc/nagios3/nagios.cfguse_regexp_matching を有効にしておきます。以下の例では、localhost のcheck_ganglia_metricキャッシュ監視サービス(Cache for check_ganglia_metric)がCRITICAL状態(c)と保留状態(p)において失敗する場合(それのみが通知され)、grid-serversに属するホストのGanglia連携監視サービス(.* via Ganglia$ にマッチする)の監視は抑止されるようになります。
    1. define servicedependency {
    2.         host_name                      localhost
    3.         service_description            Cache for check_ganglia_metric
    4. #       dependent_host_name            .*
    5.         dependent_hostgroup_name       grid-servers
    6.         dependent_service_description  .* via Ganglia$
    7.         execution_failure_criteria     c,p
    8. }
    • note.pngもちろん正規表現マッチ機能を有効にした時点で、デフォルトのワイルドカードパターンが無効となります。ディストリビューション(例えば、Debian系)によってはデフォルトで配布される設定ファイルの中にそのようなパターンがありますので、そのような場合には修正する必要があります。
      1. $ diff -u /etc/nagios3/conf.d/hostgroups_nagios2.cfg{.dist,}
      2. --- /etc/nagios3/conf.d/hostgroups_nagios2.cfg.dist 2013-11-03 22:11:31.284092837 +0900
      3. +++ /etc/nagios3/conf.d/hostgroups_nagios2.cfg 2013-11-03 22:11:53.859414711 +0900
      4. @@ -4,7 +4,7 @@
      5.  define hostgroup {
      6.          hostgroup_name  all
      7.   alias           All Servers
      8. - members         *
      9. + members         .*
      10.          }
      11.  
      12.  # A list of your Debian GNU/Linux servers
  4. このままでは、check_ganglia_metricキャッシュファイルの更新頻度はGanglia連携監視サービスの数とそのチェック間隔に依存しますので、ある程度高い頻度でコンスタントにgmetadへのアクセスを監視するサービスを追加しておきます。監視項目は、問題の発生しにくい load_fifteen で代用し、上述のサービス依存定義にマッチしない service_description にします。
    1. define service {
    2.         name            generic-ganglia_heartbeat-service
    3.         use             generic-ganglia-service
    4.         service_description     Ganglia gmetad Heartbeat
    5.         max_check_attempts      3
    6.         normal_check_interval   1
    7.         retry_check_interval    1
    8.         check_command           check_ganglia_metric!load_fifteen!10.0!20.0
    9.         hostgroup_name          ganglia
    10.         register                0
    11. }
    12.  
    13. define service{
    14.         use                 generic-ganglia_heartbeat-service
    15. }
  5. キャッシュファイルの最終更新日時を更新してから以上の設定を反映します。
    $ sudo -u nagios touch /var/lib/nagios3/.check_ganglia_metric.cache

冗長化とフェイルオーバー

  1. 同じ設定で複数の監視ホストを用意すれば問題ありません。バックアップのホストはアラートを非通知に設定しておくとよいでしょう。両ホストが正常であれば監視状態は同様ですので、ユーザアクセスに対して負荷分散させてもよいでしょう。

リソース

  1. http://www.nagios.org/
  2. http://pypi.python.org/pypi/check_ganglia_metric/
    1. https://github.com/mconigliaro/check_ganglia_metric/issues/4
  3. https://pypi.python.org/pypi/NagAconda
    1. https://code.google.com/p/nagaconda/

添付ファイル: filenagios00.png 226件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-03-03 (月) 19:51:11 (2434d)