Gangliaでシステムモニタリング

Ganglia でシステムを監視する

TwitterやWikipediaでも利用している(らしい)システムモニタリングツールである ganglia のインストール方法に関して書きます。

はじめに

システム監視してますか?
モニタリングを行うソリューションとしては色々なものがありますが、弊社では Ganglia + Nagios を利用しています。

環境構築自体は大分前に行ったのですが、最近監視対象が増えてきたこともあってパフォーマンス面で問題が発生していた事が確認できたため、設定の見直し等を行いました。
これを機に環境構築時に作成したドキュメントを整理/公開します。

ネットの記事等をみると Munin が人気のようですが、Ganglia も Munin と同様にRRDTool のフロントエンドとして機能します。
クラスター、及び、グリッドに対応している点等から、Munin と比較して、より大規模システムに適しているのではないでしょうか。
有名どころでは Twitter や flickr, Wikipedia, MIT, NASA, CERN, Microsoft 等で利用しているようです。

Ganglia : Wikimedia Grid Report では実際にGanglia(ganglia-web)の画面を見る事ができます。

弊社では当初システム監視を行うあたって別のパッケージを利用する事を考えていたのですが、導入するサーバのシステム要件的に厳しかったため ( 主にメモリ)、ganglia + nagios にしたという経緯があります。
近年のIAサーバを利用してる場合、監視対象の規模にもよりますが、512MB程度のメモリ設定のLinuxで動作すると思います。

Ganglia + Nagios を選択した別の理由は、何にしようか考えていた際に見つけた以下資料にあります。
インストール方法に関してもこれを参考にしました。

Ganglia + Nagios でシステム構築する理由等については上記リンク先に記されているので、興味がある方はこれらを参照ください ( プラグインを記述してGanglia の機能を拡張する方法も記載されています )。

環境

環境は以下になります。 インストールは yum を利用して行います。

OS CentOS 6.7
Ganglia (gmond, gmetad) 3.7.2-2
ganglia-web 3.7.1-2

Ganglia の構成

Ganglia は以下3つのコンポーネントから構成されています。

Ganglia Monitoring daemon

メトリックを収集するために、監視対象 ( Gangliaクライアント : ノードと呼ばれる ) にインストールされます。 ( ganglia-gmond )
デーモンが取得したメトリック ( CPU, メモリ, ロード等のデータ ) はサーバに送られます。

Ganglia Metadata collection daemon

Gangliaサーバにインストールされます。監視対象から送られてくるメトリックを収集して、RRDデータとして保存します。 ( ganglia-gmetad )

Ganglia Web Frontend

Gangliaが収集したデータを閲覧するためのWebアプリケーションです。phpで書かれています。 ( ganglia-web )

Ganglia概要図

今回は2台のPCを用意し、以下のようにインストールするものとします。

  • Gangliaサーバ
    ganglia-gmetad、ganglia-gmond、 及び、 ganglia-web (要は全部) をインストールする。
  • Gangliaクライアント
    ganglia-gmond をインストールする。

Gangliaインストール(サーバ側)

前提

Ganglia のデフォルト設定では gmetad と gmond の通信はマルチキャストで行う事になっていますが ( 上述の IBMのリンクでもそうなっている )、今回はユニキャスト通信を行う形で設定します。
理由は、AWS EC2等ではマルチキャストをサポートしていないため、EC2の監視を行う場合にマルチキャストでは問題が発生するからです。
参考 : Frequently asked questions about Ganglia

epelリポジトリの追加

epelリポジトリからインストールするため、登録されていない場合登録します。

# yum install epel-release

パッケージ・インストール

必要なパッケージのインストール
以下をインストールします。依存関係のあるパッケージも併せてインストールされます。

  • rrdtool
  • ganglia-gmetad
  • ganglia-gmond
  • ganglia-web
# yum install rrdtool ganglia-gmetad ganglia-gmond ganglia-web

gmetad設定

/etc/ganglia/gmetad.conf を編集します。

# vi /etc/ganglia/gmetad.conf

必要に応じて以下のように編集します。(抜粋)
"Agile_Local_Cluster" 部分は一例です。適宜変更して下さい。

data_source "Agile_Local_Cluster" localhost

gmond設定

/etc/ganglia/gmond.conf を編集します。

# vi /etc/ganglia/gmond.conf

必要に応じて以下のように編集します。(抜粋)
"Agile_Local_Cluster" 部分はgmetad.confで設定した値に併せて変更して下さい。
host = "192.168.1.100" 部分は Gangliaサーバの IPアドレスを指定します。

send_metadata_interval = 30 // 30秒間隔

cluster {
    name = "Agile_Local_Cluster"
    owner = "unspecified"
    latlong = "unspecified"
    url = "unspecified"
}

