Ganglia 3分インストール @ Debian

MySQL のチューニングの効果検証のため、ディスク I/O とかちゃんと監視しないとなぁと思ったんで、名前を聞いたことがあるというだけの理由で Ganglia をインストールしてみました。
何もこだわらなければ APT ですんなり入るのでかなり楽です。

ただし Gangla のアーキテクチャについての理解がないとハマりにハマります。Ganglia のインストール方法についてはたくさん見つかるんですが、自分の理解度ですんなりインストールできる説明がなかったんでまとめてみました。

構成

Ganglia は一般的に次の3つから構成されるみたいです。
cf. Ganglia (software) - Wikipedia, the free encyclopedia

  • Ganglia Monitoring Daemon (gmond)
    監視対象のクライアントにインストールされるデーモンで、クライアントの状態をマルチキャストやユニキャストで送信したり受信したりします。また、gmetad からのリクエストに対して XML を返します。
  • Ganglia Meta Daemon (gmetad)
    管理サーバにインストールされるデーモンで、定期的に gmond にリクエストを送り、XML を取得したら RRD にデータを保存します。
  • Ganglia PHP Web Frontend
    RRD のデータをブラウザ経由で見やすく表示します。

というわけで、今回は次のような構成にします。
172.16.199.3 が管理サーバで、172.16.199.5 が監視対象のクライアントです。いずれも Debian squeeze の 64bit 版です。
どこが TCP/IP でどこが UDP/IP かを理解しておけば iptables の設定も簡単です。
20121008123513

普通は管理サーバ自体も監視対象にするみたいですが今回は監視しません。

監視対象クライアントのセットアップ

以下、172.16.199.5 での作業です。

gmond のインストール

# aptitude install ganglia-monitor
# gmond --version
gmond 3.1.7
# telnet localhost 8649  # XML が表示されることを確認

gmond の設定

今回はマルチキャストではなくユニキャストを使うことにします。
/etc/ganglia/gmond.conf の udp_send_channel と udp_recv_channel を次のように書き換えます。1

udp_send_channel {
  host = 172.16.199.5
  port = 8649
  ttl = 1
}

udp_recv_channel {
  port = 8649
}

設定を反映します。

# /etc/init.d/ganglia-monitor restart

最初 host を管理サーバである 172.16.199.3 にしていたので全然うまくいきませんでした。
今回は監視対象となるクライアントが1台しかないのでわかりにくいですが、本来であれば複数台からなるクラスタごとにリーダーとなるクライアントがいて、そいつが gmetad からの問い合わせに全クライアントの分をまとめて答えるって仕組みみたいです。
なので、172.16.199.5 は監視対象クライアント兼リーダーです。監視対象に 172.16.199.6 を追加した場合、全く同じ設定をして、172.16.199.5 に 172.16.199.6 の情報を送ることになります。

iptables の設定

他の部分の設定にもよりますが、例えば次のように、管理サーバである 172.16.199.3 から TCP の 8649 ポートに対して来たパケットを通すようにします。

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8649 -s 172.16.199.3 --sport 1024: -m state --state NEW -j ACCEPT

とにかく 172.16.199.3 からの TCP の 8649 ポートに対するリクエストに返答できれば OK です。
また、自身の UDP の 8649 ポートから自身の UDP の 8649 ポートへの通信も許可されている必要があるはずです。

管理サーバのセットアップ

以下、172.16.199.3 での作業です。

諸々インストール

# aptitude install rrdtool gmetad ganglia-webfrontend
# gmetad --version
gmetad 3.1.7
# telnet localhost 8651  # XML が表示されることを確認

ここでもし XML が表示されなければ、そもそも gmetad が起動していないと思われます。デバッグオプションを付けて gmetad を起動してみてください。

# gmetad start --debug=1
Please make sure that /var/lib/ganglia/rrds is owned by nobody

上記エラーが出れば /etc/ganglia/gmetad.conf の setuid_username を変更するか、/var/lib/ganglia/rrds の owner を変える必要があります。

gmetad の設定

/etc/ganglia/gmetad.conf の data_source を次のように監視対象クライアント兼リーダーに変更します。

data_source "my cluster" 172.16.199.5

設定を反映します。

# /etc/init.d/gmetad restart

iptables の設定

監視対象クライアント兼リーダーである 172.16.199.5 の TCP の 8649 ポートへアクセスできるようにします。また、Web Frontend のため 80 番ポートを空けます。
例えば次のようになります。

iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i eth0 -p tcp --dport 80 --sport 1024: -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 8649 --sport 1024: -m state --state NEW -j ACCEPT

設定の確認

ちゃんとデータを取得できるか確認します。

# telnet 172.16.199.5 8649

“Tring 172.16.199.5…” と表示されたままで XML が返ってこなければ iptables の設定が間違っている可能性が考えられます。

Web Frontend の設定

次の作業を行うことで http://172.16.199.3/ganglia/ にアクセスした時にフロントエンドが表示されるようになります。

# cp -p /etc/ganglia-webfrontend/apache.conf /etc/apache2/conf.d/ganglia.conf
# /etc/init.d/apache2 restart

http://172.16.199.3/ganglia/ にアクセスしてみて “Hosts up: 1” となっていればインストールは終了です。

“Hosts down: 1” になっていた場合、gmond の設定に不具合があるかもしれません。
試しに、監視対象クライアントである 172.16.199.5 で

# gmetric -n test -v 1 -t int8
There was an error sending to 1 of the send channels.

となった場合は host の指定が間違ってるとかマルチキャストの設定になっているとかが考えられます。

以上、全然カスタマイズをしない Ganglia のインストール方法でした!!

参考

主に以下の内容を参考にさせていただきました。

  1. ユニキャストの場合は globals の send_metadata_interval を 0 より大きな値にしろっていろんなところで見かけましたが、動いてるんでとりあえず気にしないことにします。