OXY NOTES

手軽にデータをグラフ化するGrowthForecastのインストールと使い方

前回に続いて第2弾、グラフ化ツールGrowthForecastをインストール

GrowthForecast(グロースフォーキャスト)はWebサーバとして動作して、WebAPI経由で受け取ったデータを元にグラフ化をしてくれるツールです。

案ずるより産むが易し」言葉で説明するより、とにかくインストールして使ってみたほうが理解が早いと思います。


目次

GrowthForecastのインストール
GrowthForecastの起動用スクリプトを作成する
GrowthForecastの動作テスト
アクセス制限


GrowthForecastのインストール

rootユーザーでインストールする方法は「GrowthForecastの公式ページ」に解説されています。

一応外部に接するサービスなので、セキュリティの観点から今回は専用のユーザーを作成してインストールすることにします。

インストールに必要な各種ツールをインストール

まずは環境を整えるためのツールをインストールします。

# yum groupinstall "Development Tools"
(省略)

# yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel
(省略)

# yum --enablerepo=epel install libyaml-devel
(省略)

# yum install *YAML*
(省略)

cpanとcpanmをインストール

続いてcpanとcpanmをインストールします。

# yum install cpan
Dependencies Resolved

====================================================================================
 Package             Arch         Version               Repository          Size
====================================================================================
Installing:
 perl-CPAN           x86_64       1.9402-136.el6        base               246 k
Installing for dependencies:
 perl-Digest-SHA     x86_64       1:5.47-136.el6        base                64 k

Transaction Summary
====================================================================================
Install       2 Package(s)

# cpan App::cpanminus
(省略。沢山聞かれるが全てyesであるyを押してエンターで良い。)
Installing /usr/local/share/perl5/App/cpanminus.pm
Installing /usr/local/share/perl5/App/cpanminus/fatscript.pm
Installing /usr/local/share/man/man1/cpanm.1
Installing /usr/local/share/man/man3/App::cpanminus.3pm
Installing /usr/local/share/man/man3/App::cpanminus::fatscript.3pm
Installing /usr/local/bin/cpanm
Appending installation info to /usr/lib64/perl5/perllocal.pod
  MIYAGAWA/App-cpanminus-1.7004.tar.gz
  /usr/bin/make install  -- OK

専用のユーザーの作成してスイッチします

# useradd growthforecast
# passwd growthforecast
# su - growthforecast

perlbrewのインストール

perlbrewとは複数のバージョンのperlをインストールし簡単に切り替えられるアプリケーション。
サーバで動作しているparlモジュールに手を加えること無くインストールすることができるので、気軽にテストすることができます。

perlbrewのインストール

$ curl -kL http://install.perlbrew.pl | bash

perlbrewの初期設定

$ echo 'source ~/perl5/perlbrew/etc/bashrc' >> ~/.bash_profile  ← コマンドにパスを通す
$ source ~/.bash_profile  ← 書き込んだ設定を有効にする

インストール可能なPerlのバージョン調べる

# perlbrew available
  perl-5.20.0
  perl-5.18.2
  perl-5.16.3
  perl-5.14.4
  perl-5.12.5
  perl-5.10.1
  perl-5.8.9
  perl-5.6.2
  perl5.005_04
  perl5.004_05
  perl5.003_07

今回は公式曰く安定版の中で一番新しいperl-5.20.0をインストールします。

$ perlbrew install perl-5.20.0

※インストールは10分以上かかります。テストを飛ばせば早くなりますが、グラフ化したデータを元にシリコンバレーでプレゼンをしている姿でも想像しながらコーヒーを飲んで待ちましょう。

正しくインストールされたか確認

i」が付いているのがインストールされているバージョン。

$ perlbrew available
i perl-5.20.0
  perl-5.18.2
  perl-5.16.3
  perl-5.14.4
  perl-5.12.5
  perl-5.10.1
  perl-5.8.9
  perl-5.6.2
  perl5.005_04
  perl5.004_05
  perl5.003_07

インストールしたPerlにスイッチする

$ perlbrew switch perl-5.20.0

確認

$ perl -v
This is perl 5, version 20, subversion 0 (v5.20.0) built for x86_64-linux

無事にv5.20.0になっています。

GrowthForecastのインストール

rootユーザーに変更してvisudoコマンドを編集。作成したユーザーgrowthforecastでsodoを使える状態にします。
その後growthforecastユーザーに変更してGrowthForecastをインストールします。

sudoが使えるように変更

# su -
# visudo
root    ALL=(ALL)       ALL
growthforecast    ALL=(ALL)    NOPASSWD: ALL ←この行を追加

ユーザーを再びgrowthforecastにしてsudoコマンドを利用してGrowthForecastをインストール

# su - growthforecast
$ cpanm -n GrowthForecast
(省略)
Configuring Scope-Container-DBI-0.08 ... OK
Building Scope-Container-DBI-0.08 ... OK
Successfully installed Scope-Container-DBI-0.08
Building GrowthForecast-0.83 ... OK
Successfully installed GrowthForecast-0.83
110 distributions installed

GrowthForecast用のディレクトリを作成

様々なユーザーのデータをグラフ化することを想定して「/usr/share/」にディレクトリを作成。

$ sudo mkdir /usr/share/growthforecast
$ sudo chmod 757 /usr/share/growthforecast ← 権限変更

GrowthForecastの起動

$ growthforecast.pl --data-dir /usr/share/growthforecast

