Ruby clone of GrowthForecast
Focuslightは様々な値をWebAPI経由でグラフ化できるWebツールです。シンプルなAPIでリアルタイムにグラフを作成、更新でき、Webインターフェイスからグラフの表示をカスタマイズしたり、複数のメトリクスを重ね合わせたグラフを作成できます
$ crontab -l */5 * * * * curl -d number=`mysql -BN -e 'select count(*) from member' game` http://example.com/api/socialgame/member/register 2>&1 | logger -t post_gf -p local0.info
cronで定期的にFocuslightにPOSTするだけで、設定なしでグラフが作れます
RRDToolが依存するライブラリを導入します。以下のライブラリをyum、apt、homebrew等OSのパッケージマネージャを利用してインストールします
$ sudo yum groupinstall "Development Tools" $ sudo yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel
$ sudo apt-get build-dep rrdtool
$ git clone git@github.com:focuslight/focuslight.git $ cd focuslight $ gem install bundler $ bundle install $ bundle exec rake init
インストールは依存 gem の数が多いので時間がかかります
ここまでの手順でインストールは完了です。Focuslight の起動は「bundle exec foreman start」を実行します
port 5125 でWebサーバが起動するので、ブラウザで確認できます
$ bundle exec foreman start
変数名 | 説明 |
---|---|
DATADIR | グラフデータ(rrdfile)を保存するディレクトリ。デフォルトは ./data |
PORT | バインドするTCPポート。デフォルトは5125 |
HOST | バインドするIPアドレス。デフォルトは0.0.0.0 |
FRONT_PROXY (未対応) | リバースプロキシーを利用している場合、リバースプロキシーのIPアドレスもしくはCIDRで指定する。複数指定可 |
ALLOW_FROM (未対応 ) | アクセス元IPアドレスの指定。指定しないと全てのリモートホストからアクセス可能 |
1MIN_METRICS | 1分毎にグラフを更新する機能の停止 |
FLOAT_SUPPORT | 浮動小数点数を受け付ける。デフォルトは整数のみ |
DBURL | データベースURL。SQLite の場合は sqlite://data/gforecast.db、MySQL の場合は mysql2://root:@localhost/focuslight のように指定する。デフォルトは sqlite://data/gforecast.db |
RRDCACHED (未対応) | rrdcached アドレス。unix:</path/to/unix.sock> または <hostname-or-ip>:<port> のように指定する。デフォルトは no |
MOUNT (未対応) | Focuslight のアドレス path。デフォルトはルート(/) |
LOG_LEVEL | ログレベル。debug, info, warn, error, fatal のいずれかを指定する。デフォルトは info |
MySQLを使う場合、データベースを作成し、次の権限を与える必要がなります。
mysql> CREATE DATABASE focuslight; mysql> GRANT CREATE, ALTER, DELETE, INSERT, UPDATE, SELECT \\ ON focuslight.* TO 'user'\@'localhost' IDENTIFIED BY password;
ユーザ名とパスワードは DBURL 変数で指定します
DBURL=mysql2://user:password@localhost/focuslight
グラフの作成・データ更新を行うには以下のURLに対してPOSTメソッドにてリクエストを行います
http://example.com/api/:service_name/:section_name/:graph_name
POSTする際のURL中の各名前は右にまとめました
各項目名にはUTF-8であればマルチバイト文字列が使えます
例中の名前 | 役割 | 具体例を , 区切りで |
---|---|---|
:service_name | グラフを取りたいサービスの名前 | blog, photo, place, socialgame |
:section_name | そのサービスの中での、グラフを取る対象が属してる機能やシステム名 | entry, user, spot, items |
:graph_name | 具体的に何のグラフか | total_entry, kakin_user, muryo_user |
もしソーシャルゲームの登録ユーザ数をグラフにするのであれば
http://example.com/api/socialgame/member/register
に対して POST します。
また、 POST する時には以下のパラメータをつけます。
パラメータ | 説明 | 必須/オプション |
---|---|---|
number | グラフに与える数値 | 必須 |
mode | 数値のアップデート方法。count or modified or gauge。 count: 登録済みの数値を number の値で加算 modified: 前回と異なる数値の時だけ上書き更新 gauge: number の数値で常に上書き デフォルトは gauge |
オプション |
color | グラフの色。#FFFFFF 形式で指定 | オプション/新規グラフで指定なしの場合自動生成 |
curlを使った場合
$ curl -d number=10 http://example.com/api/socialgame/member/register
グラフのURIに対していくつかパラメータを与えるとグラフの描画をカスタマイズすることができます
グラフのURI http://example.com/graph/:service_name/:section_name/:graph_name 複合グラフのURI http://example.com/graph/:pattern
パラメータを変更する事で↓こんなグラフも作れます
http://example.com/graph/service/section/graph?t=d&border=0&legend=0&width=200&background_color=333333&canvas_color=333333&font_color=CCCCCC&axis_color=666666
パラメータ | 説明 |
---|---|
t | グラフの範囲。y(年間)、m(月間)、w(週間)、3d(3日間)、s3d(3日間・1分更新)、d(一日)、sd(一日・1分更新)、8h(8時間)、s8h(8時間・1分更新)、4h(4時間)、s4h(4時間・1分更新)、h(1時間)、sh(1時間・1分更新)、n(半日)、sn(半日・1分更新)、c(任意)、sc(任意・1分更新) |
from | 「t」が「c」または「sc」の場合、描画する開始日付。「2011/12/08 12:10:00」の形式で指定 |
to | 「t」が「c」または「sc」の場合、描画する終了日付。「2011/12/08 12:10:00」の形式で指定 |
width | 横幅。実際には凡例などを含むので指定したサイズより大きくなる |
height | 縦幅。実際には凡例などを含むので指定したサイズより大きくなる |
graphonly | グラフ部分しか描画しないモード。デフォルト「0」 |
logarithmic | 対数グラフ。デフォルト「0」 |
xgrid | X軸の設定。フォーマットはrrdtoolのドキュメント参照のこと |
ygrid | Y軸の設定。フォーマットはrrdtoolのドキュメント参照のこと |
background_color | 背景色。FFFFFF または FFFFFF00 で指定。最後の2文字はアルファチャンネル |
canvas_color | グラフ部分背景色。FFFFFF または FFFFFF00 で指定 |
font_color | 文字色。FFFFFF または FFFFFF00 で指定 |
frame_color | 凡例の色を囲っている部分。FFFFFF または FFFFFF00 で指定 |
axis_color | グラフ部分の枠線。FFFFFF または FFFFFF00 で指定 |
shadea_color | 左上、上の枠線。FFFFFF または FFFFFF00 で指定 |
shadeb_color | 右下、下の枠線。FFFFFF または FFFFFF00 で指定 |
border | 枠線の太さ。「0」も可能。デフォルト「3」 |
legend | 凡例の有無。デフォルト「1」 |
sumup | 凡例に合計値を含むかどうか。デフォルト「0」 |
グラフデータの凡例部分をJSON形式でエクスポートできます
グラフのサマリーURI http://example.com/summary/:service_name/:section_name/:graph_name 複合グラフのサマリーURI http://example.com/summary/:pattern
グラフデータをJSON形式でエクスポートできます
グラフのURI http://example.com/xport/:service_name/:section_name/:graph_name 複合グラフのURI http://example.com/xport/:pattern
パラメータ | 説明 |
---|---|
t | グラフの範囲。y(年間)、m(月間)、w(週間)、3d(3日間)、s3d(3日間・1分更新)、d(一日)、sd(一日・1分更新)、8h(8時間)、s8h(8時間・1分更新)、4h(4時間)、s4h(4時間・1分更新)、h(1時間)、sh(1時間・1分更新)、n(半日)、sn(半日・1分更新)、c(任意)、sc(任意・1分更新) |
from | 「t」が「c」または「sc」の場合、描画する開始日付。「2011/12/08 12:10:00」の形式で指定 |
to | 「t」が「c」または「sc」の場合、描画する終了日付。「2011/12/08 12:10:00」の形式で指定 |
width | rowの最大個数 |
Focuslight は GrowthForecast と HTTP API 互換を持つ Ruby クローンであるため、以下の GrowthForecast 用クライアントソフトウェアを利用することができます
https://github.com/tagomoris/fluent-plugin-growthforecast
Fluentd plugin to output numbers(metrics) to 'GrowthForecast', metrics drawing tool over HTTP.
https://github.com/tagomoris/rb-growthforecast
Client library and command to operate GrowthForecast
https://github.com/sonots/growthforecast-client
growthforecast-client is a ruby client library for GrowthForecast API where GrowthForecast is a visualization graph tool.
https://metacpan.org/pod/Net::GrowthForecast
A client library for awesome visualization tool GrowthForecast