Fluentdを使ってTwitter Public streamsをAmazon S3に保存する


Twitter Public streamsに対して分析を行いたいと思っても、ウェブ上にDumpを公開するのはNGとされており必要なら自分で収集する必要があります。
以前は自作のPythonスクリプトを常時実行していたのですが、雑過ぎてプロセスが死ぬことが多発することとローカルのディスクに溜め込み続けていたためディスクが逼迫してしまう問題が発生。
この辺ちゃんと作り込めばいいんでしょうが、FluentdにはPublic streamsにもAmazon S3にもアクセスできるプラグインが用意されていたのでそれを使って全自動で収集し続けられるように設定してみました。

※手順はかなり昔に設定した内容を思い出しながら書いているので抜け漏れあるかもしれません。。その時はご指摘お願いします

インストール

今回はCentOS 7にインストールして動かしてみました。

#curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
#sudo /etc/init.d/td-agent start
#sudo /etc/init.d/td-agent status

プラグインのインストール

TwitterとAmazon S3へのアクセスのためのプラグインをインストールします。

#sudo td-agent-gem install fluent-plugin-twitter
#sudo /usr/sbin/td-agent-gem install fluent-plugin-s3

td-agent.confの設定

設定をtd-agent.confの行末に追加

/etc/td-agent/td-agent.conf
<source>
  type twitter
  consumer_key xxxxxxxxxxxxxxxxxxxxxxxxxxx
  consumer_secret xxxxxxxxxxxxxxxxxxxxxxxxxxx
  oauth_token xxxxxxxxxxxxxxxxxxxxxxxxxxx
  oauth_token_secret xxxxxxxxxxxxxxxxxxxxxxxxxxx

  tag input.twitter.sampling
  timeline sampling
  lang ja
  output_format nest
</source>

<match input.twitter.sampling>
  type copy

  <store>
    type s3
    aws_key_id xxxxxxxxxxxxxxxxxxxxxxxxxxx
    aws_sec_key xxxxxxxxxxxxxxxxxxxxxxxxxxx
    s3_bucket hogehoge
    s3_region ap-northeast-1
    s3_enpoint s3-ap-northeast-1.amazonaws.com
    path streaming_api_logs/
    buffer_path /var/log/td-agent/s3

    time_slice_format %Y%m%d%H
    s3_object_key_format %{path}%{time_slice}_%{index}_%{hostname}.%{file_extension}
    time_slice_wait 5m
    buffer_chunk_limit 256M

    utc
  </store>
</match>

事前にTwitterとAWSのAPIは取得しておきます。
日本リージョンにバケットを作成し、バケットにAPIからアクセスの許可をしておくことが事前に必要です。

動作結果

うまく動作すると1時間おきにAmazon S3にgz圧縮されたファイルが転送されます。
時々ファイル名が_1のものが作成されますが、圧縮前のファイルサイスが256MBを超えた場合自動で連番にしてくれるようです。

データは溜め込めたんですが、これからどうやって活用していくかはこれから考えます

参考

こちらを参考にいたしました。
ありがとうございます。

fluentd インストール