メタプログラミングruby勉強会#7(fluentプラグイン)

11
メメメメメメメメメ Ruby メメメ #7 fluent メメメメメメ2013/10/27 @aegif

Upload: ashitaba-yoshioka

Post on 28-Jun-2015

500 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: メタプログラミングRuby勉強会#7(fluentプラグイン)

メタプログラミング Ruby勉強会 #7( fluentのプラグイン)

2013/10/27@aegif

Page 2: メタプログラミングRuby勉強会#7(fluentプラグイン)

テーマ

fluentのプラグインを少し見ていじってみる

2

Page 3: メタプログラミングRuby勉強会#7(fluentプラグイン)

対象のプラグイン

Amazon S3 output plugin

3

Page 4: メタプログラミングRuby勉強会#7(fluentプラグイン)

• 現在出力内容のログレコード部分が JSONになるのをタブ区切りにしたい

どう変更する?

4

# 変更前2013-10-27T07:40:41Z s3.apache.access {"host":"::1","user":null,"method":"GET","path":"/","code":200,"size":44,"referer":null,"agent":null,"tag":"s3.apache.access","time":"2013-10-27T07:40:41Z"}2013-10-27T07:40:41Z s3.apache.access {"host":"::1","user":null,"method":"GET","path":"/","code":200,"size":44,"referer":null,"agent":null,"tag":"s3.apache.access","time":"2013-10-27T07:40:41Z"}

# 変更後200 ::1 GET / 44 s3.apache.access 2013-10-27T07:50:47Z 200 ::1 GET / 44 s3.apache.access 2013-10-27T07:50:47Z 200 ::1 GET / 44 s3.apache.access 2013-10-27T07:50:47Z

Page 5: メタプログラミングRuby勉強会#7(fluentプラグイン)

元のリポジトリを clone• $ git clone [email protected]:fluent/fluent-plugin-s3.git

5

Page 6: メタプログラミングRuby勉強会#7(fluentプラグイン)

プラグイン用ディレクトリへコピー• $ cp ./fluent-plugin-s3/lib/fluent/plugin/out_s3.rb \

/etc/fluent/plugin/out_s3yoshio.rb • あとは, out_s3yoshio.rbを少し変更すればよい

6

プラグインを動作させる方法の例・ /etc/fluent/plugin/に rubyスクリプトを置く・ lib/fluent/plugin/<TYPE>_<NAME>.rbを持つ Gemを作ってインストール

Page 7: メタプログラミングRuby勉強会#7(fluentプラグイン)

diff• 変更したもの( out_s3yoshio.rb)とオリジナル( out_s3.rb)の diff

7

6c6< Fluent::Plugin.register_output('s3yoshio', self)---> Fluent::Plugin.register_output('s3', self)38d37< config_param :out_format, :string, :default => 'tab'51c50,54< @out_format = conf['out_format']---> if format_json = conf['format_json']> @format_json = true> else> @format_json = false> end110c113< if @include_time_key---> if @include_time_key || !@format_json

Page 8: メタプログラミングRuby勉強会#7(fluentプラグイン)

diff(続き)• 変更したのはパラメータ指定, configureメソッドおよび formatメソッドを少々

8

122,123c125< case @out_format< when 'json'---> if @format_json125,126d126< when 'csv'< record.keys.sort.map {|k| record[k] }.join(",") + "\n"128c128< record.keys.sort.map {|k| record[k] }.join("\t") + "\n"---> "#{time_str}\t#{tag}\t#{Yajl.dump(record)}\n"

Page 9: メタプログラミングRuby勉強会#7(fluentプラグイン)

所感

簡単に書ける。自分用の Redshiftプラグインも多分簡単に書け

9

Page 11: メタプログラミングRuby勉強会#7(fluentプラグイン)

おわり

11