Let me code again...

Welcome to ijokarumawak's blog :)

Couchbase Serverの統計情報をCSVで保存しExcelで分析する

今回はcbstatsの結果をCSVで出力し、Excelで分析をする方法をサンプルスクリプトを交えてご紹介します。

Shellで定期的にcbstatsの結果を収集

Couchbase Serverの管理コンソールからは様々な統計情報がグラフで閲覧できます。 しかし、過去のデータをさかのぼって見たい場合は、時、日、月、年などで丸まってしまい詳細なデータが確認できません。

そこで、cbstatsコマンドを定期的に実行し、結果を保存する場合があります。

私も性能検証や不具合の解析時にcbstatsコマンドの結果を保存しないといけないのでよく使うのですが、普段使っていたスクリプトをGithubに上げました。

collect-stats.shは、5秒間隔でcbstats allコマンドを実行します。実行方法は以下の通りです:

collect-stats.sh hostname bucketname

結果は標準出力に出力されるので、ファイルに保存したい場合は次のようにすると良いでしょう。ファイル名をホスト名とバケット名で生成しています。またバックグラウンド実行しているのでこのままほっておいてもログを出力し続けます。

HOST=`showip eth0`; BUCKET=translation; collect-stats.sh $HOST $BUCKET >> cbstats_${HOST}_${BUCKET}.log 2>&1 &

ファイル名に実行日時をつけたい場合は次のようにすると良いでしょう。何回もテストや検証を実行する際にはログファイルを分けておくと後々楽です。

 >> cbstats_${HOST}_${BUCKET}_`date +"%Y-%m-%d-%H%M"`.log

このShellの内部では、awkコマンドを使ってcbstatsの出力結果の各項目名は除外して、統計情報の値のみを取得しています。なのでファイルサイズも比較的コンパクトです:

while [ true ]
do
  NOW=`date +"%Y-%m-%d %H:%M:%S"`
  STATS=`/opt/couchbase/bin/cbstats -b $BUCKET $HOST:11210 all |awk '{printf "%s,", $2}' |awk '{print}'`
  echo $NOW,$STATS
  sleep 5
done

実行すると以下のようなログが取得できます:

2015-05-28 12:54:10,1,1,0,1,15,228569496,197065434,100005243,0,0,0,0,0,960,6,5000,17,2,11,4,960,1922,0,6,0,0,0,0,1,0,0,2015-05-29,1,4096,/mnt/couchbase/data/default/access.log,1440,10,couchdb,96,0,0,0,0,1922,7845604,LOW,500,5,0,10,5,3280,10,27137,85,10000,,seqno,default,0,9557886,18587056,/mnt/couchbase/data/default,10485760,1,1,524288,180,0,1921,1922,1,72,102506,0,3600,0,0,0,false,32,0,running,0,15,30,5,3079,,0,1921,0,196783398,0,0,value_only,0,0,2443,1,843,0,204831384,0,2,25,20971520,0,0,0,4,3,0,1073741824,0,1024,912680550,805306368,true,99892,146072,0,93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,18491756,40,0,0,0,0,0,,1,0,1432817582,0,1,1922,7845604,153760,300,1,1000,10,0.9,5000,5,0,0,500,300,20,0.1,10,-1,99,0,196962716,0,1922,1921,1921,0,041bbde46427695081b35fc9d937d557,204685312,0,8,682,0,0,2.1.1r-1043-g19affd1,0,1,1000,0,100,100,0,complete,283,write_heavy,0,0,0,0,2.0.11-stable,0,30000,5000,30000,228569496,4424e903ad7e44726dc46f73acebd07c960f8e72,6183,64,0,1.071846,2.973997,4,1432817650,28,157,960,0,0,8557736,98378880,49920,72960,341,0,960,0,0,0,100,0,960,960,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,962,0,0,8557736,98583836,49972,73112,341,0,961,0,0,0,100,0,961,962,72,102506,1,3.0.3-1716-rel,
2015-05-28 12:54:16,1,1,0,1,15,264091560,231194233,116974433,0,0,0,0,0,1124,6,5000,17,2,11,4,1124,2255,0,6,0,0,0,0,1,0,0,2015-05-29,1,4096,/mnt/couchbase/data/default/access.log,1440,10,couchdb,96,0,0,0,0,2255,9204910,LOW,500,5,0,10,5,3798,11,34191,85,10000,,seqno,default,0,11188588,21315487,/mnt/couchbase/data/default,10485760,1,1,524288,180,0,2254,2255,1,72,102506,0,3600,0,0,0,false,39,0,running,0,15,30,5,3079,,0,2254,0,230895252,0,0,value_only,0,0,2563,1,1056,0,240319860,0,2,25,20971520,0,0,0,4,3,0,1073741824,0,1024,912680550,805306368,true,117208,171380,0,93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,18508076,40,0,0,0,0,0,,1,0,1432817582,0,1,2255,9204910,180400,300,1,1000,10,0.9,5000,5,0,0,500,300,20,0.1,10,-1,99,0,231087890,0,2255,2254,2254,0,041bbde46427695081b35fc9d937d557,240148480,0,8,682,0,0,2.1.1r-1043-g19affd1,0,1,1000,0,100,100,0,complete,283,write_heavy,0,0,0,0,2.0.11-stable,0,30000,5000,30000,264091560,4424e903ad7e44726dc46f73acebd07c960f8e72,6183,64,0,1.142222,3.486783,4,1432817655,29,162,1124,0,0,8557736,115185272,58396,85424,341,0,1123,0,0,0,100,0,1123,1124,72,102506,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,1131,0,0,8557736,115902618,58812,85956,341,0,1131,0,0,0,100,0,1131,1131,0,0,0,3.0.3-1716-rel,

