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-metadata
を false
に設定できます。
以下のタスク定義の例では、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": [ { "name": "log_router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable", "cpu": 0, "memoryReservation": 51, "portMappings": [], "essential": true, "environment": [], "mountPoints": [], "volumesFrom": [], "user": "0", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/ecs-aws-firelens-sidecar-container", "mode": "non-blocking", "awslogs-create-group": "true", "max-buffer-size": "25m", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "firelens" }, "secretOptions": [] }, "systemControls": [], "firelensConfiguration": { "type": "fluentbit" } }, { "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_streammy-stream
注記
FireLens は match
設定を管理します。タスク定義では match
設定を指定しません。
カスタム設定ファイルを使用する
カスタム設定ファイルを指定できます。設定ファイルの形式は、使用しているログルーターでネイティブな形式を使用します。詳細については、「Fluentd 設定ファイルの構文
カスタム設定ファイルでは、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:::
|amzn-s3-demo-bucket
/fluent.conffilepath
" } } } ] }
注記
AWS Fargate でホストされるタスクは、file
設定ファイルタイプのみをサポートします。