おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

GrowthForecast を CentOS 6.3 にインストールして Supervisor で管理する

WebAPI 経由でいろんな値を送り込んでグラフ化できる GrowthForecast。Fluentd との相性が抜群ですっかり定番ツールになりましたね。僕もサイトのレスポンスタイム等をグラフ化して、パフォーマンス監視に利用しています。

-GrowthForecast - Lightning fast Graphing / Visualization

また最近 Supervisor というツールを知りまして。要は growthforecast.pl などのスクリプトをデーモンプロセスとして管理して、

-プロセスの生死を監視する -プロセスが死んだら自動で再起動する -標準出力やエラー出力のログを取る

というようなことをやってくれます。

-Supervisor: A Process Control System ― supervisor 3.0b2-dev documentation

というわけで、GrowthForecast や Supervisor を導入したときのメモです。特に目新しい内容ではないですが、できるだけ丁寧に書き留めておきますので、よろしければ参考にしてくださいまし。

なお、下記の記事を大変参考にさせて(パクらせて)いただきました。@ さん、いつもありがとうございます。

-GrowthForecast導入&Supervisorで起動を管理 - Glide Note - グライドノート

**GrowthForecast をインストールして Supervisor で管理してみた +GrowthForecast のインストール +GrowthForecast を Supervisor で管理 +Supervisor を Upstart 経由で起動 <<

*1. GrowthForecast のインストール

まずはメインの GrowthForecast をインストールするところから。今回のエントリーは結構長いので、とりあえず GrowthForecast を試してみたいという人は、この 1. のところで手を止めても良いと思います。

*1-1. 依存パッケージのインストール

GrowthForecast が利用している RRDTool が依存するライブラリをインストールします。root ユーザで下記コマンドを実行。

||

yum groupinstall "Development Tools"

yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel

||<

(注意)コマンド行の先頭に「#」を付けているものは root ユーザで実行(もしくは sudo を付けて実行)。「$」を付けているものは一般ユーザで実行。以下同じです。 <<

*1-2. GrowthForecast 用のユーザの作成

GrowthForecast では、OS に最初から入っている Perl ではなく Perlbrew の利用が推奨されています。Perlbrew を入れて GrowthForecast を動かすためのユーザを作成。あわせてパスワードも設定します。

||

useradd growthforecast

passwd growthforecast

||<

*1-3. Perlbrew のインストール

growthforecast ユーザに切り替えてから、Perlbrew をインストール。またインストール後に設定ファイルを読み込みます。

||

su - growthforecast

$ curl -kL http://install.perlbrew.pl | bash $ echo ' -s "$HOME/perl5/perlbrew/etc/bashrc" && source "$HOME/perl5/perlbrew/etc/bashrc"' >> .bash_profile $ source $HOME/perl5/perlbrew/etc/bashrc(設定ファイル読込) ||<

ちなみに Perlbrew は複数のバージョンの Perl を切り替えて使うのに便利なツールです。cpanm(cpanminus)は CPAN をさらに便利にしたツール。perlbrew + cpanm は、root 権限を持たないユーザのホームに環境を構築できるのが大きな特長です。

-perlbrewで構築するモダンなPerl環境 | シーズクリエイターズブログ -perlモジュールのinstallにcpanmを使う|perl|@OMAKASE

*1-4. Perlbrew から Perl をインストール

|| $ perlbrew available ||<

でインストールできる Perl のバージョンが列挙されるので、その中からインストールするバージョンを指定します。

|| $ perlbrew available perl-5.17.8 perl-5.16.2 perl-5.14.3 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.xx の xx が奇数のバージョンは開発版なので、perl-5.17.8 は避けて perl-5.16.2 を選びました。

|| $ perlbrew install perl-5.16.2 $ perlbrew switch perl-5.16.2 $ perl -v(バージョンが 5.16.2 になっているか確認) ||<

ちなみに、インストールには結構時間がかかります。10分くらい待っても返ってこなくて、その後20分くらいご飯を食べて戻ってきたら終わってました(ご飯のくだりとかどーでもいい)

