Go ahead!

Memoization for Everything

Release fluent-plugin-http-puma

| Comments

fluent-plugin-http-puma

標準で入っているin_httpとは違って,Pumaと呼ばれるWebサーバベースのHTTP(S)でのリクエストを受け付けるInputプラグイン書きました.

使い方

fluent-gemでインストール.

1
$ fluent-gem install fluent-plugin-http-puma

in_httpとほぼ同じように動きますが,独自でHTTPリクエストをパースしてないので,keepaliveやボディサイズチェック用のオプションはありません.その代わりPuma関係のオプションが増えてます(README参照).
一番の違いは,HTTPSをサポートしている所です.use_sslssl_keysを使うことで,HTTPSとして立ち上がります.

1
2
3
4
5
6
<source>
  type http_puma

  use_ssl
  ssl_keys ["/path/to/key", "/path/to/cert"]
</source>

パフォーマンス

手元のMBPで試して見たら,HTTPはin_httpより少し速かった.HTTPSは当たり前ですがガクッと落ちます.

クライアントはRubyのnet/httpを使って,小さめのjsonをapplication/jsonで送ってます.

  • in_http

平均2400 events/secくらい.

2014-07-20 19:02:30 +0900 [info]: plugin:out_flowcounter_simple count:2318      indicator:num   unit:second
2014-07-20 19:02:31 +0900 [info]: plugin:out_flowcounter_simple count:2420      indicator:num   unit:second
2014-07-20 19:02:32 +0900 [info]: plugin:out_flowcounter_simple count:2383      indicator:num   unit:second
2014-07-20 19:02:33 +0900 [info]: plugin:out_flowcounter_simple count:2399      indicator:num   unit:second
2014-07-20 19:02:34 +0900 [info]: plugin:out_flowcounter_simple count:2382      indicator:num   unit:second
  • in_http_puma

平均2500 events/secくらい.Ojを使ったらもっと速くなるかと思ったけど,ほぼ誤差の範囲だった.

2014-07-20 19:01:12 +0900 [info]: plugin:out_flowcounter_simple count:2472      indicator:num   unit:second
2014-07-20 19:01:13 +0900 [info]: plugin:out_flowcounter_simple count:2550      indicator:num   unit:second
2014-07-20 19:01:14 +0900 [info]: plugin:out_flowcounter_simple count:2294      indicator:num   unit:second
2014-07-20 19:01:15 +0900 [info]: plugin:out_flowcounter_simple count:2537      indicator:num   unit:second
2014-07-20 19:01:16 +0900 [info]: plugin:out_flowcounter_simple count:2538      indicator:num   unit:second
  • in_http_puma with VERIFY_NONE client

平均400 events/secくらい.けどVERIFY_NONEはほとんど本番では使われないので参考程度.

2014-07-20 19:04:06 +0900 [info]: plugin:out_flowcounter_simple count:406       indicator:num   unit:second
2014-07-20 19:04:07 +0900 [info]: plugin:out_flowcounter_simple count:365       indicator:num   unit:second
2014-07-20 19:04:08 +0900 [info]: plugin:out_flowcounter_simple count:400       indicator:num   unit:second
2014-07-20 19:04:09 +0900 [info]: plugin:out_flowcounter_simple count:399       indicator:num   unit:second
2014-07-20 19:04:10 +0900 [info]: plugin:out_flowcounter_simple count:400       indicator:num   unit:second
  • in_http_puma with VERIFY_PEER client

平均320 events/secくらい.高負荷環境で無ければ大丈夫かな…?

2014-07-20 19:05:18 +0900 [info]: plugin:out_flowcounter_simple count:329       indicator:num   unit:second
2014-07-20 19:05:19 +0900 [info]: plugin:out_flowcounter_simple count:327       indicator:num   unit:second
2014-07-20 19:05:20 +0900 [info]: plugin:out_flowcounter_simple count:327       indicator:num   unit:second
2014-07-20 19:05:21 +0900 [info]: plugin:out_flowcounter_simple count:325       indicator:num   unit:second
2014-07-20 19:05:22 +0900 [info]: plugin:out_flowcounter_simple count:326       indicator:num   unit:second

まとめ

モダンと言われるPumaってどんなもんなんだろう?と調べてたら,HTTPSを標準でサポートしてるし,ライブラリとしても簡単に使えそうだったので試して見たら,それなりにパフォーマンスが出たので公開してみたという感じです.
Pumaなので,今後FluentdがJRubyとかサポートしても普通にそのまま使えると思います.

実際HTTPSを処理するならFluentdの前にNginxとかを置いた方が良いのだけど,バックエンドでも通信はHTTPSでやってるとかなんか縛りがあるような環境では,手軽に使えるのではないかと思います.

何かあればissue/pull requestに投げてもらえれば対応します.

Prestoソースコードリーディング #4

| Comments

Presto ソースコードリーディング #4

いつものようにLINEでやりました!

@frsyukiが帰国する前に,という流れで開催決定・募集が1週間前というタイトなスケジュールでしたが, 無茶ぶりにつきあってくれた@ueshinさんに感謝.

当日の内容

togetterのまとめを見れば,なんとなく大まかな流れは把握できるはず…!

ueshinさんが第二回のashigeruさんの論理計画実行の後を継いで, 物理計画実行周りの話をしてくれました(資料のgist). バイトコード生成しての高速化の話とか,Presto以外でも有用な話が出てました.

