Skip to main content
Fluent Bit は、SambaStack のモニタリングリファレンスアーキテクチャで使用される、軽量なログプロセッサー兼ログフォワーダー (log forwarder) です。Kubernetes ノードからコンテナログを収集し、メタデータで拡充した上で、インデックス化と検索のために OpenSearch に送信します。
リファレンスアーキテクチャに関する注意: このセットアップではサードパーティ製コンポーネントを使用しています。バージョン、デフォルト値、コマンド構文は変更される可能性があります。SambaStack に固有でない問題については、該当コンポーネントを所有するベンダーまたはプロジェクトにお問い合わせください。

前提条件

Fluent Bit をデプロイする前に、以下の環境を準備してください。
  • Kubernetes クラスター – SambaStack がインストール済みの稼働中クラスター
  • OpenSearch – monitoring 名前空間にデプロイ済みであること。詳細は ログストレージ - OpenSearch をご参照ください
  • OpenSearch の管理者パスワード – OpenSearch のデプロイ時に設定したパスワード
  • Helm(最新バージョン) – Fluent Bit チャートのデプロイに使用
  • kubectl – 対象の Kubernetes クラスターへのアクセスが設定済みであること
Fluent Bit には、稼働中の OpenSearch インスタンスが必要です。先に OpenSearch のデプロイ を完了してください。

リソース要件

以下は、Fluent Bit の最小リソース推奨値です。
Fluent Bit は DaemonSet として動作し、ノードごとに 1 つの Pod が起動します。クラスター全体のリソース消費は、ノード数に比例して増加します。

アーキテクチャ概要

SambaStack のモニタリングリファレンスアーキテクチャでは、次のように動作します。
  • Fluent Bit は DaemonSet として動作し、Kubernetes ノードごとに 1 つのログフォワーダーが確実に配置されます
  • /var/log/pods/ を通じて、すべての Pod とコンテナからログを収集します
  • Lua フィルターを使用して、ログに名前空間、Pod、コンテナのメタデータを付与します
  • ポート 9200 のセキュアな TLS 接続で、OpenSearch にログを転送します
このデプロイでは、Kubernetes の Secret に保存したカスタム Fluent Bit 設定と、カスタム values を用いた Helm ベースのインストールを使用します。
Fluent Bit のログ収集の仕組み:
  • Kubernetes は、各ノードの /var/log/pods/ にコンテナログを自動的に書き込みます
  • Fluent Bit は、DaemonSet を通じてホストのファイルシステムからこれらのログを直接読み取ります
  • CRI と Docker の両方のログ形式に対応するため、複数のパーサーが設定されています
  • Fluent Bit は、実行時に適切なパーサーを自動的に選択します
  • ログは Kubernetes メタデータで拡充され、OpenSearch に転送されます

デプロイ手順

ステップ 1: Helm リポジトリの追加

ステップ 2: OpenSearch パスワードの取得

OpenSearch のデプロイ 時に作成した OpenSearch の管理者パスワードを取得します。
このパスワードはステップ 6 で使用するため、保存しておいてください。

ステップ 3: Lua スクリプトの作成

以下の内容を ~/.sambastack-observability/fluentbit/append_tags.lua として保存します。
Lua コードを別ファイルとして用意する方が、設定ファイルにインラインで埋め込むよりもエラーが起こりにくくなります。

ステップ 4: 設定ファイルの作成

以下の内容を ~/.sambastack-observability/fluentbit/fluentbit-conf.conf として保存します。
INPUT セクション: すべての Pod のログファイルを tail で読み取ります。再帰を防ぐため、Fluent Bit 自身のログは除外します。FILTER (Lua): 外部の append_tags.lua スクリプトを実行し、ログファイルのパスから名前空間、Pod 名、コンテナ名を抽出します。FILTER (parser): ログの内容を JSON または nginx ingress 形式として解析を試みます。OUTPUT: TLS を有効にして OpenSearch にログを送信します。インデックス名 logs-7d は変更可能です。SERVICE: ヘルスチェックとメトリクス用に、ポート 2020 で HTTP サーバーを有効にします。

ステップ 5: 設定用 Secret の作成

Secret 名 sn-fluentbit は、Helm values ファイルの secretName と一致している必要があります。この名前を変更する場合は、values ファイルも合わせて更新してください。

ステップ 6: Helm values ファイルの作成

以下の内容を ~/.sambastack-observability/fluentbit/fluentbit-values.yml として保存します。

ステップ 7: Fluent Bit のインストール

動作確認

Pod ステータスの確認

各ノードで Fluent Bit の Pod が稼働していることを確認します。
期待される出力(ノードごとに 1 Pod):

ログが OpenSearch に届いていることの確認

OpenSearch サービスにポートフォワードします。
インデックスを一覧表示し、ログが取り込まれていることを確認します。
期待される出力:
logs-7d インデックスが存在し、docs.count が 0 以外であれば、Fluent Bit による OpenSearch へのログ送信は成功しています。 ポートフォワードのプロセスを停止するには、次を実行します。

サンプルログのクエリ

サンプルクエリでログの内容を確認します。
namespace、pod、container の各フィールドが設定されたログエントリが表示されるはずです。

成功基準

以下の条件を満たしていれば、デプロイは成功です。
  • Fluent Bit の DaemonSet Pod が、すべてのノードで Running 状態である
  • OpenSearch に logs-7d インデックスが存在し、ドキュメントが登録されている
  • サンプルログのクエリで、namespace/pod/container のメタデータが付与されたエントリが返される

設定リファレンス

トラブルシューティング

Pod が起動しない (ImagePullBackOff)

症状: Fluent Bit の Pod に ImagePullBackOff または ErrImagePull と表示される。 対処方法: クラスターがコンテナレジストリに到達できることを確認してください。ネットワークポリシーやプロキシ要件も確認してください。

OpenSearch にログが表示されない

症状: logs-7d インデックスが存在しない、またはドキュメント数が 0 である。 考えられる原因と対処方法:
  1. OpenSearch に到達できない:
  2. パスワードの誤り: fluentbit-values.yml のパスワードが、OpenSearch の管理者パスワードと一致していることを確認してください。
  3. Secret がマウントされていない:

ログにメタデータフィールドがない

症状: OpenSearch にログは表示されるが、namespace、pod、container フィールドが欠落している。 原因: Lua フィルターがログファイルのパスを解析できていません。 対処方法: ログが想定どおりのパスパターン (/var/log/pods/*/*/*.log) から取得されていることを確認してください。

メモリ使用量が多い

症状: Fluent Bit の Pod が OOMKilled になる、またはメモリ消費が多い。 対処方法: 設定でバッファサイズを削減します。

次のステップ

Fluent Bit によるログ転送が始まったら、次に進みます。
  1. Prometheus と Grafana のデプロイ – ログの可視化ダッシュボードを追加します。詳細は Prometheus と Grafana による監視 をご参照ください。
  2. Grafana でのログ探索 – OpenSearch データソースを含む Grafana をデプロイすると、Explore 機能でログのクエリと可視化ができるようになります。

クリーンアップ

クラスターから Fluent Bit を削除するには、以下を実行します。 Helm リリースをアンインストールします。
設定用 Secret を削除します。
Fluent Bit を削除するとログ転送は停止しますが、OpenSearch 内の既存ログは削除されません。過去のログを削除するには、OpenSearch でインデックスを直接削除するか、インデックスライフサイクルポリシーによってデータが失効するのを待ちます。