		 性能モニタリングシステムのインストール

-- 目次 --
	0. はじめに
	1. ganglia のインストール
	1.1 python
	1.1.1 python の確認
	1.1.2 CentOS 5 の場合の python 2.6 のインストール 手順
	1.2 ganglia
	1.2.1 ganglia　のインストール
	1.2.1.1 集計ノード
	1.2.1.2 監視ノード
	1.2.2 gangliaのコンパイル
	1.2.3 ganglia plugin のインストール
	1.3 ganglia のセットアップ
	1.3.1 集計ノード
	1.3.2 監視ノード
	2. gfarm のセットアップ
	2.1 gfmd
	2.1.1 config-gfmd-iostat 
	2.2 gfsd
	2.2.1 config-gfsd-iostat
	3. ganglia の操作
	3.1 性能測定の監視
	3.2 rrd ファイル
	3.3 クラスタ表示
	3.4 ローカルストレージ性能

0. はじめに
	ここでは、gfarm に性能モニタリング機能を追加するための手順を記述する。

	gfarm 性能モニタリングシステム は ganglia の python plugin として
	実装されているので、ganglia のインストール、セットアップを先ず行う
	必要がある。

	gfarmサーバーと、pluginは性能カウンタファイルを介して性能情報を共有し、
	その性能カウンタファイルの存在するディレクトリは、
	gfarm の セットアップ時に互いのconfiguration ファイルに記述される。

1. ganglia のインストール

1.1 python
	本システムのganglia plugin は、python 2.5 以上の機能を必要とするので、
	python のバージョンを確かめ、2,5 より古い場合は新しいpythonを
	インストールする。

1.1.1 python の確認
	python のバージョンを確認する。
	+--------------------------------------------------------------------+
	% python -V
	Python 2.4.3
	+--------------------------------------------------------------------+

	デフォルトのバージョンが古いときには、新しいバージョンがないか確認する。
	+--------------------------------------------------------------------+
	% python26 -V
	Python 2.6.8
	+--------------------------------------------------------------------+

1.1.2 CentOS 5 の場合の python 2.6 のインストール 手順
	新しいバージョンがない時はpython 2.6 をインストールする。
	+--------------------------------------------------------------------+
	# yum install python26 python26-devel python26-distribute 
	# yum install python26-mod_python mod_python26
	+--------------------------------------------------------------------+

	以下のようにインストールされている。
	+--------------------------------------------------------------------+
	% ls -l /usr/pyth*
	-rwxr-xr-x 2 root root 8304 Jun 18 21:56 /usr/bin/python
	lrwxrwxrwx 1 root root    6 Sep  4 21:56 /usr/bin/python2 -> python
	-rwxr-xr-x 2 root root 8304 Jun 18 21:56 /usr/bin/python2.4
	-rwxr-xr-x 2 root root 8328 Apr 13 06:00 /usr/bin/python26
	-rwxr-xr-x 2 root root 8328 Apr 13 06:00 /usr/bin/python2.6
	+--------------------------------------------------------------------+

1.2 ganglia
	ganglia は、各ノードでデータを収集する gmond と
	gmond からのデータを集め rrd ファイルとして保存するgmetad、
	および web 上で rrd ファイルをグラフ化して表示する gweb2 
	から成る。

	ganglia ではグリッド、クラスタという概念があり、
	gmond はあるクラスタに属し、gmetad はあるグリッドに属す。

	gmond は自身でデータを収集して他のgmond に送ったり、
	他のgmond から送られたデータを貯め、gmetad の問い合わせに応じて
	収集データを報告する。

	gmetad は クラスタやグリッドなど収集対象の代表ノードからデータを集め、
	rrd ファイルに記録し、また、他のgmetad からの問い合わせがあれば
	報告する。

	代表ノードとはある収集対象のデータを全て保持しているノードで、
	gmetad.conf の data_source 行に記述され、冗長化のため複数いてよい。

	ganglia の 基本的な構成は以下の通りである。

		クラスタ各ノード毎に	gmond
					gmond.conf
		グリッドに 		gmetad
					gmetad.conf
		                        rrdtool データベース
		                        PHP スクリプト (gweb2)
		                        http サーバ

