EC2(Amazon Linux 2023) に Fluent Bit を導入してS3バケットにログを配信

EC2(Amazon Linux 2023) に Fluent Bit を導入してS3バケットにログを配信

2025.03.22

こんにちは、こーへいです。

今回はEC2(Amazon Linux 2023) に Fluent Bit を導入してS3バケットにログを配信してみました。

Fluentd版は以下となります。

https://dev.classmethod.jp/articles/al2023-fluentd-s3/

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/firelens-using-fluentbit.html

FluentdとFluent Bitは似ているツールですがAWSのドキュメントでは以下の記載があり、AWSとしてはFluent Bitのインストールを推奨しております。

ECSでもFluent Bitを利用することが多いため、特別な要件がなければFluentdではなくFluent Bitで統一することをお勧めします。

AWS は、CloudWatch Logs と Firehose の両方のプラグインに Fluent Bit イメージを提供します。Fluent Bit は、リソース使用率が Fluentd よりも低いため、ログルーターとして使用することをお勧めします。

Fluent Bitの公式ドキュメントでもFluentdの違いを解説しています。

https://docs.fluentbit.io/manual/about/fluentd-and-fluent-bit

前提

  • Amazon Linux 2023を使用
  • S3バケットやEC2の準備は実施済み

Fluent bitの導入

インストール

https://docs.fluentbit.io/manual/installation/linux/amazon-linux

// インストール スクリプト curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh // サービスの起動 sudo systemctl start fluent-bit 

インストールはすぐに終わります。

貼り付けた画像_2025_03_22_19_11

Configの修正

/etc/fluent-bit/fluent-bit.confのデフォルトのファイルを書き換え以下の設定ファイルを作成しました。

[INPUT] Name tail Path /var/log/httpd/access_log Tag s3.apache.access db apache_access_tail.db [OUTPUT] name s3 match s3.apache.access region ap-northeast-1 bucket [バケット名] total_file_size 100M upload_timeout 10m use_put_object On compression gzip s3_key_format /$TAG/%Y/%m/%d/%H/%M/%S/$UUID.gz 

Inputセクション

https://docs.fluentbit.io/manual/pipeline/inputs/tail

各パラメータ等の詳細は上記リンクに記載されています。

個人的にdbは設定を推奨します。こちらはFluentdにおけるpos_fileと同様のパラメータでFluent Bitが最後に読み込んだログを記録するための設定です(Fluentdでは設定を強く推奨しています)。

こちらを設定することで、ログの取りこぼしや重複リスクを減らすことが可能です。

pos_file (highly recommended)

Outputセクション

https://docs.fluentbit.io/manual/pipeline/outputs/s3

各パラメータ等の詳細は上記リンクに記載されています。

upload_timeoutの上限値はドキュメントに記載がありませんでした。1時間までは少なくとも設定可能ですので、アプリケーションの特性を考慮し最適な設定を行なってください。

確認

下記コマンドを実施し、設定ファイルを更新後、起動したapacheに対してリクエストを送信します。

sudo systemctl restart fluent-bit sudo dnf install httpd sudo systemctl start httpd.service ab -n 100 -c 10 http://localhost/ 

10分ほど待機した後S3を確認するとs3_key_formatで指定した通りにログファイルが配信されていました。

貼り付けた画像_2025_03_22_19_31

中身もしっかりアクセスログが記録されています。

貼り付けた画像_2025_03_22_19_32

その他参考

この記事をシェアする

FacebookHatena blogX

関連記事