毎年恒例1年のまとめ記事です.2014年はFluentdの飛躍の年でもあったので,エコシステム周りも含め色々と紹介したいと思います.
2014年は0.10.43から始まり,v0.10の最新版は0.10.57,v0.12が開発版としてpre2までリリースされています.v0.12に関しては13日,v1を含めた来年の開発に関しては25日に書く予定です.
Fluentd本体
すべてを列挙するのは難しいので,すべてを見たい方はChangeLogを参照してください.ここでは特に運用やプラグイン周りで有用なものをピックアップします.
プラグイン毎のlog_levelオプション (0.10.43)
グローバルなレベルとは別に,各プラグイン毎にログレベルを設定出来る機能です.詳細は以前書いたFluentdのロギングを参照してください.
sigdump (0.10.43)
sigdumpが同梱されるようになりました.シグナルを送ることで,スレッドの状態やメモリアロケーション周りの情報を出力してくれます.Fluentdのデバッグや,何か問題があった時の情報収集が楽に出来るようになりました.
tail_exとtail_multilineのサポート (0.10.45)
Watchするファイルリストをパターンで動的に変更出来るtail_ex,スタックトレースのような複数行のログを取り込めるtail_multilineの二つをin_tail
にマージしました.なので,もう現在のFluentdではこれらのプラグインを使う必要はありません.
現在二つのプラグインのために旧実装を残してありますが,v1への過程で削除する予定なので,まだ使っている方はin_tailへの移行をオススメします.
phi計算のON/OFF (0.10.46)
Fluentdのout_forward
プラグインはデフォルトでThe φ Accrual Failure Detectorというアルゴリズムを使っています.これはDC間などピアー間のネットワークに差があるような環境だと有用ですが,多くのユーザの環境では無駄に複雑でした.
<match foo.**>
type forward
# ...
phi_failure_detector false
</match>
上のように指定することで,φを使わずよりシンプルな死活判定を行うようになります.
v1フォーマット (0.10.46)
v0.10でデフォルトで使われている行指向のフォーマットではなく,ちゃんと複数行にも対応し,いくつかの便利な記法も追加したv1フォーマットが入りました.文字列の中に#
がおけたり,"#{}"
を使うことでRubyのコードが埋め込めたりします.
--use-v1-config
を渡すことで使うことが出来ます.td-agent 2ではデフォルトでこのフォーマットを利用します.
Parserプラグイン (0.10.46)
in_tail
やin_http
で使っているパーサがプラガブルになりました.もし指定したフォーマットが見つからない場合,例えばformat xxx
と指定した場合には,fluent/plugin/parser_xxx.rb
というファイル名を探索してロードします.
この辺は3日目に詳しく書かれる予定です.
Formatterプラグイン (0.10.49)
out_file
やout_s3
プラグインの出力フォーマットもプラガブルにしました.Parserプラグインと似たような感じで,もし指定されたフォーマットがなければ,fluent/plugin/formatter_xxx.rb
を探索してロードします.
<system>ディレクティブ (v0.10.51)
Fluentdのコマンドラインオプションで渡せるいくつかの設定を,設定ファイルでも書けるようにしました.出来ることは一緒ですが,コマンドライン弄るより設定ファイルの方が変更しやすいとは思います.
<system>
log_level warn # -qオプションと同等
</system>
timezoneサポート (0.10.56)
時間を変換するプラグインで,timezoneを指定出来るようになりました.かなり議論が長引いたのですが,色々な方のアドバイスもあり入りました.
- [+–]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”)
上記のフォーマットがサポートされてます.
<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の今後
Fluentd UI
Fluentdのセットアップ・状態チェックをWebブラウザを使って簡単にできるようにするソフトウェアです.注意事項として,これはHaikankoなどのようにクラスタを管理したりするためのものではないです.Fluentdの導入の敷居を下げるのが第一目的です.
日々改善されており,プラグインの管理など,どんどんやりやすくなっています.
Fluentd-UI: Managing Fluentd from a Browser (公式のアナウンス記事)
Fluentd Forwarder
Fluentdにデータを転送するためのエージェントです.Fluentdの置き換えではなく,Fluentdに転送するのがメインです.Go言語で書かれており,Windowsでもちゃんと動くようになっています.
まだ機能が色々と足りないですが,今後パフォーマンス含め改善していく予定です.類似ソフトウェアにfluent-agent-lite,fluent-agent-hydra,ikなどがあります.
Fluentd Goes Gopher! (公式のアナウンス記事)
Norikra
NorikraはCEPエンジンで,今年v1.0がリリースされました.Fluentdと連携するユースケースが多く,Fluentdに流れているログのストリームに対してSQLで処理を書くことが出来ます.
自分でいちいちストリーム処理用のコードを書かなくても,SQLを書くことで簡単に速報値などを出せます.その結果をFluentdで取得も出来るので,そのまま外部サービスに投げ,可視化やアラートに使うことが出来ます.なかなかお手軽なCEPエンジンはなかったのですが,Fluentdを使っていればNorikraは簡単に導入できるのが良いところです.
最後に
issueやPRを上げてくれた人,記事を書いてくれた人,イベントなどに参加してくれた人,皆さんありがとうございました!今後もよろしくお願いします :)
今年は世界的にユーザが増えているのが体感出来た年でした.Googleのk8sやCloud Loggingで採用されたのは大きかったですし,Bloombergのプライベートクラウドなどでも利用されています.
RubyConfであったエンジニアの人が実は某会社の人ですでに導入していたりと,公にはなってないですが"実は導入していた"事例みたいなのもが結構耳に入ってくるようになりました.最初のハードルは越えた感がありますが,今後は海外でも「まずFluentd」となるよう努めて行きたい所です.
最近は「Fluentdは安定しすぎていて,仕事がなくて困る」と言われることもあるので,もっと別の刺激を提供して行けたらと思っている所です.