ビッグデータ取扱いの技術① ~収集編~


ヒトクセではかなりのビックデータを取扱いしております。
そこで取扱いの流れというものを説明してきます。

基本的にRuby on Railsで構築していますが、一部以外は別の言語やフレームワークでも利用できます。

ざっくりとした流れは
 1. fluentdのインストール
 2. td-loggerでアプリケーションログの吐き出し
 3. td-loggerで受け取ったログをS3に送信
 4. S3のデータをHadoopで解析
 5. Hadoopで解析したデータをRDSに突っ込む

というような流れとなっております。

fluentdのインストール

これはいろんなところで書いてあるのであまり深くは書きませんが、
こんな感じでインストールします。

/etc/yum.repos.d/td.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
$ yum update
$ yum install td-agent


td-loggerでアプリケーションログの吐き出し

Gemfileにて

gem 'td-logger'

を追加しbundle install

ファイル

config/treasure_data.yml 
development:
  agent: localhost:24224
  tag: アプリケーション名
  debug_mode: true  # enable debug mode

production:
  agent: localhost:24224
  tag: アプリケーション名
  debug_mode: false
 
# disable logging
test:

を追加

取得したい場所に

TD.event.post('[タグの名前]', ハッシュ)

するとログでは

datetime アプリケーション名.タグの名前 json

みたいな感じです。具体的に入れると

TD.event.post('test', { hoge: :piyo })

アプリケーション名をmy_appとするとログは

2014-03-29T00:40:11+09:00   my_app.test {"hoge":"piyo"}

みたいな感じになります。

td-loggerで受け取ったログをS3に送信

次は

2014-03-29T00:40:11+09:00   my_app.test {"hoge":"piyo"}

こちらのログをS3に入れます。

設定ファイルに次の設定を追加します

/etc/td-agent/td-agent.conf
<match my_app.event>
  type s3
  aws_key_id AWSのキー
  aws_sec_key AWSのシークレットキー
  s3_bucket バケット名
  s3_endpoint S3のリージョン.amazonaws.com
  s3_object_key_format %{path}%{time_slice}_%{index}_%{hostname}.%{file_extension}
  path events/
  buffer_path /var/log/fluentd/events_s3
  time_slice_format %Y-%m-%d/%H
  time_slice_wait 10m 
</match>

これでオッケー。
あとはしばらく動かして、バケットの中身を見ると、gzip形式のファイルがどんどん溜まっていきます。
それをhadoopで処理します。

動いてないと思ったら

tail -f /var/log/td-agent/td-agent

などでログを見て行きましょう。

というわけで今回はここまで。
次回はhadoopで処理する方法を書いていきます。

・参考記事

fluentd+rails+mongoでサクッとログ環境を整備してみる-dev.log

ヒトクセの各種サービスお問い合わせは
こちらからお気軽にどうぞ。
お問い合わせフォーム