Gangliaのカスケード接続を行ってみた

筆者の環境では、ルーター, F/W のパフォーマンス管理のために、Gangliaを使用しているのだが、DMZ側から直接管理PCに通信させたくなかったため、参考リンクの構成に従って、Gangliaをカスケード接続してみた。この構成だと管理PCからDMZ側に能動的に取りにいく方式になるため、DMZ側から内部に向けてF/Wを開放する必要がなくなる。<<参考リンク>>
http://www.ibm.com/developerworks/wikis/display/WikiPtype/ganglia

カスケード接続を行うためには、DMZ側にgmetadを置くノードが1台必要になる。
まず、F/Wを閉じることになるので、DMZ内のクライアントは全てDMZ内のgmetadサーバーにデータを送るように構成する。また、ネットワークごとにclusterを分割するため、clusterに適切な値を記入する。このため、DMZ側のクライアントの設定は次のようになる。

udp_send_channel {
  host = fedora-virt6.jp.example.org <== DMZ内のgmetadサーバーを記入
  port = 8649
}
cluster {
  name = "vlan251" <== cluster名を記入
  owner = "unspecified"
  latlong = "unspecified"
  url = "unspecified"
}

DMZ内のgmetadサーバーでは上記と同じcluster, udp_send_channelに加えて、UDP8649, TCP8649をListenするための設定を追加する。(各設定は、それぞれgmetadサーバー自身のデータ取得のため、DMZクライアント(と自分)からのデータを受けとるため、管理PC(gmetad)に取得した情報を提供するため、、となる。)

udp_recv_channel {
  bind = 192.168.251.136 <==gmetadのIPにデータを送付
  port = 8649
}

tcp_accept_channel {
  bind = 127.0.0.1
  port = 8649
}

tcp_accept_channel {
  bind = 192.168.251.136 <== gmetadのIPをListen
  port = 8649
}

更に、gmetad.confで、対象のクラスタ向けのdata_sourceを追加する。(この設定を忘れると、DMZ gmetad の/var/lib/ganglia 以下にデータが置かれず、設定のデバッグに苦労する。。 orz)

data_source "vlan251" localhost

設定が終わったら、gmond, gmetadを再起動する。ここまでの設定で、DMZ側のgmetadサーバーの /var/lib/ganglia/rrds に該当クラスタのデータが来ているはずである。。(ただし、あらかじめ逆引きができるようにしておかないと、上手くホスト名が表示されない。。 orz)

$ ls /var/lib/ganglia/rrds/
__SummaryInfo__  vlan251
$ ls /var/lib/ganglia/rrds/vlan251/
192.168.251.136             fedora-virt4.jp.example.org
3fff:ffff::192:168:251:136  fedora-virt6.jp.example.org
__SummaryInfo__             localhost

ここまででキャパシティ情報の収集は終わりなのだが、更に内部セグメント内のganglia-webでこちらのクラスタを表示させるには、内部セグメントのgmetadサーバーで、gmetad.confにdata_sourceとして上記のノードを記述する。

data_source "vlan11" localhost  <== 内部セグメント用クラスタ
data_source "vlan251" fedora-virt6.jp.example.org <== DMZクラスタ

上手くいくと、http://localhost/ganglia に、vlan11, vlan251 が分割されて表示されるはずである。(上手くいかない場合には、gmetad, gmondを何回か再起動してみると上手くいくかも。。 orz どうもgmond, gmetadに微妙な再起動順序があるらしく、どの時に上手くいくのかよくわからなかった。。 )

通信要件としては、次のようになっている。DMZ=>内部の通信が発生しないので、F/Wの管理はしやすい。

DMZ一般サーバー=>DMZ gmetadサーバー: UDP 8649
内部 gmetadサーバー=> DMZ gmetadサーバー: TCP 8649

Gangliaはかなり使いやすいツールなのだが、F/Wの要件で導入しにくいことがある。カスケードを行うことで、内向き通信は排除できるので、F/Wの管理が厳しい環境では、こちらの構成を使ってみるとよさそうだ。。