Amazon ECS タスク定義の例: FireLens にログをルーティングする - Amazon Elastic Container Service

Amazon ECS タスク定義の例: FireLens にログをルーティングする

FireLens でカスタムログルーティングを使用するには、タスク定義で以下を指定する必要があります。

  • FireLens 設定を含むログルーターコンテナ。コンテナは essential とマークすることが推奨されます。

  • awsfirelens ログドライバーを指定するログ設定を含む 1 つ以上のアプリケーションコンテナ。

  • タスクでログをルーティングするために必要なアクセス許可を含むタスク IAM ロール の、Amazon リソースネーム (ARN)。

AWS Management Console を使用して新しいタスク定義を作成する場合、ログルーターコンテナを簡単に追加できる FireLens 統合セクションがあります。詳細については、「コンソールを使用した Amazon ECS タスク定義の作成」を参照してください。

Amazon ECS はログ設定を変換し、Fluentd または Fluent Bit 出力設定を生成します。出力設定は、/fluent-bit/etc/fluent-bit.conf (Fluent Bit) および /fluentd/etc/fluent.conf (Fluentd) のログルーティングコンテナにマウントされます。

重要

FireLens は、ポート 24224 でリッスンします。したがって、FireLens ログルーターがタスクの外に到達できないようにするには、タスクが使用するセキュリティグループで、ポート 24224 での入力トラフィックを許可してはなりません。awsvpc ネットワークモードを使用する場合、このセキュリティグループは、タスクに関連付けられたセキュリティグループです。host ネットワークモードを使用する場合、これはタスクをホストする Amazon EC2 インスタンスに関連付けられているセキュリティグループです。bridge ネットワークモードを使用するタスクの場合、ポート 24224 を使用するポートマッピングを作成しないでください。

デフォルトでは、Amazon ECS は、ログのソースを識別するのに役立つ追加のフィールドをログエントリに追加します。

  • ecs_cluster - タスクが所属するクラスターの名前。

  • ecs_task_arn – コンテナが属しているタスクの完全な Amazon リソースネーム (ARN)。

  • ecs_task_definition - タスクが使用しているタスク定義名とリビジョン。

  • ec2_instance_id - コンテナがホストされている Amazon EC2 インスタンス ID。このフィールドは、EC2 起動タイプを使用するタスクでのみ有効です。

メタデータが必要ない場合は、enable-ecs-log-metadatafalse に設定できます。

以下のタスク定義の例では、Fluent Bit を使用してログを CloudWatch Logs にルーティングするログルーターコンテナを定義しています。また、これによりアプリケーションコンテナを定義します。このコンテナでは、ログ設定を使用してログを Amazon Data Firehose にルーティングし、イベントのバッファリングに使用されるメモリを 2MiB に設定します。

注記

タスク定義のその他の例については、GitHub の Amazon ECS FireLens の例を参照してください。

{ "family": "firelens-example-firehose", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "enable-ecs-log-metadata": "true" } }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "2097152" } }, "memoryReservation": 100 } ] }

logConfiguration オブジェクトのオプションとして指定されたキーバリューペアは、Fluentd または Fluent Bit 出力設定の生成に使用されます。Fluent Bit 出力定義のコード例は次のとおりです。

[OUTPUT] Name firehose Match app-firelens* region us-west-2 delivery_stream my-stream
注記

FireLens は match 設定を管理します。タスク定義では match 設定を指定しません。

カスタム設定ファイルを使用する

カスタム設定ファイルを指定できます。設定ファイルの形式は、使用しているログルーターでネイティブな形式を使用します。詳細については、「Fluentd 設定ファイルの構文」および「Fluent Bit 設定ファイル」を参照してください。

カスタム設定ファイルでは、bridge または awsvpc ネットワークモードを使用するタスクについて、TCP 経由で Fluentd または Fluent Bit の転送入力を設定しないでください。入力設定は FireLens により追加されています。

カスタム設定ファイルを指定するには、FireLens 設定に次のオプションを含める必要があります。

config-file-type

カスタム設定ファイルのソースの場所。使用できるオプションは、s3 または file です。

注記

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

config-file-value

カスタム設定ファイルのソース。s3 設定ファイルタイプを使用する場合、設定ファイルの値は Amazon S3 バケットとファイルの完全な ARN です。file 設定ファイルタイプを使用する場合、設定ファイルのこの値は、コンテナイメージ内、またはそのコンテナにマウントされているボリューム上に存在する設定ファイルへの完全パスです。

重要

カスタム設定ファイルを使用する場合、FireLens が使用するパスとは異なるパスを指定する必要があります。Amazon ECS は Fluent Bit に /fluent-bit/etc/fluent-bit.conf ファイルパスと Fluentd に /fluentd/etc/fluent.conf を指定します。

次の例は、カスタム設定を指定するときに必要な構文を示しています。

重要

Amazon S3 でホストされるカスタム設定ファイルを指定するには、適切なアクセス許可を持つタスク実行 IAM ロールが作成されている必要があります。

次に、カスタム設定を指定する際に必要な構文を示します。

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "s3 | file", "config-file-value": "arn:aws:s3:::mybucket/fluent.conf | filepath" } } } ] }
注記

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