*1-5.cpanm のインストール

Perlbrew を入れている環境では、cpanm のインストールは簡単です。

|| $ perlbrew install-cpanm ||<

*1-6. GrowthForecast のインストール

cpanm から GrowthForecast のインストール。引き続き growthforecast ユーザで行いますよ。

|| $ cpanm -n GrowthForecast ||<

なお、-n オプションは --notest の略。テストを行わずにインストールするというオプションです。

*1-7. GrowthForecast のデータディレクトリ等の作成

|| $ mkdir /home/growthforecast/data $ mkdir /home/growthforecast/log ||<

(失敗談)以前、/var/run/growthforecast というディレクトリを作ってそこにデータを保存していました。/var/run 配下がサーバを再起動したタイミングで削除されると知らずに。

*1-8. GrowthForecast の起動及び動作確認

GrowthForecast をバックグラウンドで起動します。ポート番号はデフォルトで 5125 なので、べつに指定しなくても構いません。

|| $ growthforecast.pl --port=5125 --data-dir=/home/growthforecast/data > /home/growthforecast/log/growthforecast.log 2> /home/growthforecast/log/growthforecast.err & ||<

このタイミングで一度動作確認しておくと良いと思います。

-(1) http://(IP アドレス):5125 にアクセスして、GrowthForecast のトップページが表示されるか確認。 -(2) 下記コマンドを打って、グラフが登録されるか確認(下記は公式サイトに載っているサンプルに一部手を加えたもの)

|| $ curl -F number=10 http://(IP アドレス):5125/api/socialgame/member/register ||<

API を叩いたら、下記のような感じで返ってくるはずです。

|| $ curl -F number=10 http://xxx.xxx.xxx.xxx:5125/api/socialgame/member/register {"error":0,"data":{"number":10,"llimit":-1000000000,"mode":"gauge","stype":"AREA","adjustval":"1","meta":"","service_name":"socialgame","gmode":"gauge","color":"#3366cc","created_at":"2013/02/10 23:37:45","section_name":"member","ulimit":1000000000,"id":1,"graph_name":"register","description":"","sulimit":100000,"unit":"","sort":0,"updated_at":"2013/02/10 23:37:45","adjust":"*","type":"AREA","sllimit":-100000,"md5":"c4ca4238a0b923820dcc509a6f75849b"}}%
||<

表示されるグラフは下記のような感じ。「hour・8hours(1min)」というのを選択すると確認しやすいかもです。

*2. GrowthForecast を Supervisor で管理

さて、ここまで無事に確認できたら、GrowthForecast はひととおり動きますので、とりあえず動けばよい、細かいことは気にしないという方は、以下すっ飛ばしてもらって良いと思います。

一方、業務で使うとかいう場合は、GrowthForecast が落ちたときに自動で再起動してくれる仕組みを作っておいた方が安心だと思うので、引き続き以下を参考にしてください。

*2-1. 起動中の GrowthForecast を停止

GrowthForecast がバックグラウンドで起動したままになっているので停止させます。

|| $ pkill -u growthforecast ||<

pkill コマンドって何?という方(僕もそうでした)は、下記を参照してください。便利です。

-Linux コマンド 勉強中 - pkill プロセス名、プロセスの属性を指定してシグナルを送信する・プロセスを停止する -pgrep, pkill を使用してプロセスを殺す - 技術メモ帳

*2-2. Supervisor のインストール準備(yum リポジトリの追加)

Supervisor を yum からインストールするために、epel リポジトリを追加します(Supervisor のインストール方法は他にもあるのですが、いまはせっかく yum で管理できるようになっているので、そっちを利用した方が良いんじゃないかと思います)

ここからは root ユーザで実行します。

||

cd /usr/local/src

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -Uvh epel-release-6-8.noarch.rpm

||<

明示的に指定したときだけ epel リポジトリが参照されるように設定しておいた方が安全です。

||

vi /etc/yum.repos.d/epel.repo

||<

「enabled=1」となっている箇所を「enabled=0」に書き換えれば OK です。

*2-3. Supervisor のインストール

