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に投げてもらえれば対応します.

Comments