udp_send_channel {
    #bind_hostname = yes # Highly recommended, soon to be default.

    #mcast_join = 239.2.11.71  // ユニキャストの場合削除(コメントアウト)
    host = 192.168.1.100  // ユニキャストの場合追加
    port = 8649
    ttl = 1
}
		
udp_recv_channel {
    #mcast_join = 239.2.11.71  // ユニキャストの場合削除(コメントアウト)
    port = 8649
    #bind = 239.2.11.71  // ユニキャストの場合削除(コメントアウト)

}
		
tcp_accept_channel {
    port = 8649
}

Frequently asked questions about Gangliaにユニキャスト時の send_metadata_interval 設定に関して以下記載があります。
ユニキャスト時は 0 以外の値を指定するようにしましょう。

If you plan on using unicast mode, please set "send_metadata_interval" to something other than 0. 30-60 seconds has been found to work reliably in most cases. Setting this variable to a non-zero value will make the gmond processes periodically announce their metrics and the graphs will reappear on the host-view page.

ganglia-web設定

/etc/httpd/conf.d/ganglia.conf を必要に応じて編集します。

# vi /etc/httpd/conf.d/ganglia.conf

deny, allow等のアクセス設定や必要であればセキュリティ設定 ( 基本認証をかける等 ) を行ってください。
以下はGangliaサーバ以外のLAN上の端末からも閲覧できるようにした例 (抜粋)

  ... 
  Allow from ::1
  Allow from 192.168.1.0/24
  ...

ファイアウォール設定

Ganglia は上記設定にもあるように、8649番ポートを利用して通信を行うので通信が行えるように設定を行ってください。

以下は一例です。

# vi /etc/sysconfig/iptables

以下ルールを追記

-A INPUT -m state --state NEW -m udp -p udp --dport 8649 -j ACCEPT

ルール追加後は iptables 再起動

# /etc/rc.d/init.d/iptables restart

サービスの(再)起動

gmetad

# chkconfig gmetad on
# /etc/rc.d/init.d gmetad start

gmond

# chkconfig gmond on
# /etc/rc.d/init.d gmond start

ganglia-web(apache)

# /etc/rc.d/init.d/httpd restart

その他

Selinux を利用している場合

Selinuxが有効の場合にエラーが表示される事がある(Ganglia-webがデータを読み出せない)。
弊社では、この場合以下を実行して解決しました。

# semanage port -a -t http_port_t -p tcp 8652

Gangliaインストール(クライアント側)

epelリポジトリの追加

サーバ側と同様、epelリポジトリが登録されていない場合登録します。

# yum install epel-release

パッケージ・インストール

ganglia-gmond をインストールします。

# yum install ganglia-gmond

gmond設定

以下設定します。(抜粋)
設定内容はサーバ側と同様です。

send_metadata_interval = 30
		
cluster {
    name = "Agile_Local_Cluster"
    owner = "unspecified"
    latlong = "unspecified"
    url = "unspecified"
}
		
udp_send_channel {
    #bind_hostname = yes # Highly recommended, soon to be default.
    (中略)
    #mcast_join = 239.2.11.71
    host = 192.168.1.100
    port = 8649
    ttl = 1
}
		
udp_recv_channel {
    #mcast_join = 239.2.11.71
    port = 8649
    #bind = 239.2.11.71
}
		
tcp_accept_channel {
    port = 8649
}

サービスの起動

gmond を起動します。

# chkconfig gmond on
# /etc/rc.d/init.d/gmond start

動作確認

サーバ、クライアント共に設定が完了しサービスが問題なく起動したら、Webブラウザでganglia-web にアクセスして動作確認します。

http://<gangliaサーバアドレス>/ganglia/

クライアントのメトリックが正しく収集できていればOKです。

メトリックが収集できない場合

私が経験した中でメトリックが収集できなかったケースとしては、以下のようなものがあります。

  • ファイアウォールの設定ミス
  • send_metadata_interval の設定漏れ
    初期設定は0 だが、この場合ユニキャストだとサービス起動時にしかデータが送信されない。
  • host の設定誤り

ホスト名での表示

Wikimedia のようにIPアドレスではなくホスト名で表示されるようにしたい!」

という場合、名前解決が行われる必要があります。Gangliaサーバにて監視対象ホストのIPアドレスが適切に名前解決されるようにDNSをセットアップする等してください。

※hosts ファイル使う方法でもよいと思います。

※LANの場合、LAN内ホストの名前解決を行うDNSサーバを立ちあげる必要があるかもしれません。

※DNSサーバのインストール/設定に関してはここでは触れません。

まとめ

システム監視を適切に行う事で、問題を早期に発見したりトラブルを未然に防ぐといった事が可能になります。

実際に問題が(早期発見できずに)発覚した場合でも、取得していた情報から何が原因で発生したものかを特定できる可能性は高くなります。

弊社がGangliaと併せて利用している Nagios や Ganglia に関する追加記事に関してはまた今度書こうと思います。