1.2.1 ganglia　のインストール
1.2.1.1 集計ノード
	+--------------------------------------------------------------------+
	# yum -y install --enablerepo=epel ganglia ganglia-gmetad ganglia-web
	+--------------------------------------------------------------------+

	web2 の方が表示機能が豊富なので、ganglia-web2 を次を参考に
	インストールする。
	http://sourceforge.net/apps/trac/ganglia/wiki/ganglia-web-2
	
1.2.1.2 監視ノード
	+--------------------------------------------------------------------+
	# yum install ganglia-gmond-python
	+--------------------------------------------------------------------+

	gfarm 性能モニタリング セットアップ時に記述する ganglia の
	configuration ディレクトリを調べ、記憶する。
	+--------------------------------------------------------------------+
	% whereis gmond
	/usr/sbin/gmond
	% /usr/sbin/gmond -h
	.....
	-c, --conf=STRING      Location of gmond configuration file  
				(default='/etc/ganglia/gmond.conf')
	.....
	% ls /etc/ganglia/
	conf.d  gmond.conf
	% set GCONFDIR=/etc/ganglia
	+--------------------------------------------------------------------+
	configuration ディレクトリは /etc/ganglia であった。
	
	
	gmond のバインドしているpython を確認する。
	+--------------------------------------------------------------------+
	% grep -r python_module $GCONFDIR
	/etc/ganglia/conf.d/modpython.conf:    name = "python_module"
	/etc/ganglia/conf.d/modpython.conf:    params = "/usr/lib64/ganglia/python_modules"
	% set GLIBDIR=/usr/lib64/ganglia/python_modules
	% cat /etc/ganglia/conf.d/modpython.conf
	modules {
	  module {
	    name = "python_module"
	    path = "modpython.so"
	    params = "/usr/lib64/ganglia/python_modules"
	  }
	}
	include ('/etc/ganglia/conf.d/*.pyconf')

	% ldd /usr/lib64/ganglia/modpython.so | grep python
	libpython2.4.so.1.0 => /usr/lib64/libpython2.4.so.1.0 
	+--------------------------------------------------------------------+
	gmond のバインドしている python が 2.5 より古い場合は 1.2.2 節に従い
	gangliaをインストールする必要がある。

1.2.2 gangliaのコンパイル
	ganglia ソースを入手してコンパイルする。
	その際、新しいpython を指示するのを忘れないこと。

	http://sourceforge.net/apps/trac/ganglia/wiki/ganglia_configuration
	に従って必要なパッケージをインストールしておく。

	+--------------------------------------------------------------------+
	% tar xvf ganglia-3.4.0.tar.gz
	% cd ganglia-3.4.0
	% ./configure --with-python=python2.6
	% make
	# make install 
	+--------------------------------------------------------------------+

	1.2.1.2 監視ノードの 手順で ganglia の configuration ディレクトリを
	調べ、記憶する。
	+--------------------------------------------------------------------+
	% whereis gmond
	/usr/local/sbin/gmond
	% /usr/local/sbin/gmond -h
	-c, --conf=STRING      Location of gmond configuration file  
				(default='/usr/local/etc/gmond.conf')
	% set GCONFDIR=/usr/local/etc
	+--------------------------------------------------------------------+
	configuration ディレクトリは /usr/local/etc。

	もし、ganglia のライブラリ配下に python_modules ディレクトリがない時は
	手動で作成する。
	+--------------------------------------------------------------------+
	% find /usr/lib* /usr/local/lib* -name ganglia
	/usr/local/lib64/ganglia
	% find /usr/lib* /usr/local/lib* -name python_modules
	# mkdir /usr/local/lib64/ganglia/python_modules
	+--------------------------------------------------------------------+

