SpringMT

RSS

gangliaを導入してみました!

リソース監視はちゃんとしないとと思って、gangliaを入れてみました。
gangliaに関しては、

  • クラスタリングできる
  • 一覧性が優れてる
  • プラグインがそれなりに豊富
  • Nagiosとの連携が取りやすそう
  • yumでサクッと入れられる(fedora16の場合)

ってことで試用してみました。

gangliaは日本語のドキュメントがなくて大分苦労しました・・・・

ganglian自体の概要は@yuzorockさんのスライドに詳しく載っています!

CloudForecastも考えたのですが、fedora16でうまくperlのモジュールが動かず断念しました。

構築

今回、監視+表示をするサーバーをホスト、監視される側のサーバーをクライアンとします。 gagliaはホストでgmetadとgmond、クライアントでgmondのデーモンを動かす必要があります。

ホストサーバーでマルチキャスト通信を使う場合はNICが2つ以上必要です
これではまりました >_<
Ganglia と Nagios: 第 1 回 Ganglia でエンタープライズ・クラスターを監視する

今回はマルチキャストではなく、ユニキャストで設定していきます。
マルチキャストの場合も手順はほぼ一緒です。
マルチキャストの場合、static-routeの設定が必要になります。
AWS EC2とかはマルチキャスト通信できないので、必然的にユニキャストになります。

ホスト側の設定

ホストサーバーは仮想マシン(KVM)を使ってます。

  • 必要なライブラリをインスコ
# yum install rrdtool
# yum install ganglia ganglia-gmetad ganglia-gmond ganglia-web
  • iptableの設定
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 8649 -j ACCEPT
追記してください。

# service iptables restart

UDPのポートだけ開ければ問題ないです。
  • gmeta.confの設定
# vim /etc/ganglia/gmetad.conf
data_source "my cluster" localhost
↓
data_source "クラスタ名" localhost

data_source "クラスタ名" [データを収集するhost]
を書きます。データを収集するのは今回は同じマシンでするので、localhostを指定してます。
今回、データの受け渡しは、デフォルト設定の8649ポートを使うので、ポートは書かなくて大丈夫です。
  • gmond.confの設定

# vim /etc/ganglia/gmond.conf
send_metadata_interval = 0
↓
send_metadata_interval = 5
ユニキャストを使う場合は必ず0以上を設定してください。
マルチキャストの場合は0で大丈夫です。


cluster {
  name = "unspecified"
  owner = "unspecified"
  latlong = "unspecified"
  url = "unspecified"
}
↓
cluster {
  name = "クラスタ名"
  owner = "unspecified"
  latlong = "unspecified"
  url = "unspecified"
}
cluster名は必ず、gmetad.confで書いたクラスタ名を指定してください。
ownerとかはそれぞれ適切なものを書いてください。


udp_send_channel {
  #bind_hostname = yes # Highly recommended, soon to be default.
                       〜
  mcast_join = 239.2.11.71
  port = 8649
  ttl = 1
}
↓
udp_send_channel {
  #bind_hostname = yes # Highly recommended, soon to be default.
                       〜
  #mcast_join = 239.2.11.71
  host = 192.168.0.1 ← (適宜書き換えてください)
  port = 8649
  ttl = 1
}
bind_hostnameはHighly recommendedて書いてありますが、
ホスト名で名前解決できるようになっていなければ、必ずコメントアウトしておいてください。
通信が出来なくなります。
もちろん、名前解決できるようになっていれば、yesのほうがよいです。
今回はマルチキャストではないので、mcast_joinはコメントアウト。
代わりに、hostでホストサーバーのIPaddrを指定してください、
マルチキャストの場合はそのままにしておいて大丈夫です。


udp_recv_channel {
  mcast_join = 239.2.11.71
  port = 8649
  bind = 239.2.11.71
}
↓
udp_recv_channel {
  #mcast_join = 239.2.11.71
  port = 8649
  #bind = 239.2.11.71
}
mcast_joinとbindをコメントアウトしてください。
マルチキャストの場合は、そのままで。


tcp_accept_channel {
  port = 8649
}
この部分はこのままで。
  • httpdの設定
    今回は手っ取り早く確認するための設定にしちゃってます。
    よい子のみんなは真似しちゃだめだよ!!!
# vim /etc/httpd/conf.d/ganglia.conf

    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    Allow from .example.com

↓

    #Order deny,allow
    #Deny from all
    #Allow from 127.0.0.1
    #Allow from ::1
    #Allow from .example.com

  • 起動
# service gmetad start
# service gmond start
# service httpd start

今回ホスト自身も監視対象となっているので、
http://[ホストのIP]/ganglia
で確認できます。

クライアント側の設定

クライアント側ではgmondを動かす設定をするだけです。

  • 必要なライブラリをインスコ
# yum install rrdtool
# yum install ganglia-gmond
  • gmond.confの設定 ホストと設定は一緒です。
# vim /etc/ganglia/gmond.conf

send_metadata_interval = 0
↓
send_metadata_interval = 5
ユニキャストを使う場合は必ず0以上を設定してください。


cluster {
  name = "unspecified"
  owner = "unspecified"
  latlong = "unspecified"
  url = "unspecified"
}
↓
cluster {
  name = "クラスタ名"
  owner = "unspecified"
  latlong = "unspecified"
  url = "unspecified"
}
cluster名は必ず、gmetad.confで書いたクラスタ名を指定してください。


udp_send_channel {
  #bind_hostname = yes # Highly recommended, soon to be default.
                       〜
  mcast_join = 239.2.11.71
  port = 8649
  ttl = 1
}
↓
udp_send_channel {
  #bind_hostname = yes # Highly recommended, soon to be default.
                       〜
  #mcast_join = 239.2.11.71
  host = 192.168.0.1 ← (適宜書き換えてください)
  port = 8649
  ttl = 1
}
hostでホストサーバーのIPaddrを指定してください、
マルチキャストの場合はそのままにしておいて大丈夫です。


udp_recv_channel {
  mcast_join = 239.2.11.71
  port = 8649
  bind = 239.2.11.71
}
↓
udp_recv_channel {
  #mcast_join = 239.2.11.71
  port = 8649
  #bind = 239.2.11.71
}
mcast_joinとbindをコメントアウトしてください。
マルチキャストの場合は、そのままで。


tcp_accept_channel {
  port = 8649
}
この部分はこのままで。
  • 起動
# service gmond start

http://[ホストのIP]/ganglia
でちゃんと出力されているか確認。

まとめ

最初はマルチキャストで設定していたのですが、NICが一個しかなかったので大分はまりました >_<
結局は、クラウド化した際のことも考えて、ユニキャストに変更しました。

今回はセットアップしただけなので、引き続きプラグインやNagiosとの連携をやっていきます。
このエントリではユニキャストでの設定について書きましたが、マルチキャストも動かしてみているので何かあればお答えできることもあるかと思います。
もし何かあれば、コメントやtwitterにてご教授頂ければと思います。