カスタムログルーティングの使用 - Amazon Elastic Container Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタムログルーティングの使用

Amazon ECS FireLens の を使用して、タスク定義パラメータを使用してログを AWSサービスまたは AWS Partner Network (APN) 送信先にルーティングし、ログを保存および分析できます。AWS Partner Network は、プログラム、専門知識、リソースを活用して顧客向けサービスの構築、マーケティング、販売を行うパートナーのグローバルコミュニティです。詳細については、「AWS Partner」を参照してください。FireLens は Fluentd および Fluent Bit と連携しています。Fluent Bit イメージ用に AWS を提供していますが、Fluentd や Fluent Bit のイメージはご用意いただいたものを使用することもできます。

考慮事項

Amazon ECS FireLens に を使用する場合は、次の点を考慮してください。

  • コンソールでコンテナ名を簡単に区別できるように、ログコンテナ名my_service_に を追加することをお勧めします。

  • Amazon ECS は、デフォルトでアプリケーションコンテナとコンテナの間に開始FireLensコンテナ順序の依存関係を追加します。アプリケーションコンテナとコンテナの間でFireLensコンテナの順序を指定すると、デフォルトの開始コンテナの順序が上書きされます。

  • FireLens for Amazon ECS は、Linux の AWS Fargate と Linux の Amazon EC2 の両方でホストされたタスクでサポートされます。Windows コンテナは FireLens をサポートしていません。

    Windows コンテナの集中ロギングを設定する方法については、「Centralized logging for Windows containers on Amazon ECS using Fluent Bit」(Fluent Bit を使用した Amazon ECS での Windows コンテナの集中ロギング) を参照してください。

  • Amazon ECS の FireLens は、AWS CloudFormation テンプレートでサポートされています。詳細については、「 ユーザーガイドAWS::ECS::TaskDefinition FirelensConfiguration」のAWS CloudFormation「」を参照してください。

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

  • bridge ネットワークモードを使用するタスクの場合、 FireLens 設定を持つコンテナは、それに依存するアプリケーションコンテナが起動する前に起動する必要があります。コンテナの開始順序を制御するには、タスク定義の依存関係条件を使用します。詳細については、「コンテナの依存関係」を参照してください。

    注記

    FireLens 設定でコンテナ定義で依存関係条件パラメータを使用する場合は、各コンテナに STARTまたは HEALTHY条件要件があることを確認してください。

  • デフォルトでは、FireLens はクラスターとタスクの定義名、およびクラスターの Amazon リソースネーム (ARN) をメタデータキーとして stdout/stderr コンテナログに追加します。メタデータ形式の例を次に示します。

    "ecs_cluster": "cluster-name", "ecs_task_arn": "arn:aws:ecs:region:111122223333:task/cluster-name/f2ad7dba413f45ddb4EXAMPLE", "ecs_task_definition": "task-def-name:revision",

    ログにメタデータを含めたくない場合は、タスク定義の「firelensConfiguration」セクションで enable-ecs-log-metadatafalse に設定します。

    "firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"false", "config-file-type":"file", "config-file-value":"/extra.conf" }

必要な IAM 許可

この機能を使用するには、タスク用の IAM ロールを作成し、AWS のサービスを使用するために必要なアクセス許可をタスクに付与する必要があります。例えば、コンテナから Kinesis Data Firehose にログをルーティングする場合、タスクには firehose:PutRecordBatch API を呼び出すためのアクセス許可が必要です。詳細については、IAM ユーザーガイドの「IAM ID アクセス許可の追加と削除」を参照してください。

次の IAM ポリシー例では、ログを Kinesis Data Firehose にルーティングするために必要なアクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ] }

次の IAM ポリシーの例では、ログを Amazon CloudWatch Logs にルーティングするために必要なアクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": "*" }] }

以下の場合は、タスクに Amazon ECS タスク実行ロールが必要になることもあります。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。

  • タスクが Fargate でホストされていて、Amazon ECR からコンテナイメージをプルしたり、ログ設定で AWS Secrets Manager の機密データを参照したりする場合は、タスク実行 IAM ロールを含める必要があります。

  • Amazon S3 でホストされるカスタム設定ファイルを指定する場合、タスクの実行 IAM ロールには、設定ファイル用の s3:GetObject アクセス許可と、ファイルが格納されている Amazon S3 バケットに対する s3:GetBucketLocation アクセス許可を含める必要があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「ポリシーでのアクセス許可の指定」を参照してください。

    次の IAM ポリシー例では、Amazon S3 からファイルを取得するために必要なアクセス許可を追加します。Amazon S3 バケットの名前と設定ファイル名を指定します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

Fluentd バッファ制限

タスク定義を作成するときに、log-driver-buffer-limit で値 (バイト単位) を指定することにより、メモリにバッファリングされるイベント数を指定できます。詳細については、Docker ドキュメントの「Fluentd ロギングドライバー」を参照してください。

このオプションは、スループットが高いために Docker がバッファメモリを使い果たし、新しいメッセージを追加するためにバッファメッセージを破棄する可能性がある場合に使用します。ログが失われた場合、トラブルシューティングが困難になる可能性があります。バッファ制限を設定することで、この問題を防ぐのに役立つかもしれません。

以下に、 を指定するための構文を示しますlog-driver-buffer-limit。をサービスの名前my_service_に置き換えます。

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "my_service_log_router", "firelensConfiguration": { "type": "fluentbit" }, "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" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }

for FireLens Amazon ECS をバッファ制限オプションで使用する場合は、次の点を考慮してください。

  • このオプションは、Amazon EC2 起動タイプおよび プラットフォームバージョン 1.4.0 以降の Fargate 起動タイプでサポートされています。

  • このオプションは、logDriverawsfirelens に設定されている場合にのみ有効です。

  • デフォルトのバッファ制限は 1 MiB です。

  • 有効な値は 0 および 536870912 (512 MiB) です。

  • タスクレベルで割り当てられたメモリの合計量は、メモリバッファ制限に加えて、すべてのコンテナに割り当てられたメモリ量よりも大きくなければなりません。コンテナの memory 値と memoryReservation 値を指定しない場合、指定するバッファメモリの合計量は 536870912 (512MiB) 未満である必要があります。具体的には、アプリケーションコンテナを awsfirelens ログドライバーと log-driver-buffer-limit オプションを 300 MiB に設定します。ただし、 log-driver-buffer-limit が 300 MiB (300 MiB × 2> 512 MiB) に設定されたコンテナが 2 つ以上ある場合、タスクを実行することはできません。

TCP 経由で Fluent ロガーライブラリまたは Log4j を使用する

awsfirelens ログドライバーがタスク定義で指定されている場合、Amazon ECS コンテナエージェントは次の環境変数をコンテナに挿入します。

FLUENT_HOST

FireLens コンテナに割り当てられている IP アドレス。

FLUENT_PORT

Fluent Forward プロトコルがリッスンしているポート。

FLUENT_HOST 環境変数および FLUENT_PORT 環境変数を使用すると、stdout を介することなく、コードからログルーターに直接ログを記録できます。詳細については、「」のfluent-logger-golang「」を参照してください GitHub。

トピック