FireLens(Fluent Bit)のカスタムログルーティング設定ファイルのパスをタスク定義で誤って指定した場合の挙動を確認した

2021.08.01

AWS Fargateでコンテナ起動時、FireLens(Fluent Bit)でカスタムログルーティングしたい場合は、FireLensイメージ内にカスタムログルーティングのための設定ファイルを保存して利用します。

config-file-valueで指定しているパスに設定ファイルがなかった場合、FireLensコンテナはどういう動きをするのか確認します。要は起動したFireLensコンテナ内に設定ファイルが存在しなかったときです。

タスク定義の中でFireLensイメージ内に保存(コピー)した設定ファイルのパス記述し、カスタムログルーティングの設定を読み込ませる仕組みになっています。

タスク定義

      "image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/sample-test-custom-firelens:v1",
      "startTimeout": null,
      "firelensConfiguration": {
        "type": "fluentbit",
        "options": {
          "config-file-type": "file",
          "config-file-value": "/fluent-bit/etc/extra.conf"
        }

カスタムログルーティング設定の参考

まとめ

  • タスク定義で指定したFluent Bitの設定ファイルのパスに設定ファイルが存在しなければタスク起動は失敗する
  • FireLensのログにはConfiguration file contains errors. Abortingと記録される

検証環境

今回の検証環境と同じ環境構築のCloudFormationのテンプレートは以下のリンクに載せてあります。

項目 バージョン
aws-for-fluent-bit 2.18.0
Fluent Bit 1.8.2
Fargate platform 1.4.0

検証方法を考える

config-file-valueで指定したパスに設定ファイルはデフォルトのイメージ内には存在しないため、なにかしらのエラーになることが期待できます。

  • config-file-valueで適当なファイルパスを指定します。
    • 動作確認のため正常に起動できたファイルパスをそのまま指定することにします
  • FireLensイメージを設定ファイルを同梱する前の素のFirelens(aws-for-fluent-bit)イメージに差し替えます。

環境構築時に新規にデプロイ

CloudFormationのテンプレートからデプロイ時に今回の検証方法の指定でスタックを作成しました。結果はFireLensコンテナがエラーで起動できないため、再デプロイを繰り返します。スタックの作成は30分放置してもタイムアウトにはならなかったため打ち切りました。

アプリケーションコンテナ(webapp)のコンテナもSTOPPEDになっていますが、こちらは何も問題はないです。本当に問題ないのか確認したくても、アプリケーションコンテナのログはFireLensコンテナに送るためFireLensが起動できていないためログを確認できません。 切り分けが必要なときはアプリケーションコンテナのログはFireLensへ送らずに、CloudWatch Logsへ直接保存するように設定変更すると良いです。

FireLensコンテナの停止により、アプリケーションコンテナも停止する動きは、タスク定義内のessntialの設定値によって変わります。 1タスクで2コンテナ(アプリケーションコンテナと、FireLensコンテナ)の構成で、タスク定義のessentialの項目はtrueになっているためタスク全体が停止しました。

essentialとは、ECSタスク内でそのコンテナが必須かどうかを表します。essentialがtrue設定されているとき、そのコンテナがなんらかの原因で停止した場合はECSタスク全体が終了します。

FireLensコンテナの標準出力の結果はCloudWatch Logsへ保存するように設定してあります。ログを確認するとConfiguration file contains errors. Abortingのエラーメッセージを確認できました。

Error Message

Error: Configuration file contains errors. Aborting

設定ファイルのパスを誤るとFireLensコンテナは起動できないことがわかりました。

タスク定義を変更してからデプロイ

設定ファイルが存在しているFireLensイメージで一度起動させました。アプリケーションコンテナも、FireLensコンテナも起動している状態です。

タスク定義からFireLensで使用しているイメージを変更します。現在は自前の設定ファイルが同梱されたイメージを指定されています。

まっさらなaws-for-fluent-bitのイメージに差し替えました。

タスク定義更新後のリビジョンでサービス更新し、タスクを矯正デプロイして起動しているコンテナを入れ替えてみます。設定ファイルが存在しないため同様にタスク起動できませんでした。

エラーメッセージは同じでした。

新規にデプロイしても、タスク定義を更新してデプロイしても挙動、エラーメッセージともに変化しないことを確認できました。

おわりに

些細な疑問が解決できました。設定ファイルが存在しない場合は、指定したパスに設定ファイルはありません的なエラーメッセージを返しつつ、FireLensコンテナ自体は起動できるかなと予想していたのですがハズレました。 どなたかの役に立つか微妙ですけど確認する手間省けて良かったとなれば幸いです。

ちなみにカスタムログルーティングの設定ファイルのパスをタスク定義で未定義の場合はどうなの?という疑問については、設定ファイルのパスが未定義であればエラーなくFireLensコンテナは起動します。以下のリンクで動作を確認しています。