3
1

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.

FargateからFireLensで三つ股出力(1 of 2)

Last updated at Posted at 2020-08-11

単一のFargateから、FireLensを使ってCloudWatch Logs(以下CWL)、Kinesis Data Firehose(以下KFH)、Amazon Elasticsearch Service(以下AES)に三つ股ログ出力する方法について。

やりたいこと

  • FargateタスクからFireLensを介して複数ターゲットにログをルーティングする。

アプリコンテナ(ログ設定をawsfirelensに指定)→FireLens
→CWL
→KFH
→AES

事前準備

まずはテスト用にFireLens行き設定を含むアプリコンテナと、FireLensコンテナを準備する。
FireLensはいわゆるサイドカー(同じタスク定義内での別のコンテナ)として用意する。
タスク定義にFireLens統合のセクションがあるので、こちらを参考に作成。今回は、以前作成したタスク定義(myFargateSvc)に新しいリビジョンを追加する形で行う。それにしても、ECSをマネジメントコンソールから操作しようとするとコマンドラインよりむしろ辛い気がするのは何故なのか。

有効化するにはここにチェックを入れるだけ。
スクリーンショット 2020-08-12 午前0.46.47.png
スクリーンショット 2020-08-12 午前1.59.11.png

Beforeが
スクリーンショット 2020-08-12 午前0.51.04.png

Afterになる。サイドカーとはよく言ったものだ。
スクリーンショット 2020-08-12 午前0.49.40.png

あっさり完了かと思いきや、エラー。
スクリーンショット 2020-08-12 午前0.56.07.png

どうやら、アプリコンテナ側に明示的にawsfirelensログドライバーを指定してあげないとだめらしい。やってよそれぐらい。
スクリーンショット 2020-08-12 午前1.59.11.png

どうにかタスク更新完了。
スクリーンショット 2020-08-12 午前1.03.59.png

このあと、当該サービスでタスクのリビジョンを新たに作成したものに置き換えれば、下準備は完了。
スクリーンショット 2020-08-12 午前1.14.06.png

Step by Step

アプリコンテナからFireLensに吐き出す準備ができたので、以下、三つ股ログ設定のStep by Step。

1. CWL

まずはCWLに吐き出すところから。
これだけだと、別にFireLensを介在させる必要はなくてawslogsドライバーで事足りるわけだが、何はともあれ、FireLens(fluentbit)がちゃんと動くことを確認しなくては始まらない。
一応整理しておくと、以下のようになる。

構成 ログドライバー 経路
いつもの構成 awslogs アプリコンテナ→awslogs→CWL
今回の構成 awsfirelens アプリコンテナ→awsfirelens→FireLensコンテナ(fluentbit)→awslogs→CWL

と、ここまで書いたところで(エラーもあって)やや力尽きたので、続きは改めて。


同日 2:10am 追記:
FireLensコンテナ(log_router)は、デフォルトだとそれ自身のターゲットが指定されていないため、このままだとタスク更新時にエラーになることが判明。
タスクのリビジョン追加時に、log_routerコンテナの設定に移動してAuto Config CloudWatch Logsにチェックを入れ(またはCWL設定を手入力し)、FireLensコンテナ自身のロググループを構成して初めて、正常にサービスが更新可能になる模様。やってよそれくらい。

また、アプリコンテナ側も、手なりでawsfirelens設定をするとNameというキーがバリューなしで設定されてしまい、CWLにログこそ吐き出されるようになるものの以下のような残念なメッセージでサービス起動が失敗する羽目になるので注意。
スクリーンショット 2020-08-12 午前2.08.19.png

8/12追記:
少々わかりにくいところだが、FireLensコンテナに入れるawslogs(CWL出力)設定は、あくまでFireLensコンテナ上のfluent-bitが自身のシステムログを吐き出すための設定で、本題であるアプリコンテナのログ出力先とは違う。それはアプリコンテナのawsfirelens設定で書くわけだが、書いた結果が最終的にFireLensコンテナ上のfluent-bit.confに反映されてアプリコンテナのログルーティングに使われる、という関係性になる。

というわけで、アプリコンテナ側のログ設定にキー/バリューの形でCWL設定を入れていけば「アプリコンテナからFireLens経由でCWL」というここでの目的が達せられるのだが、詳細は次回。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?