上で追加した epel リポジトリから Supervisor をインストールします。

||

yum --enablerepo=epel install -y supervisor

... Installed: supervisor.noarch 0:2.1-8.el6

Dependency Installed: python-meld3.x86_64 0:0.6.7-1.el6 ||<

*2-4. Supervisor 設定ファイルの編集

||

vi /etc/supervisord.conf

||<

ファイルの末尾に、GrowthForecast の管理に関する設定を追加します。

|| [program:growthforecast] command=/home/growthforecast/perl5/perlbrew/perls/perl-5.16.2/bin/perl /home/growthforecast/perl5/perlbrew/perls/perl-5.16.2/bin/growthforecast.pl --data-dir /home/growthforecast/data process_name=%(program_name)s stdout_logfile_maxbytes=1MB stderr_logfile_maxbytes=1MB stdout_logfile=/var/log/supervisor/%(program_name)s.log stderr_logfile=/var/log/supervisor/%(program_name)s.log user=growthforecast autostart=true autorestart=true ||<

フルバージョンは こちら です。

*2-5. Supervisor の起動及び動作確認

Supervisor を起動させて、ログにエラーを吐いてないか確認します。

||

service supervisord start

Starting supervisord: [ OK ]

tail /var/log/supervisor/superviserd.log

||<

growthforecast が起動していることも合わせて確認します。

||

supervisorctl status

growthforecast RUNNING pid 18283, uptime 0:00:24 ||<

http://(IP アドレス):5125 にアクセスして確認。さらに、GrowthForecast のプロセスを一度殺してみて、自動的に再起動されるかも確認します。

||

pkill -u growthforecast

||<

*3. Supervisor を Upstart 経由で起動

ここまでで、GrowthForecast のプロセスが落ちても、Supervisor が自動で再起動してくれるところまで実現できました。

ここからはさらに進めて、Supervisor を Upstart 経由で起動するようにし、Supervisor が落ちたときでも自動で再起動してくれるようにする設定です。

*3-1. Supervisor を一旦停止

Supervisor を Upstart 経由で起動するために、一旦停止させます。

||

service supervisord stop

||<

*3-2. Supervisor を Upstart 経由で起動

まず設定ファイルを用意します。

||

vi /etc/init/supervisord.conf

||<

|| description "supervisord"

start on runlevel [2345] stop on runlevel [!2345] respawn exec /usr/bin/supervisord -n ||<

そして Upstart 経由で起動。

||

initctl start supervisord

||<

*3-3. Supervisor 及び GrowthForecast の動作確認

設定は全て終わっているので、あとは動作確認のみ。まずは growthforecast が落ちたときに自動で起動されるか確認します。

||

pkill -u growthforecast

||<

http://(IP アドレス):5125 にアクセスして確認。

次に Supervisor が落ちてもなお大丈夫かどうか確認。

||

service supervisord stop

||<

http://(IP アドレス):5125 にアクセスして確認。

以上です。長文にお付き合いくださいまして、ありがとうございました。

*おまけ - Perlbrew から Perl をインストールできなくてシステムの Perl を使用したとき

ここからは完全におまけです。

まだ原因が分かっていないのですが、あるサーバ(そのサーバも CentOS 6.3)で試してみたとき、Perlbrew から Perl をインストールしようとすると、下記のエラーが出て失敗しました。

|| $ perlbrew available ERROR: Unable to retrieve the list of perls.

$ perlbrew install perl-5.16.2 ERROR: Failed to download perl-5.16.2 tarball. at /loader/0x1802950/App/perlbrew.pm line 1. ||<

そのような場合は OS に最初から入っている Perl を使うと良いと思います。僕もそうしましたが、いまのところ特に支障は出ていません。

*参考サイト

-GrowthForecast導入&Supervisorで起動を管理 - Glide Note - グライドノート -スーパーサーバーSupervisorの導入手順メモ - Glide Note - グライドノート -適当なスクリプトをデーモン化するのにSupervisorが便利 - id:anatooのブログ -SuperVisor導入(基本編) « kobayashi blog