1.2.3 ganglia plugin のインストール
	ganglia の python plugin がインストールされているか確かめる。

	1.2.1.2 監視ノード で確認した
	ganglia の configuration ディレクトリ GCONFDIR と
	python_modules のディレクトリ GLIBDIR をチェックする。

	+--------------------------------------------------------------------+
	% ls $GCONFDIR/conf.d
	apache_status.pyconf.disabled  redis.pyconf.disabled
	diskfree.pyconf                riak.pyconf.disabled
	diskstat.pyconf                spfexample.pyconf.disabled
	diskusage.pyconf               tcpconn.pyconf.disabled
	entropy.pyconf                 traffic1.pyconf.disabled
	example.pyconf.disabled        varnish.pyconf.disabled
	netstats.pyconf                vm_stats.pyconf
	nfsstats.pyconf.disabled       xenstats.pyconf.disabled
	procstat.pyconf
	+--------------------------------------------------------------------+

	diskstat.pyconf がなければインストールする。

	ganglia のソースを入手している場合、
	ソースディレクトリで以下の手順でコピーします。
	+--------------------------------------------------------------------+
        # cp gmond/python_modules/conf.d/diskstat.pyconf $GCONFDIR
        # find gmond/python_modules -name '*.py' | xargs -I {} cp {} $GLIBDIR
	+--------------------------------------------------------------------+

	gmond/python_modules/conf.d/ の下には他のplugin もあるので、
	必要なpyconf ファイルを同様にコピーする。
	デフォルトでは、conf.d の下の xxx.pyconf ファイルが、
	xxx.pyconf.disable になっている場合があるので、その場合は、
	xxx.pyconf としてコピーする。

	ネットから入手する場合は、
	https://github.com/ganglia/gmond_python_modules
	などから得る。
	以下の構造で各種plugin が登録されているので、必要なモジュールについて
	同様に配置する。
		モジュール名/
			conf.d/*.conf
			graph.d/*.php
			python_modules/*.py

1.3 ganglia のセットアップ
	ganglia に監視するクラスタを登録する。

	ここの例ではクラスタは一つで、監視ノード間はmulticast で収集データを
	送受信するものとする。

	監視ノードがmulticast で送受信すると全ての監視ノードが代表ノードに
	なりうる。


1.3.1 集計ノード
	+--------------------------------------------------------------------+
	# yum -y install --enablerepo=epel ganglia ganglia-gmetad ganglia-web
	# vi /etc/ganglia/gmetad.conf
	data_source "クラスタ名" 代表ノード1 代表ノード2 ...
	+--------------------------------------------------------------------+
	
1.3.2 監視ノード
	+--------------------------------------------------------------------+
	# yum install ganglia-gmond-python
	# vi /etc/ganglia/gmond.conf
	cluster {
	  name = "クラスタ名"
	+--------------------------------------------------------------------+
 
	unicast で行う場合には、代表ノードをいくつか決め、全ての監視ノードは
	全ての代表ノードにデータを送るように udp_send_channel に
	記述しなければならない。
	
2. gfarm のセットアップ
	gfarm のインストールに関して、性能測定のために行うべきことはない。

	gfarm のセットアップでは、通常のセットアップに加えて、
	性能測定のためのセットアップを行う。

	セットアップに先立ち、
	ganglia の configuration ディレクトリと、
	性能測定ファイルを作成するディレクトリを決めておかなければ
	ならない。
	同一ノードで、複数の異なるgfarm システムを動作させる場合は、
	クラスタラベル名も決めておかなければならない。

	ここで、 環境変数を以下のように用いることにする。
	GCONFDIR : ganglia の configuration ディレクトリ
	IOSTATDIR : 性能測定ファイルを作成するディレクトリ
	IOLABEL : クラスタラベル名

2.1 gfmd
	メタデータサーバーを動かすノードでは、以下の手順でセットアップを行う。

	1. config-gfarm
		gfmd.conf の作成が先に行われる必要がある。
	2. config-gfmd-iostat
		gfmd.conf の変更と、plugin の配置を行う。
	3. マスターノードの場合
		gfmd restart
	   スレーブノードの場合
		gfdump.postgresql -r 
	4. gmond restart
		新しいメトリックが追加されたので、再起動する。

2.1.1 config-gfmd-iostat 
	gfmd.conf の変更と、plugin の配置を行う。

	+--------------------------------------------------------------------+
	% config-gfmd-iostat -h
	usage: config-gfmd-iostat [--help] [--prefix prefix] [-t|-T] [-f]
	[--iostat-enable {no|yes} (currently yes)]
	[--iostat-label cluster_label]
	[--iostat-counter-dir iostat_counter_directory (currently /var/gfarm-stat)]
	[--iostat-ganglia-confdir ganglia_sysconf_directory (currently /etc/ganglia)]
	+--------------------------------------------------------------------+
	
	--prefix , -t, -T, -f は config-gfarm の意味に等しい。
	--iostat-enable は性能測定を行うか否かを指定する。
		yes を指定すると設定内容に沿って、
		gfmd.conf の変更と、plugin の配置が行われ、
		no を指定すると、設定内容に沿って、
		gfmd.conf の変更と、plugin の削除が行われる。

	--iostat-label は 複数gfarm を立てる場合にクラスタ名を指定する。
	--iostat-counter-dir は性能測定ファイルを作成するディレクトリである。
	--iostat-ganglia-confdir は ganglia の gmond.conf が存在する
	                        ディレクトリを指定する。

	--iostat-enable yes で成功したとき、以下のファイルが修正、作成される。
		--iostat-counter-dir で指定されたディレクトリが作成される。
		--iostat-ganglia-confdirで指定されたディレクトリの　conf.d の
		下に gfarm_gfmd{,_ラベル}.pyconf ファイルが作成される。
		ganglia ライブラリの python_modules/ に性能測定の plugin が作
		成される。

	config-gfmd-iostat では以下のことが行われる。
	・ --iostat-ganglia-confdirで指定されたディレクトリに、
	   python_modules の記述があるか確かめる。
	・ 性能測定の plugin を配置する。
	・ --iostat-counter-dir に iostat-gfmd ディレクトリを作成する。
	・ gfmd.conf に性能測定に必要な情報を書き込む。

	当該ノードで メタデータサーバを動かさなくなった場合は、
	同じ設定で、--iostat-enable no を指定する。

2.2 gfsd
	スプールデータサーバーを動かすノードでは、以下の手順でセットアップ
	を行う。

	1. config-gfsd
		gfarm2.conf の作成が先に行われる必要がある。
	2. config-gfsd-iostat
		gfarm2.conf の変更と、plugin の配置を行う。
	3. config-gfsd
		複数スプールを立てる場合、
	4. /etc/init.d/gfsd.* start
		性能ディレクトリのサブディレクトリが出来る必要がある。
	5. gmond restart
		新しいメトリックが追加されたので、再起動する。

2.2.1 config-gfsd-iostat
	gfarm2.conf の変更と、plugin の配置を行う。

	+--------------------------------------------------------------------+
	# config-gfsd-iostat -h
	usage: config-gfsd-iostat [--help] [--prefix prefix] [-t|-T] [-f] [-S]
	[--iostat-enable {no|yes} (currently yes)]
	[--iostat-label cluster_label]
	[--iostat-counter-dir iostat_counter_directory (currently /var/gfarm-stat)]
	[--iostat-ganglia-confdir ganglia_sysconf_directory (currently /etc/ganglia)]
	[--iostat-max-client iostat_max_client (currentry 1024)]
	+--------------------------------------------------------------------+

	--prefix , -t, -T, -f -S は config-gfsd の意味に等しい。
	--iostat-enable, --iostat-label, --iostat-counter-dir, 
	--iostat-ganglia-confdir は config-gfmd-iostat に等しい。
	--iostat-max-client は スプールサーバのクライアント最大数。
	
3. ganglia の操作
	gmond は 初期化時に iostat_counterdir に
	記述されたディレクトリの サーバディレクトリをチェックするので、
	gfarm のサーバを追加、削除した場合は gmond を再起動する必要がある。

3.1 性能測定の監視
	ganglia gmetad を動かしているノードに接続して情報を見る。
		http://集計ノード/ganglia/

	グラフは "gfarm metrics"でグループ化されて以下の表示が行われる。

	iostat-gfmd-601_ntran			メタサーバのトランザクション数
	iostat-gfsd-10.1.3.98-600_rbytes	スプールサーバの読み込みバイト数
	iostat-gfsd-10.1.3.98-600_rcount	スプールサーバの読み込み回数
	iostat-gfsd-10.1.3.98-600_wbytes	スプールサーバの書き込みバイト数
	iostat-gfsd-10.1.3.98-600_wcount	スプールサーバの書き込み回数
	iostat-gfsd-10.1.3.99-600_rbytes	当該ノードの異なるスプールサーバ
	iostat-gfsd-10.1.3.99-600_rcount
	iostat-gfsd-10.1.3.99-600_wbytes
	iostat-gfsd-10.1.3.99-600_wcount
	iostat-gfsd-XYZ_rbytes			当該ノードのスプールサーバの合計
	iostat-gfsd-XYZ_rcount
	iostat-gfsd-XYZ_wbytes
	iostat-gfsd-XYZ_wcount
	
3.2 rrd ファイル
	rrd ファイルは ganglia gmetad を動かしているノードの
	/var/lib/ganglia/rrds/クラスタ名/ノード名/配下に上記
	metric 名で保存されている。
	rrdtool dump でxmlファイルに変換するなどできる。

3.3 クラスタ表示
	ganglia web2 で見る場合、view の定義を追加して、好みの
	ページを作ることが出来る。
	http://sourceforge.net/apps/trac/ganglia/wiki/ganglia-web-2

	今のところmetric の正規表現や、group 名での記述はできないようだが、
	例えば、
	+--------------------------------------------------------------------+
	% cat /var/lib/ganglia/conf/view_XYZ.json
	{
	  "view_name": "XYZ",
	  "items": [
		{ "hostname":"node1.X.co.jp","metric":"iostat-gfmd-601_ntran"},
		{ "hostname":"node1.X.co.jp","metric":"iostat-gfsd-XYZ_wcount"},
		{ "hostname":"node1.X.co.jp","metric":"iostat-gfsd-XYZ_wbytes"},
		{ "hostname":"node1.X.co.jp","metric":"iostat-gfsd-XYZ_rcount"},
		{ "hostname":"node1.X.co.jp","metric":"iostat-gfsd-XYZ_rbytes"},
		{ "hostname":"node2.X.co.jp","metric":"iostat-gfmd-601_ntran"},
		{ "hostname":"node2.X.co.jp","metric":"iostat-gfsd-XYZ_wcount"},
		{ "hostname":"node2.X.co.jp","metric":"iostat-gfsd-XYZ_wbytes"},
		{ "hostname":"node2.X.co.jp","metric":"iostat-gfsd-XYZ_rcount"},
		{ "hostname":"node2.X.co.jp","metric":"iostat-gfsd-XYZ_rbytes"},
		{ "hostname":"node3.X.co.jp","metric":"iostat-gfmd-601_ntran"},
		{ "hostname":"node3.X.co.jp","metric":"iostat-gfsd-XYZ_wcount"},
		{ "hostname":"node3.X.co.jp","metric":"iostat-gfsd-XYZ_wbytes"},
		{ "hostname":"node3.X.co.jp","metric":"iostat-gfsd-XYZ_rcount"},
		{ "hostname":"node3.X.co.jp","metric":"iostat-gfsd-XYZ_rbytes"}
	  ],
	  "view_type":"standard"
	}
	+--------------------------------------------------------------------+

	のような定義を追加すれば、view タブで XYZ を指定すれば一覧できる。

3.4 ローカルストレージ性能
	gfarm には、クライアントアプリケーションが同一ノード上の
	スプールにあるファイルにアクセスする際は、スプールサーバ gfsd を
	経由しないで直接ローカルストレージからIOする機能がある。

	この性能測定値は istat-gfsd-xxx には含まれていない。
	ganglia の既存の disk 性能収集情報で推定できる。

	disk 性能情報は、一般には diskstat_ディスク_メトリック で
	収集されている。
		diskstat_sda_io_time
		diskstat_sda_percent_io_time
		diskstat_sda_read_bytes_per_sec
		diskstat_sda_reads_merged
		diskstat_sda_reads
		diskstat_sda_read_time
		diskstat_sda_weighted_io_time
		diskstat_sda_write_bytes_per_sec
		diskstat_sda_writes_merged
		diskstat_sda_writes
		diskstat_sda_write_time

	この情報は当該ディスクアクセス情報なので、gfarm_iostat の
	ページキャッシュ効果を除いた値とは大きく異なっている。

	diskstat 情報が得られない場合は、1.2.3 ganglia plugin のインストール
	の手順で diskstat モジュールをインストールする。
							-- 以上 --
