Focuslight

Ruby clone of GrowthForecast

Focuslightは様々な値をWebAPI経由でグラフ化できるWebツールです。シンプルなAPIでリアルタイムにグラフを作成、更新でき、Webインターフェイスからグラフの表示をカスタマイズしたり、複数のメトリクスを重ね合わせたグラフを作成できます

MySQLのデータを1行のコードでグラフ化できます

$ 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するだけで、設定なしでグラフが作れます


(1) 依存パッケージの導入

RRDToolが依存するライブラリを導入します。以下のライブラリをyum、apt、homebrew等OSのパッケージマネージャを利用してインストールします

  • glib
  • xml2
  • pango
  • cairo

CentOS

$ sudo yum groupinstall "Development Tools"
$ sudo yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel

Ubuntu

$ sudo apt-get build-dep rrdtool

(2) Focuslightのインストール

bundlerコマンドを利用して依存モジュールも一緒にインストールします。

OSに最初から入っているrubyではなくrbenv等で構築したrubyを使う事をお勧めします

$ git clone git@github.com:focuslight/focuslight.git
$ cd focuslight
$ gem install bundler
$ bundle install
$ bundle exec rake init

インストールは依存 gem の数が多いので時間がかかります

(3) Focuslightの起動

ここまでの手順でインストールは完了です。Focuslight の起動は「bundle exec foreman start」を実行します

port 5125 でWebサーバが起動するので、ブラウザで確認できます

起動コマンド

$ bundle exec foreman start

設定

プロジェクトルートの .env ファイルを編集して設定します。
変数名 説明
DATADIRグラフデータ(rrdfile)を保存するディレクトリ。デフォルトは ./data
PORTバインドするTCPポート。デフォルトは5125
HOSTバインドするIPアドレス。デフォルトは0.0.0.0
FRONT_PROXY (未対応)リバースプロキシーを利用している場合、リバースプロキシーのIPアドレスもしくはCIDRで指定する。複数指定可
ALLOW_FROM (未対応 )アクセス元IPアドレスの指定。指定しないと全てのリモートホストからアクセス可能
1MIN_METRICS1分毎にグラフを更新する機能の停止
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
  • ALTER
  • DELETE
  • INSERT
  • UPDATE
  • SELECT

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 用クライアントソフトウェアを利用することができます

fluent-plugin-growthforecast

https://github.com/tagomoris/fluent-plugin-growthforecast
Fluentd plugin to output numbers(metrics) to 'GrowthForecast', metrics drawing tool over HTTP.

rb-growthforecast (ruby)

https://github.com/tagomoris/rb-growthforecast
Client library and command to operate GrowthForecast

growthforecast-client (ruby)

https://github.com/sonots/growthforecast-client
growthforecast-client is a ruby client library for GrowthForecast API where GrowthForecast is a visualization graph tool.

Net::GrowthForecast (perl)

https://metacpan.org/pod/Net::GrowthForecast
A client library for awesome visualization tool GrowthForecast