y-ken / fluent-plugin-twitter

Fluentd Input/Output plugin to process tweets with Twitter Streaming API.
https://rubygems.org/gems/fluent-plugin-twitter
Other
53 stars 27 forks source link

raw jsonを入力できるようオプションを追加してみました #1

Closed yuiseki closed 11 years ago

yuiseki commented 11 years ago

はじめまして、yuisekiといいます。

fluentdで色々データを収集・調査してみようと思い、手軽に使えるものとしてfluent-plugin-twitterを便利に使わせて頂いています。

今回、twitter streaming apiから送られてくる生のJSONの値すべてを保存したいと思ったので、オプションのフラグで切り替えられるようにしてみました。

また、:langのフィルタリングに関して、ひとつも指定がなかった場合はすべての言語で遮断されていたのですが、すべての言語をスルーして入力するように変更しています。

もしよかったらマージして頂ければと思います。よろしくお願いします。

y-ken commented 11 years ago

大変ありがとうございます。langフィルタに関する不具合、すみませんでした。 早速マージを行い、動作確認の後にリリースしたいと思います。

y-ken commented 11 years ago

将来、その他の出力方式にも対応出来るよう、formatオプションの新設を検討しています。 その形での取り込みを検討しているのですが、特に支障はございませんでしょうか。 もし可能であれば、この機会にご意見頂けると幸いです。

format例

raw・・・今回のraw_jsonオプションを意味する設定 compact・・・現在のデフォルト設定 stot・・・将来追加するSTOT(Share Twitter On Tumblr)形式 http://toshia.github.com/writing-mikutter-plugin/#sec-5

設定例

<source>
  type twitter
  consumer_key        YOUR_CONSUMER_KEY
  consumer_secret     YOUR_CONSUMER_SECRET
  oauth_token         YOUR_OAUTH_TOKEN
  oauth_token_secret  YOUR_OAUTH_TOKEN_SECRET
  tag                 input.twitter.sampling
  timeline            sampling
  keyword             Ruby,Python
  format              json
</source>
yuiseki commented 11 years ago

おお、formatオプションで色々と出力を切り替えられる方式にするというアイデア、いいですね。 この形で取り込んで頂いて問題ありません。 STOTという名前は初めて知りましたが、たしかにtumblrなどで見かけた事があります。

y-ken commented 11 years ago

早速のご確認ありがとうございます。 それでは、formatオプションで実装します。 値が何になるかはまだ何とも言えませんが、決まり次第こちらに書き込みます。

y-ken commented 11 years ago

作業途中ですが、大枠が出来たのでpushしました。 https://github.com/y-ken/fluent-plugin-twitter/commit/7f1f9013f030bd6e24588a56248fabdab78082e9 以下、ご確認お願いできますでしょうか。

yuiseki commented 11 years ago

作業お疲れ様です、確認しました。

基本的にon_anythingを使うように変更されたのですね。 全体的にわかりやすく、拡張しやすい形になっていてgoodだと思います!

EMのエラーは、fluentdとTweetstream gemがたまたまおなじEMという定数名で双方でEventMachineを初期化しているのが問題だと思うのですが、plugin側からだと対処できなさそうですね…。 他のpluginでもEMという定数名でEventMachineを初期化しているgemを呼び出したらおなじ問題が起こりそうな気がします。

y-ken commented 11 years ago

お返事頂きありがとうございます。 format にnest(raw_json), flat(添え字を_区切りで入れ子展開), simple(後方互換用)というパラメータを用意する実装で落ち着きつつあります。 READMEの整備を行った後にgemとしてリリース予定です。しばしお待ち頂けると幸いです。 なお、先ほど追加しましたformat flatは地味にオススメです。入れ子構造がシンプルになるだけでなく、 2次元配列に対応していないFluentdプラグインとの連携が可能となることがメリットです。 https://github.com/y-ken/fluent-plugin-twitter/blob/master/lib/fluent/plugin/in_twitter.rb

そしてEMのエラー、ご教示頂きありがとうございます。これは根が深そうですね。 grepすると、以下2つのgemでバッティングしていることが分かりました。 前者(eventmachine)がTweetStreamが利用する物で、後者(cool.io)がFluentdで利用している物です。 overrideする事で回避出来るか確認してみたいと思います。

$ sudo fgrep -r -n "EM = EventMachine" /usr/lib64/fluent/
/usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.3/lib/eventmachine.rb:1535:EM = EventMachine
/usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/cool.io-1.1.0/lib/cool.io/eventmachine.rb:234:EM = EventMachine
y-ken commented 11 years ago

このたびは本当にありがとうございました。 より分かりやすい output_format というオプション名とし、v0.2.1をリリースしました。 https://github.com/y-ken/fluent-plugin-twitter/tree/v0.2.1

同時に、紹介頂いたQiitaの記事にREADMEからリンクさせて頂きました。 もし不都合ありましたら調整行いますので、お知らせ頂けますでしょうか。 また、大変お手数掛けますが、今回の内容に合わせて、Qiitaの記事を微調整頂けると幸いです。

- raw_json            true
+ output_format       flat

※ datacounter等のプラグイン親和性を考慮し、ここはnestではなくflatというのはいかがでしょうか。