2012年12月11日

GrowthForecastでパフォーマンス情報を可視化する

PostgreSQL Advent Calendar 2012(全部俺)のDay 11です。

最近、ちょっとした可視化ブームが訪れております(個人的に)。

運用管理を可視化するツールやプラグインもいろいろと公開されている昨今ですが、個人的にはちょっと前から「GrowthForecast」というツールが気になっていましたので、今回はこれを使ってPostgreSQLを可視化してみようと思います。

■「GrowthForecast」とは何か


「GrowthForecast」は @kazeburo氏 の開発したグラフツールです。単独でWebサーバとして動作し、WebAPIを経由して可視化すべきデータの登録を受け付け、HTTPリクエストでグラフ化された画像データを取得することができるソフトウェアです。

GrowthForecast - Lightning fast Graphing / Visualization
http://kazeburo.github.com/GrowthForecast/

一般的な運用監視ツールは、長期的に運用監視する場合には便利でいいのですが、セットアップに手間がかかるし使いこなすのもいろいろ大変だということで、その辺りを簡単に使えるようにしたい、というツールです。

というわけで、今回はこのGrowthForecastを使ってPostgreSQLの統計情報を可視化してみます。

■GrowthForecastのインストール


GrowthForecastのインストールは、cpanmというツールを使ってインストールを行います。

cpanmのインストール方法については以下を参照ください。

cpanmを使ってPerlモジュールを入れる - メールの話題 | bounceHammer
http://bouncehammer.jp/ja/email-topics/2011/05/install-perl-modules-with-cpanm.html

CPANの依存するモジュールをモリモリとインストールするので、ネットにつながっていない環境でインストールするのは難しいと思いますので、その点はご注意ください。

cpanmの準備ができたら、GrowthForecastのインストールを行います。

本来はcpanmコマンドで直接URLを指定してインストールできるようですが、私の環境ではできなかったため、一旦、wgetでGrowthForecastのtar ballをダウンロードしてインストールを行います。
[snaga@devsv02 gf]$ wget --no-check-certificate https://github.com/downloads/kazeburo/GrowthForecast/GrowthForecast-0.32.tar.gz
--2012-11-26 23:41:44--  https://github.com/downloads/kazeburo/GrowthForecast/GrowthForecast-0.32.tar.gz
Resolving github.com... 207.97.227.239
(...snip...)
Saving to: `GrowthForecast-0.32.tar.gz'

100%[=============================================>] 91,375      84.5K/s   in 1.1s

2012-11-26 23:41:47 (84.5 KB/s) - `GrowthForecast-0.32.tar.gz' saved [91375/91375]

[snaga@devsv02 gf]$ ls
GrowthForecast-0.32.tar.gz
[snaga@devsv02 gf]$ su
Password: 
[root@devsv02 gf]# cpanm -n GrowthForecast-0.32.tar.gz
Building GrowthForecast-0.32 ... OK
Successfully installed GrowthForecast-0.32
111 distributions installed
[root@devsv02 gf]#

■GrowthForecastサーバの起動


インストールが終わったら、GrowthForecastのサーバプロセスを起動します。
[snaga@devsv02 ~]$ /usr/bin/growthforecast.pl --data-dir /tmp/gfdata
23:15:47 1.1        | 2012-11-27T23:15:47 [INFO] [short] first updater start in Tue Nov 27 23:16:00 2012 at /usr/lib/perl5/site_perl/5.8.8/GrowthForecast/Worker.pm line 55
23:15:47 2.1        | 2012-11-27T23:15:47 [INFO] [update] first updater start in Tue Nov 27 23:20:00 2012 at /usr/lib/perl5/site_perl/5.8.8/GrowthForecast/Worker.pm line 55
この時、GrowthForecastのサーバはデフォルトのポート番号5125で待ち受けていますので、ブラウザで接続できるかどうかを確認します。


空のGrowthForecastのページが表示されればGrowthForecastサーバの起動は成功です。

■GrowthForecastへのデータの登録


GrowthForecastへのデータの登録は、GrowthForecastのWebAPIを経由して行います。

以下のようなURLの書式になります。
http://ホスト名:ポート番号/api/サービス名/セクション名/グラフ名
例えば、IPアドレス 10.0.2.12 のGrowthForecastサーバに対して、PostgreSQLの接続セッション数をグラフにするには、以下のようなURLになるでしょう。
http://10.0.2.12:5125/api/postgres/database/session
このURLに対してPOSTメソッドでフォームデータを送信することで、GrowthForecastへのデータ登録を行うことができます。

