12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS ECS FargateのFireLensでConfigurationファイルを読み込む

Last updated at Posted at 2020-01-05

概要

AWS Firelensを利用する際に、カスタマイズした Fluentbit Configurationファイル (以下、confファイル)をロードしたい時がある。
このconfファイルロードの方法がやや分かりづらかったので、備忘録的にまとめた。
なお、本記事はFluentbit想定で記述しているが、Fluentdを利用する場合も同様のはずである。

ロード方法

いくつかの項目の設定が必要なので、項目ごとに説明する。

1. Fluentbit コンテナの firelensConfiguration を設定

ECS Fargateを用いる場合、S3からconfファイルをロードする方法は利用できない(2020/1 現在。)
このため、Fluentbit コンテナ内に配置した conf ファイルを直接ロードする方法をとる。
このためには、 containerDefinitions に下記の記述を追加すれば良い。

            "firelensConfiguration": {
                "type": "fluentbit",
                "options": {
                    "config-file-type": "file",
                    "config-file-value": "/fluent_conf/custom.conf"
                }
            },

なお、 /fluent_conf/custom.conf には後の手順でファイルを配置する設定をする。
また、この設定は現状マネジメントコンソールのGUIで設定することはできないため、 タスク定義 画面のJSONで設定 から設定すること。

この設定をすることで、 Fluentbit が実際に利用するconfファイルは、下記のようになる。
@INCLUDE で指定したファイルが注入されていることがわかる。

[INPUT]
    Name forward
    unix_path /var/run/fluent.sock

[INPUT]
    Name forward
    Listen 127.0.0.1
    Port 24224

[INPUT]
    Name tcp
    Tag firelens-healthcheck
    Listen 127.0.0.1
    Port 8877

[FILTER]
    Name record_modifier
    Match *
    Record ec2_instance_id i-0073fe00
    Record ecs_cluster ec2-sandbox
    Record ecs_task_arn arn:aws:ecs:ap-northeast-1:
    Record ecs_task_definition api-on-ec2:8

# ここより上の部分はFireLensのデフォルト設定

# ここでcustom configurationが注入されている
@INCLUDE /fluent_conf/custom.conf

[OUTPUT]
    Name null
    Match firelens-healthcheck

[OUTPUT]
    # ここはメインコンテナのFireLens設定に記述した通りになる
    Name null

なお、ECS on EC2を利用する場合は、素直にS3からファイルをロードするのが楽だと思われる。

2. メインコンテナとの共有ボリュームを作成する

confファイルはFluentbitコンテナ内に配置する必要があるが、これをメインコンテナ側から注入する形にしたい。
この方法には、下記のメリットがある:

  • Fluentbitコンテナを修正することなく、公式イメージのまま利用できる
  • メインコンテナ側アプリケーションコードと同一のリポジトリでconfファイルもバージョン管理できる

これは、メインコンテナのconfファイルを配置したフォルダを共有ボリュームとしてFluentbitコンテナから参照させることで実現できる。

タスク定義 コンソールで下記の設定をすれば良い:

  1. 共有ボリュームの作成
    image.png
  2. メインコンテナ側で共有ボリュームにフォルダをマウント
  • メインコンテナの /app/fluent_conf/custom.conf に利用するconfファイルが配置されている想定
    image.png
  1. Fluentbitコンテナ側で共有ボリュームを読み取り専用でマウント
    image.png

上記の設定をすることで、 Fluentbitコンテナでは /fluent_conf/custom.conf にconfファイルが配置された状態になる。

3. コンテナ初期化の順序関係を定義する

Fluentbitコンテナは、共有ボリュームにマウントが完了した状態で起動する必要がある。
(マウントが完了していない場合、 Fluentbitの初期化時に custom.conf が見つからないためエラーが発生する。)
このため、Fluentbitコンテナの スタートアップ依存順序 設定で、メインコンテナがSTART状態である依存を追加する。
image.png

これで必要な設定は完了した。

(2020/09追記)
Fargate 1.4.0ではFirelensコンテナは全ての他のコンテナが起動する前に起動するよう、暗黙の依存関係が追加されている。
このため、この依存関係を設定すると、永遠にコンテナが起動しなくなる。 参考
このため、Custom configurationファイルは、独自のFluentbit Dockerイメージを定義して、その中に埋め込む方法が推奨される。

参考情報

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?