表題のとおり、fluentd / fluent-bitのoutput forwardを受信するC#のサーバライブラリを、
nugetにリリースしました。
(FluentNetting)
https://www.nuget.org/packages/FluentNetting/
これは、javaで作られているinfluentというライブラリをC#に移植したような感じのものです。
(influent)
https://github.com/okumin/influent
※私が作ったのではありません。すばらしいライブラリです。
で、FluentNettingでは、fluentdのv1プロトコルがサポートする4つのmodeに対応しつつ、
hostname / shared_key による認証までを対応しました。
さらにいうと、fluent-bitもテスト済みでございます。
このFluentNettingを使うといいことは、「遅延処理が自由自在」ということです。
アプリケーション → fluend / fluent-bit → FluentNettingを使った受信サーバ
のようにして、fluentd / fluent-bit でバッファリングしておけば特に良いのかなと思います。
メッセージキューイング系を使うのと同じじゃね?と思うかもしれませんが、
fluend / fluent-bit はアプリケーションと同一ホスト(k8sならサイドカー)にする形が多いので、
アプリケーションからの書き込みタイムが少なくできる利点があります。
プラグイン使えば良くない?と思うかもしれませんが、
プラグインはメンテナンスされていないものもあり、
場合によってはアプリケーションエンジニアが柔軟に変更するのが難しいケースがあります。
という事情を踏まえると、
fluentd / fluent-bit は forwardさえやればよく(設定が簡単)、
プラグインに悩まされずにデータを処理できる、
という利点があるのかと感じています。
各言語の対応ライブラリですが、基本的には公式が出しているものを使えば利用できます。
(fluentdのライブラリ)
https://docs.fluentd.org/language-bindings
ただし、確認した限りでは、PHPのライブラリはパーサがデフォルトJSONになっているので、
msgpackに変更する必要があります。
C#については、
(FluentdClient.Sharp)
https://www.nuget.org/packages/FluentdClient.Sharp/
というものがあるのですが、EventTimeがdouble型になっているようで、
fluent-bitではエラーとなってしまうようです。(fluentdでは大丈夫のようです)
各言語とFluentNettingの対応状況は後々確認していこうとおもいます。
最後になりましたが、今回ArmadaSuitさんにパーサ部分に尽力いただきました。
彼のおかげで、今回リリースまでこぎつけられました。感謝です。
その彼が、C#のクライアントライブラリを作成してくれているので、
近々nugetにアップされるのではないかと期待しています。
以上