frsyukiが現在のPrestoの開発体制の話,Treasure Dataでハックしている所の紹介, CREATE VIEWなどの実装がなぜこうなっているのか(これはfrsyuki案が通ったらしい), 今後Prestoチームがやろうとしていることなど含め,その場で色々と議論する感じになりました.

まとめ

少人数でソースコードレベルで興味のある人が集まっているのもあり,いつも通り濃い感じでした! partitionedの話とか,現在の実行モデルにおけるオペレータの実装の話とか, この辺を話すイベントはあんまりないんじゃないかなと思います.

次第5回をいつやるかは決まってませんが,いずれやる予定です.

またソースコードリーディングとは別に,Prestoのユースケースや, プロダクションで動かしている人の運用の話などを共有する, Presto meetupみたいなもう少し緩めのイベントもやる予定です.

お楽しみに :)

Release fluent-plugin-multi-format-parser

| Comments

fluent-plugin-multi-format-parser

一つのログファイルの中に複数のフォーマットがある時に利用可能なパーサプラグイン書きました.

使い方

fluent-gemでインストール.

1
$ fluent-gem install fluent-plugin-multi-format-parser

インストールすると,TextParserを利用しているin_tailin_udpなどでmulti_formatが使えるようになります. そこで<pattern>を複数並べてください.<pattern>内の各設定は,利用するパーサにそのまま渡されます.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<source>
  type udp
  tag logs.multi

  format multi_format
  <pattern>
    format apache
  </pattern>
  <pattern>
    format json
  </pattern>
  <pattern>
    format none
  </pattern>
</match>

<pattern>を上から順番に試し,パース出来たらその結果を返します.上の設定例だと,最初にapache,次にjson,最後にnoneになります. たとえば,以下のようなログ群をin_udpに流すと

192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777
{"k1":"v", "k2":123456}
foobar

以下のように処理されます.

2013-02-28 12:00:00 +0900 test.**: {"host":"192.168.0.1","user":"-","method":"GET","path":"/","code":"200","size":"777"}
2014-07-13 20:56:55 +0900 test.**: {"k":"v","k1":123456}
2014-07-13 20:56:55 +0900 test.**: {"message":"foobar"}

まとめ

ログファイルの中に複数のフォーマットが混じるのは望ましいことではないのですが,どうしてもそういう状況が起きるときには,使ってみてください.

あと,実装はかなり単純なので,パーサプラグインのサンプルにでもしてもらえればと思います.

何か要望があればissue/pull requestに投げてもらえれば対応します.

Release fluent-plugin-netflow

| Comments

fluent-plugin-netflow

CiscoのNetflowプロトコルを受け取るFluentdプラグインを書きました. 公開してみたら結構反応が良くて,地味にユーザが多そうですね…

経緯

Fluentdを調べていたユーザから「ログ収集基盤をFluentdベースにしたいんだけど,Netflowをパースするプラグインないの?」と言われたので, さくっと作ってみました.
「さくっと」と言ってもコアのパーサー部分はそのユーザが使っていたLogstashからポーティングしたやつなので,それなりにパース出来るはずです. Pull Requestのおかげもあり,対応templateも少し増えてます.

使い方

fluent-gemでインストールするだけです.

1
$ fluent-gem install fluent-plugin-netflow

その後,以下のように設定します.typeとtagは必須です.他のやつは適宜環境に合わせて設定してください.

1
2
3
4
5
6
7
8
9
10
11
12
13
<source>
  type netflow
  tag netflow.event

  # optional parameters
  bind 127.0.0.1
  port 9555

  # optional parser parameters
  cache_ttl 6000
  versions [5, 9]
  definitions /path/to/your_definitions.yml
</match>

今現在はin_syslogの影響もあってデフォルトポートが5140のままなのですが,0.1.0を出す時に変更する予定です.

TODO

  • 俺自身がNetflow関係のやつを持っていないので,使っている人,誰かメンテナになってください!実環境でのテストが出来ませんw
  • Fluentd v0.10.52が出たら,FluentdのSocketUtilベースで書き直して,0.1.0を出す

他,何か要望があればissue/pull requestをしてもらえれば対応します.

Fluentd v1 and Roadmapというプレゼンをしてきた

| Comments

Fluentd Meetup 新しい応用事例とv1に関する発表

フリークアウトさんのオフィスでFluentd Meetupがあり,Fluentdのv1について話してきました.

今回の発表は,今までのv11やv1に関してのまとめ的な発表になっています.
以下のリンク集を見れば,発表内容の大抵はカバー出来ると思います. また,他の方もまとめ記事とかを書かれているので,そちらも参照してください.

俺の方から言えることは,Fluentd v0.10.46以降を使っている方は, 積極的に--use-v1-configオプションを使ってくださいということです.
既存のフォーマットとの違いはドキュメントを参照してください.

td-agent2は今ビルド中で,今週末あたりにリリースしたいと思ってます(パッケージングツールをアップデートしたら色々と壊れて無駄に時間が…). それ以降はv1にリソースを割けるはずなので,フィルタやラベルなどを実装していく予定です.ご期待ください!

また,Treasure DataはFluentdの開発者含め人材を募集しているので, 興味のある方はぜひぜひコンタクトをしてもらえればと思います!

P.S.

フリークアウトさんのオフィスにある,バスケのゴールにダンク出来なかったのが悔しいので,足腰鍛え直す.