常設GrowthForecastでお手軽メトリクス監視

この記事はおひとりさま Monitoring Advent Calendar 2013の1日目です!

「あの値とその値の変化を一週間だけ取ってグラフで見たい!」
そんなことってありませんか?自分はまれによくあります。

そんな貴方におすすめなのが、この記事で紹介する常設GrwothForecastとgrouthforecast-workerの組み合わせです。慣れると、必要になってから5分もあれば値の取得が始められるようになります。

GrowthForecastのインストール

GrowthForecastは単体でWebサーバとして起動して、放り込んだ値をうまいことグラフ化してくれるソフトウェアです。インストールの方法は、公式サイトCentOSUbuntuでそのまま使えるコマンドで書いてあります。

デフォルトではTCP5125番ポートで起動するので、ファイアウォールで開けるなりリバースプロキシするなりしておきます。

API投稿をlocalhostなどに制限するallow-fromオプション等もあるので、慣れてきたらそのあたりも調整していくと良いと思います。

grouthforecast-workerのインストール

次に、grouthforecast-workerをインストールします。

githubにありますが、必要となるのはPerlスクリプト1ファイルです。wgetなどで取得して実行権限を立ててください。また、後ほど使うmetrics_scriptという空ディレクトリもここで用意しておきます。

% cpanm -n Path::Class
% wget https://raw.github.com/yappo/grouthforecast-worker/master/grouthforecast.pl
% chmod +x grouthforecast.pl
% mkdir metrics_script

スクリプト内の二箇所を変更します。

# GrowthForecast の /api の URL
my $growthforecast_endpoint = 'http://localhost:5125/api';

# グラフをどのサービスに属するかを example の変わりに入れてね
my $service_name = 'metrics';

もうひとつ、起動スクリプトを用意します。とりあえずfetch.shとでもしておきます。

#!/bin/bash
$(dirname $0)/grouthforecast.pl $(dirname $0)/metrics_script

この起動スクリプトをcrontabに登録します。

 */5 * * * * /(ファイルを置いたパス)/fetch.sh

ここまでを「常設GrowthForecast環境」として、暇なときにでも、お手元にあるroot権限があるVPSなどにいれて立ち上げっぱなしにしておきましょう。

グラフを書きたい衝動が抑えきれなくなったとき

グラフにしたい数字をただ表示するだけのプログラムを作ります。シェルスクリプトでもRubyでもPerlでもPHPでもJavaでもなんでもかまいません。とにかく数字を表示してください。

たとえば、DBにクエリを投げてユーザ数を取りたければこんな感じです*1

#!/bin/bash

echo 'SELECT COUNT(*) FROM users;' | sqlite3 /foo/bar/foobar.db

もうちょっと複雑な例として、先日行われたANIMAX MUSIX三森すずこチャリティオークションの落札金額であれば、スクレイピングしてくるスクリプトをこんな感じで用意すれば良いです。ほとんど、どっかに転がっているサンプルコードそのままです*2

#!/usr/bin/env perl

use strict;
use warnings;

use Web::Scraper;
use Data::Dumper;
use URI;

my $uri = new URI('http://www.pashaoku.jp/auction/detail/34875092');

my $scraper = scraper {
    process '.itemAuctionInfoData', 'yen' => 'TEXT';
};

my $res = $scraper->scrape($uri);
if ($res->{yen} =~ m/([0-9,]+)$/) {
    my $yen = $1;
    $yen =~ tr/,//d;
    print $yen;
}

print "\n";

この例だと変数 $uri を変更したファイルをいくつか用意しておけば*3、複数のオークションの価格を同時に比較することができます。

実行したら数字を表示するプログラムが用意できたら、先ほどこっそりつくっておいた metrics_script ディレクトリに、さらにもう一階層切ってから放り込みます。実行権限も付けておいてください。

grouthforecast.pl
+ metrics_script
  + db
    + users (DBからのユーザ数取得プログラム)
  + auction
    + mimorin (オークション価格取得プログラム)

はい、これでおしまいです。

10分ぐらい待てば値を2回取ってきて最低限のデータが揃うので、早速見てみましょう。

http://(サーバーのホスト名やIPアドレス):5125/

一覧ですね。それぞれクリックすればグラフが見られます。

ね、簡単でしょ?

grouthforecast.plで設定した$service_nameと、スクリプトディレクトリ、ファイル名がそのままグラフのパスになります。とにかく値さえ取っておきさえすれば、あとからAPIドキュメントにあるとおりグラフのURLをいじってあげると、複合グラフや期間指定も自由自在です。


あとかたづけ

必要が無くなったら、実行権限を落としておきましょう。

% chmod -x metrics/auction/mimorin

今年のANIMAX MUSIXは、まめぐがとても良かったです。

*1:参考までに、MySQLなら--defaults-fileでオプションファイルを利用するとコマンドラインにパスワード書かずにすみます。http://dev.mysql.com/doc/refman/5.1/ja/option-files.html

*2:Web::Scraperモジュールが必要なので、cpanm -n Web::Scraper などしてください。

*3:もちろんDRYではありませんが……