FluentBit/Fluentd@テレメトリー収集ツール¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. FluentBit/Fluentdの仕組み¶
アーキテクチャ¶
FluentBit/Fluentdは、インプットフェーズ、バッファーフェーズ、アウトプットレイヤー、から構成される。
アプリケーションからログを収集し、これをフィルタリングした後、複数の宛先にルーティングする。
プッシュ型で収集されたログはまずインプットされる。
メモリやファイルをバッファーとして使用でき、ログはチャンクとしてステージに蓄えられる。
ステージに一定サイズのチャンクが蓄えられるか、または一定時間が経過すると、チャンクはキューに格納される。
キューは、指定された宛先にログを順番にルーティングする。
プロセスが再起動されると、特にメモリのバッファー上に蓄えられたログは破棄されるため、ログ損失が起こってしまう。
補足として、AWS Kinesis Data Firehoseも似たようなバッファリングとルーティングの仕組みを持っている。
- https://atmarkit.itmedia.co.jp/ait/articles/1402/06/news007.html
- https://zenn.dev/taisho6339/articles/eff38b47cbdbcb#(2)-%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%81%95%E3%82%8C%E3%81%9F%E6%9C%AA%E9%80%81%E4%BF%A1%E3%81%AE%E3%83%AD%E3%82%B0%E3%81%AE%E6%90%8D%E5%A4%B1%E3%82%92%E9%98%B2%E3%81%90
- https://docs.fluentbit.io/manual/about/fluentd-and-fluent-bit
バッファーの構造¶
バッファーは、ステージ、キュー、といったコンポーネントから構成される。ログは、『*-*.*.flb
』という名前のチャンクとして扱われ、メモリやファイル上に保管される。
複数のログパイプラインの集約¶
複数のFluentBitを稼働させる場合、アウトプット先がそれぞれのログパイプラインを受信しても良いが、ダウンストリームにメッセージキューを配置しても良い。
メッセージキューを配置することにより、ログパイプラインが乱雑せずに集約できるようになる。
またメッセージキューによって、アウトプット先のレートリミットを超過しないように、一定の間隔でログを送信できる。
機能比較¶
FluentBit | Fluentd | |
---|---|---|
スコープ | 組み込みLinux/仮想環境 | 仮想環境 |
言語 | NS | C & Ruby |
メモリ最大サイズ | 650 KB |
40 MB |
依存関係 | 標準プラグインではパッケージに依存しない。 | 標準プラグインで一定数のRuby gemに依存する。 |
性能 | 高 | 高 |
プラグイン数 | 70 個 |
1000 個以上 |
02. デザインパターンの種類¶
エージェントパターン¶
▼ エージェントパターンとは¶
エージェントパターンは、エージェントコンポーネントから構成される。
ログの送信元では、エージェント(FluentBit/Fluentd) が常駐し、ログを収集する。
さらに、エージェントはログを監視バックエンドに送信する。
▼ エージェントパターンの実装例¶
エージェントは、デーモンプロセス、サイドカー、DaemonSetなどで実装する。
- FluentBit/Fluentdプロセスをサーバーで、プロセスとして直接的に常駐させる。
- KubernetesのPod内のサイドカーとして配置する。
- KubernetesのDaemonSet配下のPodとして常駐させる。
▼ DaemonSetパターンとPod内サイドカーパターンの比較¶
項目 | Pod内サイドカーパターン | DaemonSetパターン |
---|---|---|
Nodeのハードウェアリソース消費量が少ない | × | ⭕️ |
Nodeのストレージ使用量が少ない | ⭕️ | △ |
FluentBit/Fluentdの冗長性が高い | ⭕️️ | △ |
アプリごとの設定カスタマイズ度が高い | ⭕️ | △ |
単純性が高い | × | ⭕️ |
フォワーダーアグリゲーターパターン¶
▼ フォワーダーアグリゲーターパターンとは¶
フォワーダーアグリゲーターパターンは、フォワーダー、アグリゲーター、といったコンポーネントから構成される。
ログの送信元では、フォワーダー (FluentBit/Fluentd) はL7
ロードバランサーを介してログを収集する。
さらに、フォワーダーは別のFluentBit/Fluentd (アグリゲーター) にログを送信する。
アグリゲーターはログを集約し、監視バックエンドにログを送信する。
▼ アグリゲーターパターンの実装例¶
L7
ロードバランサーはIngressコントローラー、アグリゲーターはDeploymentなどで実装できる。