GrowthForecastで利用するポート開放

ポートの開放はそれぞれのiptablesの書式に合わせて設定してください。

iptables -A INPUT -p tcp --dport 5125 -j ACCEPT

サイトにアクセス

192.168.0.1の部分は自分のサイトのIPに合わせてください。

http://192.168.0.1:5125/

GrowthForecast終了する方法

以下のコマンドで確認し、プロセスを終了します。

# ps ax | grep growthforecast
# pkill -KILL -f growthforecast

GrowthForecastの起動用スクリプトを作成する

上の設定で起動と終了はできるようになりましたが、サーバを再起動する度に手動で起動するのは面倒です。そこで起動スクリプトを作成します。

起動スクリプトの詳細は長くなるので解説しません。ごく一般的な設定になっているので、気になる方は調べてみてください。

ここで紹介する起動スクリプトは「https://github.com/hiro-su/gf-sample/blob/master/growthforecast」のものを元に作成しています。
この場を借りてお礼申し上げます。

rootユーザーに変更して/etc/rc.d/init.d/にファイルを作成します。
各種ディレクトリやユーザー名などはインストールした環境に合わせて調整してください。

# su -
# vi /etc/rc.d/init.d/growthforecast
#!/bin/sh
# chkconfig: - 60 40
# description: GrowthForecast
export HOME=/home/growthforecast
source $HOME/perl5/perlbrew/etc/bashrc
perlbrew use perl-5.20.0
USER="growthforecast"
 
PID_FILE=/var/run/growthforecast.pid
LOG_FILE=/var/log/growthforecast.log

PSNAME="growthforecast.pl"
 
start() {
  PID=`pgrep -fo "$PSNAME"`
  if [ -z "$PID" ]; then
    if [ -f $PID_FILE ]; then rm -f $PID_FILE; fi
  else
    echo "growthforecast already started."
  fi
  echo -n "Starting growthforecast: "
  perl $HOME/perl5/perlbrew/perls/perl-5.20.0/bin/growthforecast.pl --data-dir /usr/share/growthforecast \
    >>$LOG_FILE 2>&1 & echo $! > $PID_FILE
  echo "done."
}
 
stop() {
  PID=`pgrep -f "$PSNAME"`
  if [ -z "$PID" ]; then
    echo "growthforecast already stopped."
    exit 0
  fi
  echo -n "Stopping growthforecast: "
  rm -f $PID_FILE
  pkill -TERM -f "$PSNAME"
  echo "done."
}

status() {
  PID=`pgrep -f "$PSNAME"`
  if [ -z "$PID" ]; then
    echo "growthforecast stopped."
  else
    echo "growthforecast already started."
  fi
}
 
usage() {
  echo "Usage: `basename $0`  {start|stop|restart}"
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
        usage
        ;;
esac

GrowthForecastの起動スクリプトへ実行権限付加

# chmod +x /etc/rc.d/init.d/growthforecast

起動スクリプトの動作チェック

# /etc/init.d/growthforecast
Usage: growthforecast  {start|stop|restart}

# /etc/init.d/growthforecast stop ← 停止
# /etc/init.d/growthforecast start ← 起動
# /etc/init.d/growthforecast restart ← 再起動

GrowthForecastの自動起動を設定

# chkconfig --add growthforecast
# chkconfig growthforecast on

以上でサーバが再起動した際に自動で起動するようになりました。


GrowthForecastの動作テスト

次の投稿でグラフ化を行いますが、とりあえずGrowthForecast単体で正しく動作するかテストを行います。

GrowthForecastはサーバとして動作して、POSTでデータを渡すとグラフを作ってくれます。
ためしにコマンドで以下のように打ってみてください。

# curl -F number=10 -F mode=count "http://127.0.0.1:5125/api/service_name/section_name/graph_name"

number=10」はグラフの数値。「mode=count」は追加。という指定です。
URLの「service_name/section_name/graph_name」の部分は言葉のままの意味です。

modeには上書き「gauge」、追加「count」、前回と異なる数値の時だけ上書き更新「modified」があります。
それぞれのパラメータの詳細は公式ページのBasic Usageをご覧ください。

コマンドを打ったら「http://192.168.0.1:5125/」にアクセスします。(192.168.0.1の部分は自分のIPに合わせてください)
すると以下の様な表示が現れると思うので「section_name」をクリックしてグラフを表示してみてください。

作成したグラフを削除したい場合は「remove all graphs in ‘section_name’ section?」ボタンをクリックします。

以上でGrowthForecastの動作確認ができました。


アクセス制限

このままでは誰でもグラフにアクセスできてしまうのでアクセス規制をします。
BASIC認証をかけるか、IPを規制するかなど、環境に合わせて設定してください。

ApacheのBasic認証でアクセス規制する方法」は以前の投稿でまとめました。

nginxでBASIC認証をかける方法はletsspeak’s diaryさんの「CentOSにGrowthForecastをいれて色々表示してみた」を参照してください。

個人的にはGrowthForecastを参照するIPが固定なので、iptablesで登録しました。


以上でGrowthForecastの解説は終了です。
cron等で定期的にデータを渡せば、サーバの状態を簡単にグラフ化することができることがわかったと思います。

ではdstatのログをGrowthForecastに渡すスクリプトを一から書く…。となると面倒です。
そんな時に便利なのが次に紹介するFluentdです。

次は「ビックデータ時代のログ収集管理ツールFluentdのインストールと使い方」を解説します。