AWS Firelensにカスタム設定を適応する方法

AWS FirelensはECSのタスク定義でログルーターの統合を有効にするだけで簡単に
FluentBitまたはFluentdのサイドカーコンテナをタスクに追加してログの操作を移譲できます。

バックエンドはFluentBitかFluentdが選択可能ですが今回はFluentBitを選択します。
Firelensで使用されるFluentBitのDockerイメージはaws-for-fluent-bitという名称でAmazon ECRやDocerHubで提供されています。

今回は、Firelensで動作するFluentBitコンテナに独自のカスタム設定を追加する方法をまとめます。

カスタム設定を書く場所

Dockerイメージを取得してコンテナを立ち上げてみると/fluent-bit/etc/fluent-bit.confに設定があります。

[INPUT]
    Name        forward
    Listen      0.0.0.0
    Port        24224

[OUTPUT]
    Name cloudwatch
    Match   **
    region us-east-1
    log_group_name fluent-bit-cloudwatch
    log_stream_prefix from-fluent-bit-
    auto_create_group true

このファイルはECSタスク起動時に差し替えられログルーターとして機能するようになっています。
その為、Dockerコンテナ上でいくらfluent-bit.confを編集しても最終的には差し替えられてしまうため別のファイルで作成することになります。

Fargateの場合には後述する制約があるのでコンテナから参照できる場所にファイルを配置することになります。
/fluent-bit/etc/xxxx.confのような。

カスタム設定適応方法

ECSタスク定義のコンテナの所でカスタム設定ファイルの定義を追加するとカスタム設定を適応できます。

         "firelensConfiguration":{
            "type":"fluentbit",
            "options":{
               "config-file-type":"s3 | file",
               "config-file-value":"arn:aws:s3:::mybucket/fluent.conf | filepath"
            }
         }
FireLens 設定を使用するタスク定義の作成 - Amazon ECS

Fargateで動作させる場合には制約があります。

AWS Fargate でホストされるタスクは、file 設定ファイルタイプのみをサポートします。

FireLens 設定を使用するタスク定義の作成 - Amazon ECS

EC2であればS3から参照することもできるようですがFargateなのでコンテナ内からファイルを参照できる必要があります。

あとはカスタム設定を記載した設定ファイルを内包したDockerイメージが作成できたらECRにアップロードして、
タスク定義のFirelens統合で指定されているコンテナイメージを自分で作成したものに変更すれば完了です。