Fluentd update 2014


毎年恒例1年のまとめ記事です．2014年はFluentdの飛躍の年でもあったので，エコシステム周りも含め色々と紹介したいと思います．
2014年は0.10.43から始まり，v0.10の最新版は0.10.57，v0.12が開発版としてpre2までリリースされています．v0.12に関しては13日，v1を含めた来年の開発に関しては25日に書く予定です．

# Fluentd本体

すべてを列挙するのは難しいので，すべてを見たい方は[ChangeLog](https://github.com/fluent/fluentd/blob/v0.10/ChangeLog)を参照してください．ここでは特に運用やプラグイン周りで有用なものをピックアップします．

## プラグイン毎のlog_levelオプション (0.10.43)

グローバルなレベルとは別に，各プラグイン毎にログレベルを設定出来る機能です．詳細は以前書いた[Fluentdのロギング](http://qiita.com/repeatedly/items/691d2c33bfa06a0be781#2-1)を参照してください．

## sigdump (0.10.43)

[sigdump](https://github.com/frsyuki/sigdump)が同梱されるようになりました．シグナルを送ることで，スレッドの状態やメモリアロケーション周りの情報を出力してくれます．Fluentdのデバッグや，何か問題があった時の情報収集が楽に出来るようになりました．

## tail_exとtail_multilineのサポート (0.10.45)

Watchするファイルリストをパターンで動的に変更出来る[tail_ex](https://github.com/yosisa/fluent-plugin-tail-ex)，スタックトレースのような複数行のログを取り込める[tail_multiline](https://github.com/tomohisaota/fluent-plugin-tail-multiline)の二つを`in_tail`にマージしました．なので，もう現在のFluentdではこれらのプラグインを使う必要はありません．
現在二つのプラグインのために旧実装を残してありますが，v1への過程で削除する予定なので，まだ使っている方はin_tailへの移行をオススメします．

## phi計算のON/OFF (0.10.46)

Fluentdの`out_forward`プラグインはデフォルトでThe φ Accrual Failure Detectorというアルゴリズムを使っています．これはDC間などピアー間のネットワークに差があるような環境だと有用ですが，多くのユーザの環境では無駄に複雑でした．

```aconf
<match foo.**>
  type forward
  # ...
  phi_failure_detector false
</match>
```

上のように指定することで，φを使わずよりシンプルな死活判定を行うようになります．

## [v1フォーマット](http://docs.fluentd.org/articles/config-file#v1-format) (0.10.46)

v0.10でデフォルトで使われている行指向のフォーマットではなく，ちゃんと複数行にも対応し，いくつかの便利な記法も追加したv1フォーマットが入りました．文字列の中に`#`がおけたり，`"#{}"`を使うことでRubyのコードが埋め込めたりします．
`--use-v1-config`を渡すことで使うことが出来ます．td-agent 2ではデフォルトでこのフォーマットを利用します．

## [Parserプラグイン](http://docs.fluentd.org/articles/parser-plugin-overview) (0.10.46)

`in_tail`や`in_http`で使っているパーサがプラガブルになりました．もし指定したフォーマットが見つからない場合，例えば`format xxx`と指定した場合には，`fluent/plugin/parser_xxx.rb`というファイル名を探索してロードします．
この辺は3日目に詳しく書かれる予定です．

## [Formatterプラグイン](http://docs.fluentd.org/articles/formatter-plugin-overview) (0.10.49)

`out_file`や`out_s3`プラグインの出力フォーマットもプラガブルにしました．Parserプラグインと似たような感じで，もし指定されたフォーマットがなければ，`fluent/plugin/formatter_xxx.rb`を探索してロードします．

## [\<system>ディレクティブ](http://docs.fluentd.org/articles/config-file#4-set-system-wide-configuration-the-ldquosystemrdquo-directive) (v0.10.51)

Fluentdのコマンドラインオプションで渡せるいくつかの設定を，設定ファイルでも書けるようにしました．出来ることは一緒ですが，コマンドライン弄るより設定ファイルの方が変更しやすいとは思います．

```aconf
<system>
  log_level warn # -qオプションと同等
</system>
```

## timezoneサポート (0.10.56)

時間を変換するプラグインで，timezoneを指定出来るようになりました．[かなり議論が長引いたのですが](https://github.com/fluent/fluentd/pull/430)，色々な方のアドバイスもあり入りました．

* [+–]HH:MM (e.g. “+09:00”)
* [+–]HHMM (e.g. “+0900”)
* [+–]HH (e.g. “+09”)
* Region/Zone (e.g. “Asia/Tokyo”)
* Region/Zone/Zone (e.g. “America/Argentina/Buenos_Aires”)

上記のフォーマットがサポートされてます．

```aconf
<match file.**>
  type file
  # ....
  timezone +09:00
</match>
```

## --no-supervisorオプション (v0.10.57)

Fluentdは起動時にSupervisorが立ち上がり，それがWorkerを立ち上げるという2プロセス構成になっています．これはrunitなど別のSupervisorツールを使っている場合にSupervisorが2つ立ち上がることになり，予期しない動きをすることがありました．
`--no-supervisor`オプションを渡すことで，Fluentd側のSupervisorが立ち上がらなくなります．

# エコシステム

## td-agent 2

td-agentの次のバージョンです．同梱されているRubyのバージョンが上がったり，サポートしている環境が増えてたり，色々と改善がされています．問題がなければこちらがオススメです．詳しくは以下の記事を参照してください．

[Treasure Agent(td-agent)の1と2の今後](http://qiita.com/repeatedly/items/c8107bc8ba5ba01133f8)

## [Fluentd UI](https://github.com/fluent/fluentd-ui)

Fluentdのセットアップ・状態チェックをWebブラウザを使って簡単にできるようにするソフトウェアです．注意事項として，これはHaikankoなどのようにクラスタを管理したりするためのものではないです．Fluentdの導入の敷居を下げるのが第一目的です．
日々改善されており，プラグインの管理など，どんどんやりやすくなっています．

[Fluentd-UI: Managing Fluentd from a Browser](http://www.fluentd.org/blog/fluentd-admin-ui) (公式のアナウンス記事)

## [Fluentd Forwarder](https://github.com/fluent/fluentd-forwarder)

Fluentdにデータを転送するためのエージェントです．Fluentdの置き換えではなく，Fluentdに転送するのがメインです．Go言語で書かれており，Windowsでもちゃんと動くようになっています．
まだ機能が色々と足りないですが，今後パフォーマンス含め改善していく予定です．類似ソフトウェアにfluent-agent-lite，fluent-agent-hydra，ikなどがあります．

[Fluentd Goes Gopher!](http://www.fluentd.org/blog/fluentd-goes-gopher) (公式のアナウンス記事)

## [Norikra](http://norikra.github.io/)

NorikraはCEPエンジンで，今年v1.0がリリースされました．Fluentdと連携するユースケースが多く，Fluentdに流れているログのストリームに対してSQLで処理を書くことが出来ます．
自分でいちいちストリーム処理用のコードを書かなくても，SQLを書くことで簡単に速報値などを出せます．その結果をFluentdで取得も出来るので，そのまま外部サービスに投げ，可視化やアラートに使うことが出来ます．なかなかお手軽なCEPエンジンはなかったのですが，Fluentdを使っていればNorikraは簡単に導入できるのが良いところです．

# 最後に

issueやPRを上げてくれた人，記事を書いてくれた人，イベントなどに参加してくれた人，皆さんありがとうございました！今後もよろしくお願いします :)

今年は世界的にユーザが増えているのが体感出来た年でした．[Googleのk8sやCloud Loggingで採用された](http://qiita.com/kazunori279/items/8554cb8eccef05d2d4e5)のは大きかったですし，Bloombergのプライベートクラウドなどでも利用されています．
RubyConfであったエンジニアの人が実は某会社の人ですでに導入していたりと，公にはなってないですが"実は導入していた"事例みたいなのもが結構耳に入ってくるようになりました．最初のハードルは越えた感がありますが，今後は海外でも「まずFluentd」となるよう努めて行きたい所です．

最近は「Fluentdは安定しすぎていて，仕事がなくて困る」と言われることもあるので，もっと別の刺激を提供して行けたらと思っている所です．