任意のURLにPOSTメソッドでフォームデータを送信できるツールはいろいろありますが、ここではcURLを使います。

まず、psqlを使ってブロック読み込み数をpg_stat_databaseシステムビューから取得します。そして、その結果を "number" という名前のフォーム変数に設定してPOSTメソッドで送信します。
[snaga@devsv02 gf]$ psql -c 'select count(*) from pg_stat_activity' postgres     count
-------
     1
(1 row)

[snaga@devsv02 gf]$ psql -A -t -c 'select count(*) from pg_stat_activity' postgres
1
[snaga@devsv02 gf]$ curl -F number=`psql -A -t -c 'select count(*) from pg_stat_activity' postgres` http://10.0.2.12:5125/api/postgres/database/session
{"error":0,"data":{"number":1,"llimit":-1000000000,"mode":"gauge","stype":"AREA","adjustval":"1","meta":"","service_name":"postgres","gmode":"gauge","color":"#3399cc","created_at":"2012/11/29 19:00:14","section_name":"database","ulimit":1000000000,"id":2,"graph_name":"session","description":"","sulimit":100000,"unit":"","sort":0,"updated_at":"2012/11/29 19:00:14","adjust":"*","type":"AREA","sllimit":-100000,"md5":"c81e728d9d4c2f636f067f89cc14862c"}}
[snaga@devsv02 gf]$
このようにデータを登録すると、Webブラウザからグラフを見ることができるようになります。


このような「情報の取得→フォーム経由の送信」を定期的に行うことで、GrowthForecastでは時系列のグラフ生成を可能にします。

■バッファの書き出しをグラフ化する


セッション数のような基本的な数値をグラフ化できたら、次は応用編として共有バッファのブロック書き出しをグラフ化してみます。

バッファのブロックの書き出しは、以下のSQLで取得できますので、これで取得できる数値を用います。
SELECT buffers_checkpoint FROM pg_stat_bgwriter;
SELECT buffers_clean FROM pg_stat_bgwriter;
SELECT buffers_backend FROM pg_stat_bgwriter;
buffers_checkpointはチェックポイント処理で書き出されたブロック数、bufers_cleanはバックグラウンド処理で書き出したブロック数、buffers_backendはバックエンドがバッファの入れ替えに際して書き出したブロック数になります。

これらはいずれも過去の数値に積算されていくもので、かつ「ブロック書き出し」という同じカテゴリの数値になりますので、ブロック書き出しのグラフは
  • 差分を計算する
  • 複数のグラフを積み上げる
という形式にしてみます。

まず、先ほどのセッション数と同じように、GrowthForecastサーバにデータを登録して三種類のグラフが表示されるところまでを行います。
curl -F number=`psql -A -t \
  -c 'SELECT buffers_checkpoint FROM pg_stat_bgwriter' postgres` \
  http://10.0.2.12:5125/api/postgres/database/buffers_checkpoint

curl -F number=`psql -A -t \
  -c 'SELECT buffers_clean FROM pg_stat_bgwriter' postgres` \
  http://10.0.2.12:5125/api/postgres/database/buffers_clean

curl -F number=`psql -A -t \
  -c 'SELECT buffers_backend FROM pg_stat_bgwriter' postgres` \
  http://10.0.2.12:5125/api/postgres/database/buffers_backend
グラフは表示されるようになりましたが、このままだと「過去のブロック書き出し数の総数」が表示されてしまうので、差分を表示するように変更しなければなりません。

まず、各グラフの「設定」のページを開いて、「グラフのタイプ」を「実績」から「差分」に変更します。


3つのグラフを差分表示に変更したら、最後にこれら3つのグラフをひとつの複合グラフにまとめます。


まず、「複合グラフの追加」を開きます。

最初に作成する複合グラフの「パス」を指定します。ここでは「buffers_written」とします。

次にグラフの系列を追加していきます。今回は、系列1にbuffers_clean、系列2にbuffers_checkpoint、系列3にbuffers_backendを追加します。それぞれ、「モード:差分」、「スタック:する」として登録します。

最後に「追加」として登録すると、複合グラフが新しいグラフとして登録されます。

■まとめ


今回は「PostgreSQLの動作を可視化」シリーズとして、GrowthForecastを使った可視化を試してみました。

GrowthForecast自体は非常に簡単で使いやすいツールでしたので、PostgreSQLを使っている方もお手軽に可視化を試せるのではないかと思います。興味を持った方は、これを機会にぜひ試してみてください。

では、また。

0 件のコメント:

コメントを投稿