Ganglia + Nagios でメトリクス収集 + 監視をしている場合のリモートサーバに対する独自な監視

とりあえず書いておく。

  • Ganglia gmetric をキックする処理を書く
    • 単に gmetric をキックするだけでよい。あとは gmond + gmetad がなんとかしてくれるし、その後は check_ganglia.py に乗っかれば良い。
    • gmetric はちゃんと man を読むべし。ググって頭の方に出てくるのは古い情報のようだ。
    • やり方にもよるのだろうが、極めてやっつけ感が高く、結果、これホントにメンテすんの?感も高い
    • 推移を見たい場合かつラクに済ませたいならこれしか選択しないのでは。
  • Nagios NRPE と各種 Nagios Plugin を使う
    • 監視対象のリモートサーバに NRPE をインストールする必要がある
    • SSL を使う場合、 openssl, openssl-devel もインストールする必要がある
    • 全サーバに共通の仕組みたるコード群はおいておきつつも、その呼び出し方は Nagios 本体側のサーバに委ねられているので、管理しやすさ高い印象
    • いきなり Nagios なので、推移を見ることはできないが、それでいいケース(例えば固定的なプロセスの数のチェック)であれば問題なかろう。
    • 結局、各サーバの nrpe.cfg を適切に各必要がある。が、これは全サーバ共通にしておけば、運用コストは低かろうし、ふつうそうなる。
    • NRPE 自体は RPMFORGE にもあるので、それで簡単にインストールできる
    • Nagiosプラグインは、極めて簡単なルールに則ってさえいればよいものなので、実はとてもラクで柔軟性も極めて高い
  • Nagios check_by_ssh でリモート側の処理を任意に呼び出す
    • Ganglia を使っていない場合に、もっともラクで柔軟な方法だろう
    • もちろんオーバーヘッドは比較的多いのだろう
    • ただしこの場合でも、監視対象のリモートサーバに、パスワード入力なしで入れるように仕込んでおく必要はあり、 Ganglia を入れている場合は、次善の策になろう。
    • やっつけ感は高いが、 Nagios 本体のサーバ1台だけの問題になるので、シンプルさは際立つ。
  • Ganglia で独自のメトリクス収集モジュールを実装
    • ネイティブよりの話。よく知らん。
    • これも、ここさえやってしまえば、あとは check_ganglia.py とそれの呼び出しでよい。
  • Nagios check_snmp + SNMP で返す処理
    • ただ単にめんどくさいだけという話はあるかもしれない。
    • SNMP がらみ
    • SNMP 関係の知識が別途必要であるのと、もちろん、監視対象で snmpd が動いている必要があろうことから、めんどくさい度は高い。

Hadoop + Ganglia 3.1.x + Nagios

概要

  • Hadoop のメトリクスを Ganglia 3.1.x で収集し、さらにそれを Nagios で監視する件。

なぜそうするのか

  • Hadoop のメトリクスはファイルに書き出すこともできる(FileContext を指定すればよい)ので、それを読み込むとかでもいいんだろうが、せっかく GangliaContext, GangliaContext31 が用意されているので、それを使って Ganglia がメトリクスを収集した方が圧倒的にラクなようだから。
  • 収集したメトリクスの監視に Nagios を利用するのも、 Ganglia が check_ganglia.py という Nagios 用の監視スクリプトを提供していて、極めてかんたんに導入できるから。
  • Hadoop徹底入門にも Ganglia によるメトリクス収集が紹介されているから。

導入や設定の手順

  • Hadoop徹底入門の第8章を読めば大体わかる。この際、 OS もその内容に合わせ、 CentOS5 系であれば圧倒的にラクになるはず。むしろ CentOS4 系でどうなるかは知らない。
  • man gmond.conf を読めば大体わかる。大した英語ではない。
  • その他、 Hadoop にしても Ganglia にしても Nagios にしても、公式ドキュメントをまずは読めば大体わかる。大した英語ではない...ような気がする。

マルチキャストを使うことの是非

  • 是非と書いたものの、是非を挙げられるほどわかっていない。
  • とりあえずは、ユニキャストでひとつの gmond に集めた場合、それが落ちれば、即座にメトリクス収集ができなくなるが、マルチキャストしておけば、そのマルチキャストグループに属する他のホストを見るように直せばよいだけになる。
  • gmetad が見ているホストが落ちたかどうかは、別途、動かしている Nagios で検出すればよかろう。もちろん、冗長化として、Virtual IP を振って、というのもあるかもしれないが、そのあたりは言及できるほどには知らない。
  • 天邪鬼に、手動で複数のホストにユニキャストで、というのもああるが、それやるぐらいなら素直にマルチキャストにする方がラクだろう。

注意事項

  • まだ加筆するし、図にも手を入れる。
  • Ganglia は 3.0 系と 3.1 系では、プロトコルに互換性がないらしい。
  • Ganglia 3.0 系の場合、 hadoop-metrics.properties で指定するのは GangliaContext である。図示したのは 3.1 系での場合。
  • hadoop-metrics.properties を書き換えた場合、その変更を反映させるには、 Hadoop 関連の daemon をすべて再起動させる必要があるようだ。従って、すでに実運用しており、再起動がおいそれとできない場合は、十分に計画を練る必要があろう。