EC2(Amazon Linux 2023) に Fluent Bit を導入してS3バケットにログを配信
こんにちは、こーへいです。
今回はEC2(Amazon Linux 2023) に Fluent Bit を導入してS3バケットにログを配信してみました。
Fluentd版は以下となります。
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の違いを解説しています。
前提
- Amazon Linux 2023を使用
- S3バケットやEC2の準備は実施済み
Fluent bitの導入
インストール
// インストール スクリプト
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
// サービスの起動
sudo systemctl start fluent-bit
インストールはすぐに終わります。
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セクション
各パラメータ等の詳細は上記リンクに記載されています。
個人的にdbは設定を推奨します。こちらはFluentdにおけるpos_file
と同様のパラメータでFluent Bitが最後に読み込んだログを記録するための設定です(Fluentdでは設定を強く推奨しています)。
こちらを設定することで、ログの取りこぼしや重複リスクを減らすことが可能です。
Outputセクション
各パラメータ等の詳細は上記リンクに記載されています。
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
で指定した通りにログファイルが配信されていました。
中身もしっかりアクセスログが記録されています。