cbstatsの出力項目が増えることがあるので、注意

先のスクリプトでは、cbstats allの出力項目を全てCSV形式で出力しています。 一点注意したいこととして、Couchbase Serverのバージョンが変わると、cbstatsの出力項目が増えることがあります。

先日4.0のBeta版がリリースされましたが、出力項目が20個くらい増えていますw

CSVのカラム順序も変わるので、注意しましょう。 項目名の一覧をCSV形式で取得するには以下のコマンドを使うと良いでしょう:

cbstats localhost:11210 all |awk '{printf "%s,",$1}' |awk '{print}' |sed s/://g

ある条件下でしか発生しない統計情報もあるので、注意

ep_bg_load, ep_bg_load_avg, ep_bg_max_load, ep_bg_max_wait, ep_bg_min_wait, ep_bg_num_samples などの項目は、メモリ上に存在しないアイテムを参照しようとした場合に発生する統計情報です。こういったものもあるので、CSV形式でログを保存したあと解析するのはちょっと面倒ですね。

CSVのデータ分析といえばExcel

項目の並び順の問題はありますが、CSV形式で取得したログはExcelで分析したりしています。 Githubの同プロジェクト内excelディレクトリにCSVを貼り付けるとグラフ化できるスプレッドシートを用意しておきました。下図のようなグラフを描画でき、クラスタの挙動を把握するのに便利です。

cbstats allの情報は「全て」ではない

cbstatsのオプションで指定できるものはいくつかありますが、allでは取得できないものもいくつかあります。 例えばvBucketごとの統計情報で、checkpointなどがあります。

$ cbstats localhost:11210 checkpoint
(中略)
vb_983:last_closed_checkpoint_id:  5
vb_983:num_checkpoint_items:       1
vb_983:num_checkpoints:            1

これらのvBucket毎に分かれている情報を足し合わせてバケット単位の値として取得したい場合は、collect-checkpoint-items.shで行っているように、awkコマンドで値を足し合わせると良いでしょう。

cbstats localhost:11210 checkpoint |grep num_checkpoint_items |awk '{s += $2} END {print s}'

まとめ

今回はcbstatsの結果をCSVで出力し、Excelで分析をする方法をご紹介しました。 grepコマンドで特定の項目に絞ったりすれば、他のモニタリングツールと連携し、クラスタの監視を行うこともできますね。 今後も便利なスクリプトはGithubで共有していきたいと思います!