AWSのログサービス「Firelens」とは?
「AWS Firelens」とは、「Amazon ECS」で出力するログファイルを指定した場所に送信(ルーティング)し、保存してくれるサービスです。
ログの送信場所は、設定ファイルにてカスタマイズ可能になっており、AWSの各種サービスを宛先として設定できます。
「AWS Firelens」の機能は、「カスタムルーティング」と呼ばれます。
最初に「AWS Firelens」利用の前提となるサービスについて解説していきます。
「Amazon ECS」とは?
「Amazon ECS(Amazon Elastic Container Service)」とは、AWS上でDockerコンテナを管理するためのサービスです。
具体的には、コンテナのデプロイ(配置場所)、スケジューリング(実行タイミング)、スケーリング(処理量に応じた拡張)を管理(「オーケストレーション」とも呼称)しています。
AWSにおいてコンテナを管理するサービスは、「コントロールプレーン」と呼ばれます。
「Amazon ECS」の概要とタスクについて
「Amazon ECS」の概要としては、「タスク定義(Task Definition)」、「タスク(Task)」、「サービス(Service)」、「クラスタ(Cluster)」の4種類の機能で構成されています。
具体的には、「タスク定義(Task Definition)」は、コンテナの実行方法に関する設定が記述されたファイルで、「タスク(Task)」はこの「タスク定義」情報を元にしたコンテナの実行単位になります。
「Amazon ECS」のサービスとクラスタについて
「Amazon ECS」の「サービス(Service)」は、実行中の「タスク」数を指定した数値以下に維持してくれる機能です。
また「クラスタ(Cluster)」は、上記の「タスク」や「サービス」で構成された論理的なグループです。「クラスタ」の具体的なAWSサービスとしては、Dockerコンテナを動かしている「Amazon EC2」インスタンスの集合体となっています。
AWSの「データプレーン」とは?
AWSの「データプレーン」とは、Dockerコンテナの実行環境です。
先ほどの「コントロールプレーン」からの指示を受けてコンテナを起動し、コンテナ実行状況等の情報を「コントロールプレーン」へフィードバックします。
AWSでの「データプレーン」の具体的なサービスとしては、「AWS Fargate」や「Amazon EC2(Amazon Elastic Compute Cloud)」が提供されています。
「Amazon ECR(Elastic Container Registry)」とは?
「Amazon ECR(Elastic Container Registry)」とは、Dockerコンテナのイメージを一元管理して保存するリポジトリです。
「Amazon ECR」の導入によって、コンテナのリポジトリ管理の作業や、スケーリング等の基盤上の運用作業が不要になります。
コンテナイメージを各サーバに配布する必要はなく、各サーバが必要に応じて「Amazon ECR」から取得しています。
「AWS Firelens」の概要

ここまで「AWS Firelens」の前提となっているAWSのサービスについて解説してきました。
ここから「AWS Firelens」の概要について、導入検討時の考慮事項やログ出力に使用されている技術等について解説していきます。
また具体的なAWSサービスの構成を通じて、ログの出力からルーティングまでの流れも説明します。
「AWS Firelens」の導入検討時の考慮事項(その1)
「AWS Firelens」の導入時には、適切に活用するために、考慮事項の検討が必要です。
「AWS Firelens」が「データプレーン」である「AWS Fargate」と「Amazon EC2」の両方に対応していることを考慮します。つまり運用するコンテナの性質を十分に検討して、「AWS Fargate」もしくは「Amazon EC2」のどちらを利用するかを決定する必要があります。
「AWS Firelens」の導入検討時の考慮事項(その2)
次の「AWS Firelens」の考慮事項は、「AWS Firelens」は「AWS CloudFormation」のテンプレートに対応している点です。
なお「AWS CloudFormation」は、設定ファイルを元にして、AWSの各種サービスの構築を自動的に実施してくれるサービスです。つまり「AWS CloudFormation」による構築に「AWS Firelens」を含められるため、運用の自動化が可能です。
「AWS Firelens」の導入検討時の考慮事項(その3)
次の「AWS Firelens」の考慮事項としては、コンテナの開始順序を制御する必要がある場合は、コンテナの「タスク定義」の設定に依存関係条件を記述します。
例えば、「bridge ネットワークモード」を利用している「タスク」の場合に、「AWS Firelens」のログ出力対象のコンテナは、それに依存するアプリケーションが開始以前に起動しておく必要があります。
「AWS Firelens」を利用するためのIAMアクセスについて
「AWS Firelens」を利用するために、タスク用の「IAMロール」を作成して、タスクに付与する必要があります。
例えば、「Kinesis Data Firehose」にコンテナのログファイルをルーティングする際には、タスクに対して「firehose:PutRecordBatch API」をコールするためのアクセス許可を付与する必要があります。
「AWS Firelens」で解決しようとしている課題
「AWS Firelens」で解決しようとしている課題は、ログの種類に応じて、「タスク」からのログを柔軟にルーティングし、コストの最適化を図ることです。
例えば、「コントロールプレーン」が「Amazon ECS」、「データプレーン」が「AWS Fargate」の場合で説明します。
「AWS Firelens」で解決しようとしている課題の具体例
「AWS Firelens」で解決しようとしている課題は、以下のようなユースケースが考えられます。
例えば、「AWS Fargate」で稼働しているコンテナから2種類の「ログA」、「ログB」が出力されるとします。
「ログA」は分析のために「Amazon CloudWatch Logs」に、「ログB」は保存のために「Amazon Kinesis Data Firehose」にルーティングしたいといった課題に対応できます。
「Amazon CloudWatch Logs」 へのログの転送
「AWS Firelens」から「Amazon CloudWatch Logs」へのログの転送について補足します。
ログ転送の設定で、「対象ログのリージョン名」と「ロググループ名」を指定します。ログ転送時に「ロググループ」を自動作成するには、「”auto_create_group”:”true”」を指定する必要があります。
また、ログのフィルタリングに役立つ「ログストリーム・プレフィックス」の指定も可能です。
「Amazon Kinesis Data Firehose」配信ストリームへのログ転送
「Amazon Kinesis Data Firehose」配信ストリームへのログ転送についても補足します。
「Amazon Kinesis Data Firehose」の配信ストリームは、事前に作成しておく必要があります。またログの設定で、「対象配信ストリームのリージョン名」と「配信ストリーム名」を指定します。
「AWS Firelens」のルーティング機能の詳細
「AWS Firelens」のルーティング機能の詳細について解説します。
「Amazon ECS」で管理しているコンテナが出力する「標準出力」や「標準エラー出力」のログは、「Fluentd」や「Fluent Bit」といったログ集約ソフトウェアに簡単にルーティングできます。
なおAWSは、リソース使用率が「Fluentd」よりも低いため、「Fluent Bit」をログルーターとすることを推奨しています。
「AWS Firelens」のまとめ

「AWS Firelens」を用いたログルーティングについて、関連技術を踏まえながら解説してきました。
従来と比較して、「Amazon ECS」管理下のコンテナが出力するログについて、簡単に取り扱えるようになります。
今後、コンテナ技術の利用ケースが増えた時には、「AWS Firelens」の導入を検討してみてはいかがでしょうか。]]>
この記事の監修者・著者
-
株式会社オープンアップITエンジニア
-
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