5分で誰でもできる!FlydataではじめるRedshift

Tokyo Otaku Modeでは、メール配信や広告配信ログ、ユーザーアクションログなどをRedshiftに保存しています。そこから集計を行い、A/Bテストの判定に利用したり、社内管理ツールで結果を出力してマーケティングに活用したりしています。

Redshiftについては、「Amazon Redshiftではじめるビッグデータ処理入門」に詳しいので、そちらをご参照ください。

TOMがビッグデータを処理するソリューションとしてRedshiftを採用した大きな理由のひとつに、PostgreSQL互換のインターフェースが用意されている点があります。クライアントとしてpsql, JDBC, ODBCなど汎用的で枯れたものが利用できるので、システムの連携をとるのがとても簡単です(Node.jsの場合はnode-postgresなどが利用できます)。また、SQLがそのまま使え、学習コストが低い点もメリットと言えます。

さらに、Flydataを利用すれば、FluendやKinesisの面倒な設定すら不要になり、ほぼいきなりRedshiftを使うことも可能です。

今回は、いままでRedshiftに触れたことのない方でも、Flydataを使って5分でログの継続アップロードから集計まで行える方法を解説したいと思います。

Flydataとは

redshift flydata 2014-10-20 23-13-58

FlyDataは、一度設定するだけで継続的にRedshiftにデータをアップロードしてくれるサービスです。

  • 面倒な連携設定をワンライナーで完結
  • 設定はWebのコンソールから可能
  • 取り急ぎRedshiftがどういうものかを試したい場合は1GBまで無料で使える

というような特徴があります。

実際にSign upからRedshiftへログをアップロードして集計するまでの手順を見ていきましょう。

ハンズオン

事前準備をする

Flydataを利用する前に、

  • ログの形式
  • サーバー上のログのフルパス
  • Redshift上のテーブル名とスキーマ

を決めておく必要があります。

ログ

Flydataがサポートしているログはcsv, tsv, json, apache_access_logになります。
今回はデータの並び順を気にしなくていいjsonを選択します。

アクセスログっぽいものとして、アプリからは以下のようなログを出力することにします。

key type
date 日時
method HTTPメソッド
path アクセスされたパス
ip アクセス元IPアドレス

パスは環境によって変わると思いますが、今回は /var/log/test.log とします。

テーブル名とスキーマ

Redshiftは事前にテーブル設計が必要です。ログ形式にあったスキーマを決めます。

1
2
3
4
5
6
CREATE TABLE test_log (
date timestamp not null sortkey,
method varchar(7),
path varchar(256),
ip varchar(15)
);

Flydataを使ってみる

まずはSign up

Flydata - startよりSign upします。

flydata start 2014-10-20 23-59-41

準備した情報を登録する

Dashboardへ移動し、New Data Entryを押して、準備したパス、テーブル名を設定します。

flydata data entries 2014-10-21 20-15-24

設定完了。

flydata data entries 2014-10-21 20-16-06

テーブルを作る

Access Redshiftへ移動し、スキーマをコピペしてテーブルを作ります。

flydata access redshift 2014-10-21 20-22-54

Runで作成完了。

flydata access redshift 2014-10-21 20-23-21

以上でFlydataの設定は完了です。

サーバーにクライアントをインストールする

Dashboardへ移動し、ページ最下部にあるInstall Commandをコピーして、サーバーで実行します。(sudo 可能なアカウントで実行して下さい)

flydata data entries 2014-10-21 00-35-10

1
2
3
4
5
6
7
8
9
10
11
12
$ bash <(curl -L https://console.flydata.com/i/xxxxxxxx)
Installing FlyData Agent. This will take several minutes to complete...
..............................
FlyData Agent has been installed on your computer.
However, you need to create at least a data entry before start using FlyData.
What's next?
1. Create a data entry from the dashboard (https://console.flydata.com/dashboard)
2. Reinstall FlyData Agent by running the install command on the dashboard

クライアントのインストール&セットアップはこれで終了です。

ログを出力してみる

アクセスされたら、決められたパスに決められた形式のjsonを吐き出す簡単なhttpサーバーをnode.jsで立ち上げてみます。

server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var http = require('http');
var fs = require('fs');
var stream = fs.createWriteStream(
'/var/log/test.log',
{flags: 'a', encoding: 'utf8'}
);
http.createServer(function(req, res) {
var log = {
date: new Date().toISOString(),
method: req.method,
path: req.url,
agent: req.headers['user-agent'],
ip: req.connection.remoteAddress
};
stream.write(JSON.stringify(log) + '\n');
var body = 'OK\n';
res.writeHead(200, {
'Content-Length': body.length,
'Content-Type': 'text/plain'
});
res.write(body);
res.end();
}).listen(3000);

起動

1
node ./server.js

curlでアクセスしてみる

1
2
curl localhost:3000
OK

ログが出力されているか確認してみる

1
2
cat /var/log/test.log
{"date":"2014-10-21T11:41:13.105Z","method":"GET","path":"/","agent":"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2","ip":"127.0.0.1"}

データ確認

Flydataコンソール

Redshiftへ取り込まれるまで少しタイムラグ(5分くらい)があるので、しばらく経ってからAccess RedshiftでSQLを叩いてログが保存されているか確認してみます。

flydata access redshift 2014-10-21 20-45-44

ログの内容が表示されればOKです。

psqlで

順番が前後しましたがTry Redshiftでチュートリアルを行うと、画面最下部にpsqlを利用した接続例が示されます。この通り、psqlコマンドを叩くとpsqlをクライアントにして直接SQLを叩くことができます。

flydata try flydata for amazon redshift 2014-10-22 00-40-19

1
2
3
4
5
6
7
8
9
10
11
12
PGPASSWORD=xxxxxxxxxxxx psql -U xxxxxxxxxx -h flydata-sandbox-cluster.x.us-east-1.xxxxxxxxxx.amazonaws.com -p xxxx -d xxxxxxxxxxxx
psql (8.4.20, サーバ 8.0.2)
注意: psql バージョン 8.4, サーババージョン 8.0.
psql の機能の中で、動作しないものがあるかもしれません。
SSL 接続 (暗号化方式: ECDHE-RSA-AES256-SHA, ビット長: 256)
"help" でヘルプを表示します.
xxxxxxxxxxxx> SELECT COUNT(*) FROM test_log;
count
-------
15
(1 行)

まとめ

以上の手順に従えば、5分でRedshiftをはじめられるでしょう。
実際はテラバイト・ペタバイト級のデータを高速に処理するといった目的で利用するツールですが、こんなに簡単に利用できることを知っていれば、新しい発見があると思います。

Tokyo Otaku Modeではビッグデータの解析、それを使ってデータドリブンでサービスの開発をしたいエンジニアも募集中です。興味のある方はこちらからご応募下さい。