とあるシステムで簡単なアクセス解析をする必要があったため、
せっかくなので存在だけは知っていたKeen.ioを使ってみた。
Keen.io
Keen.io は簡単にいうと解析サービス。
Googleアナリティクスとかmixpanelとかに近いっちゃー近いけど、
Keen.ioは基本的に 自分で 解析したい情報をJSONで投げる。
上述アクセスログに関しては、herokuのpostgreSQLなんかにぶっこんでるともったいない。
そんな時はログ基盤としてKeen.ioを使いましょ、って話。
とりあえずJSONでぶん投げておけば、「後で◯◯のデータを解析したい!」なんていう時にも役に立つ。
グラフの出力もしてくれるし。
そんなわけでHeroku + LaravelでのKeen.ioの使い方。
Heroku
HerokuのアドオンからKeen.ioをインストール。
Developerプランは月50,000回のイベント送信まで無料。
ホント助かりまっせ!送信回数が増えたらぜひ有料プランを!
コンソールからインストール
$ heroku addons:create keen:developer
Herokuの管理画面から、Setting > Config Variables > Edit
のような感じで環境設定値が入る。
Laravel
.envファイルの編集
上記の環境設定は、.envファイルに同じように記述する。
.env
KEEN_API_URL=####
KEEN_MASTER_KEY=####
.
.
.
composerパッケージに追加
ありがたいことにLaravelからKeen.ioを利用が可能なcomposerパッケージを作ってくれている人がいる。
せっかくなので利用させていただきましょう。
$ composer require wensleydale/keen-io-laravel:1.*
$ composer update
更新が終了したら、パッケージ追加完了。
サービスプロバイダーとエイリアスの追加
config/app.php を開き、
'providers' => array(
...
Wensleydale\KeenLaravel\KeenLaravelServiceProvider::class
)
'aliases' => array(
...
'Keen' => Wensleydale\KeenLaravel\KeenFacade::class,
)
を追加したのち
$ php artisan vendor:publish
を実行すると、同じくconfigディレクトリ内にkeen.phpというファイルがジェネレイトされる。
keen.php
keen.phpには先ほど.envファイルに記述した設定値を記述。
keen.php
<?php
return array(
...
'projectId' => env('KEEN_PROJECT_ID'),
...
'masterKey' => env('KEEN_MASTER_KEY'),
'writeKey' => env('KEEN_WRITE_KEY'),
'readKey' => env('KEEN_READ_KEY'),
);
このようにenv関数から設定値を読み込む。
Keen.ioに値を投げる
さて、ここまで準備が出来たら、いよいよKeen.ioに値をぶん投げる時が来る。
今回の要件はアクセス解析、というより「誰がいつログインしたか?」の情報だけで良かったので、ログイン部分にこのKeenの処理を挟む。
app/Controller/AuthController.php
<?php
namespace App\Http\Controllers\Auth;
use Auth;
use Keen;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Auth\Redirect;
class AuthController extends Controller
{
public function postLogin (Request $request)
{
if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
// KEEN.IOにイベントを送信
$user = Auth::user();
$event = ['login' => ['name' => $user->name]];
Keen::addEvent('login', $event);
return redirect()->intended('dashboard');
} else {
return redirect()->intended('/');
}
}
}
$event = ['login' => ['name' => $user->name]]
部分でKeen.ioへ送信するデータを作成し、
Keen::addEvent()
で送信、これだけ。とても簡単。投げられた値は、herokuからSSOでKeen.ioにアクセスし、
で確認できる。Keenはデータを取得した際のtimestampもよしなにつけてくれるためありがたい。
Keen.ioからデータを取得
Keen.ioは様々な解析が可能だが、全部紹介していたらとっても長くなりそうなので割愛。
詳しくは https://keen.io/docs/ を確認しながら、いろいろ弄ってみてください。
本アプリケーションでは1日間でのログイン集計が欲しかったので、こんな取得イベントを走らせてました。
// ログイン履歴を取得
$event = Keen::count('login',
['target_property' => 'purchase.item',
'group_by' => 'login.name',
'interval' => 'daily',
'timezone' => 'UTC',
'timeframe' => 'this_1_days'
]);
これを1日1回、heroku schedulerで走らせて、その日のログインを確認するフロー。
まとめ
今回のようにちょっとしたことから、自分自身で心ゆくまで解析したいときまで、Keen.ioの汎用性はとても高い。
反面、googleアナリティクスのように、 JS一行埋め込んで、はい終わり という代物ではないため、
利用できるのは開発者に限るのかも。
ただ、様々な要求が飛び交う中で、こういうことがパッとできるのはやっぱりHerokuの良いところだし、 豊富なアドオンのおかげでもある、と感じる次第です。