Fluentd v1.14.5リリース -- ndjson形式対応と細かな動作改善 - 2022-02-09 - ククログ

ククログ

株式会社クリアコード > ククログ > Fluentd v1.14.5リリース -- ndjson形式対応と細かな動作改善

Fluentd v1.14.5リリース -- ndjson形式対応と細かな動作改善

2022年2月9日にFluentdの最新版となるv1.14.5をリリースしました。

クリアコードはFluentdの開発に参加し、リリースを含めたメンテナンス作業を行っています。

今回はv1.14.5のリリースについて、主なポイントを紹介します。

Fluentd v1.14.5の最新動向

in_http "application/x-ndjson"のContent-Typeに対応しました

Content-Typeがapplication/x-ndjsonのデータは、ndjson1と呼ばれる形式で構成されます。 まだ統一された仕様ではないようですが、基本的には改行区切り(\n区切り)でJSONオブジェクトが並ぶデータと考えて問題ありません2

例えば以下のようなデータです。

{"foo": "bar"}
{"buz": "hoge"}

JSONを配列で送る場合と比べ、配列の終了を待たずに1オブジェクトずつ受信できるため、ストリーミングによく用いられる形式です。

以前からout_httpプラグインでは、JSONはデフォルトで3このndjsonとして処理されていました。

今回in_httpプラグインにおいてもこの形式を受信できるようになりました。 特に設定は必要なく、Content-Typeが"application/x-ndjson"であれば自動で処理を行ってくれます。

out_forward TLSによる転送時に、通信が正常にタイムアウトしないことのある問題を修正しました

out_forwardプラグインにおいては、予期せぬ障害発生時に通信がハングアップするのを防ぐため、connect_timeoutを設定することができます4

しかし、TLSによる転送を行う5場合に、connect_timeoutを設定してもタイムアウトせず、通信がハングアップする現象が報告されていました。

今回のバージョンで、TLSによる転送時のタイムアウトの判定処理が見直され、connect_timeoutが確実に反映され、ハングアップを防止できるようになりました。

RubyInstaller 3.1に対応しました

Windows向けのRubyインストーラーとして、RubyInstallerがあります。

2021年12月31日にRubyInstallerの新しいバージョン3.1.0-1がリリースされ6、CランタイムがUCRTへ変わり、Rubyのプラットフォームもx64-mingw-ucrtへ変わりました。

Fluentdもこの環境向けのバイナリを提供する必要があり、本リリースから対応するようになりました7

その他

  • retry_max_times0に設定されている場合、1度リトライが発生してしまう問題を修正しました。
  • RubyInstaller 3.1に対応するため、依存gemであるServerEngineの必要バージョンをv2.2.5以降に引き上げました。
  • ログに不正な文字が含まれていた場合の処理が改善しました。 詳細はIssue#3595を参照ください。

まとめ

今回の記事では、Fluentd v1.14.5について最新情報をお届けしました。

最新版を使ってみて、何か気になる点があればぜひGitHubで開発チームまでフィードバックをお寄せください!

  1. newline delimited JSONの略です。

  2. \r\nも、\n区切りと考えて問題なく扱うことができます。

  3. json_array設定をtrueに設定しなければ、ndjson形式になります: https://docs.fluentd.org/output/http#json_array

  4. https://docs.fluentd.org/output/forward#connect_timeout

  5. https://docs.fluentd.org/output/forward#how-to-connect-to-a-tls-ssl-enabled-server

  6. https://rubyinstaller.org/2021/12/31/rubyinstaller-3.1.0-1-released.html

  7. Fluentd v1.14.4も対応していますが、それより前のバージョンでは、Windowsに必要な依存gemがインストールされないという問題が発生します。