アプリケーションメトリクスを Amazon CloudWatch にエクスポートする - Amazon Elastic Container Service

アプリケーションメトリクスを Amazon CloudWatch にエクスポートする

Fargate の Amazon ECS は、カスタムメトリクスとして、Amazon CloudWatch にカスタムアプリケーションメトリクスをエクスポートすることをサポートしています。これは、OpenTelemetry サイドカーコンテナ用 AWS Distro をタスク定義に追加することによって実行します。Amazon ECS コンソールでは、新しいタスク定義の作成時に [メトリクス収集の使用] オプションを追加することでこのプロセスが簡素化されます。詳細については、「コンソールを使用した Amazon ECS タスク定義の作成」を参照してください。

アプリケーションメトリクスは、ロググループ名 /aws/ecs/application/metrics を使用して CloudWatch Logs にエクスポートされ、メトリクスは ECS/AWSOTel/Application ネームスペースで表示できます。アプリケーションは、OpenTelemetry SDK を使用して計測する必要があります。詳細については、「AWS Distro for OpenTelemetry ドキュメント」の「AWS Distro for OpenTelemetry の概要」を参照してください。

考慮事項

OpenTelemetry 用 AWS Distro と Fargate 統合に Amazon ECS を使用して Amazon CloudWatch にアプリケーションメトリクスを送信する場合、次のことを考慮する必要があります。

  • この統合では、カスタムアプリケーションメトリクスのみを CloudWatch に送信します。タスクレベルのメトリクスが必要な場合は、Amazon ECS クラスター設定で Container Insights を有効にします。詳細については、「Container Insights を使用して Amazon ECS コンテナをモニタリングする」を参照してください。

  • AWS Distro for OpenTelemetry の統合は、Fargate でホストされている Amazon ECS ワークロード、および、Amazon EC2 インスタンスでホストされている Amazon ECS ワークロード用としてサポートされています。現在、外部インスタンスはサポートされていません。

  • CloudWatch は、メトリクスごとに最大 30 個のディメンションをサポートします。デフォルトの Amazon ECS は TaskARNClusterARNLaunchTypeTaskDefinitionFamilyTaskDefinitionRevision ディメンションをメトリクスに含めることが既定となります。残りの 25 個のディメンションは、アプリケーションで定義できます。30 個以上のディメンションが設定されている場合、CloudWatch はそれらを表示できません。この場合、アプリケーションメトリクスは ECS/AWSOTel/Application CloudWatch のメトリクス名前空間に表示されますが、ディメンションは表示されません。アプリケーションを計測して、さらにディメンションを追加できます。詳細については、「AWS Distro for OpenTelemetry ドキュメント」の「AWS Distro for OpenTelemetry で CloudWatch のメトリクスを使用する」を参照してください。

OpenTelemetry 用 AWS Distro と Amazon CloudWatch の統合に必要な IAM 許可

Amazon ECS と OpenTelemetry 用 AWS Distro の統合には、タスク用 IAM ロールを作成し、タスク定義でロールを指定する必要があります。OpenTelemetry サイドカー用 AWS Distro サイドカーを、CloudWatch ログに対するルートコンテナログにも構成することをお勧めします。これには、タスク実行 IAM ロールを作成して、タスク定義でも指定する必要があります。Amazon ECS コンソールは、ユーザーに代わってタスク実行 IAM ロールを処理しますが、タスク IAM ロールは手動で作成してタスク定義に追加する必要があります。タスクの実行 IAM ロールの詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。

重要

OpenTelemetry 用 AWS Distro 統合を使用してアプリケーションのトレースデータも収集する場合、タスク IAM ロールもその統合に必要な許可が含まれていることを確認します。詳細については、「アプリケーショントレースデータを使用して Amazon ECS 最適化の機会を特定する」を参照してください。

アプリケーションに権限が追加で必要な場合は、それらの権限をこのポリシーに追加する必要があります。各タスク定義では、タスク用の IAM ロールを 1 個のみ指定できます。例えば、Systems Manager に保存されているカスタム設定ファイルを使用する場合、この IAM ポリシーに ssm:GetParameters 権限を追加する必要があります。

Elastic Container Service のサービスロールを作成するには (IAM コンソール)
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. IAM コンソールのナビゲーションペインで、[ロール]、[ロールを作成] を選択します。

  3. 信頼できるエンティティタイプ で、AWS のサービス を選択します。

  4. [サービスまたはユースケース][エラスティックコンテナサービス] を選択し、次に [エラスティックコンテナのサービスタスク] を選択します。

  5. [Next] を選択します。

  6. [アクセス許可を追加] セクションで [AWSDistroOpenTelemetryPolicyForXray] を検索し、そのポリシーを選択します。

  7. (オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

    1. [アクセス許可の境界の設定] セクションを開き、[アクセス許可の境界を使用してロールのアクセス許可の上限を設定する] を選択します。

      IAM には、アカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。

    2. アクセス許可の境界として使用するポリシーを選択します。

  8. [Next] を選択します。

  9. このロールの目的を識別しやすいロール名またはロール名サフィックスを入力します。

    重要

    ロールに名前を付けるときは、次のことに注意してください。

    • ロール名は AWS アカウント内で一意である必要があります。ただし、大文字と小文字は区別されません。

      例えば、PRODROLEprodrole の両方の名前でロールを作成することはできません。ロール名がポリシーまたは ARN の一部として使用される場合、ロール名は大文字と小文字が区別されます。ただし、サインインプロセスなど、コンソールにロール名がユーザーに表示される場合、ロール名は大文字と小文字が区別されません。

    • 他のエンティティがロールを参照する可能性があるため、ロールを作成した後にロール名を編集することはできません。

  10. (オプション) [説明] にロールの説明を入力します。

  11. (オプション) ロールのユースケースとアクセス許可を編集するには、[ステップ 1: 信頼されたエンティティを選択] または [ステップ 2: アクセス権限を追加] のセクションで [編集] を選択します。

  12. (オプション) ロールの識別、整理、検索を簡単にするには、キーと値のペアとしてタグを追加します。IAM でのタグの使用に関する詳細については、『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。

  13. ロールを確認したら、[Create role] (ロールを作成) を選択します。

タスク定義の OpenTelemetry サイドカー用 AWS Distro を指定

Amazon ECS コンソールでは、[メトリクス収集の使用] オプションを使用することで、OpenTelemetry サイドカーコンテナ用の AWS Distro を作成するエクスペリエンスが簡素化されます。詳細については、「コンソールを使用した Amazon ECS タスク定義の作成」を参照してください。

Amazon ECS コンソールを使用していない場合、OpenTelemetry サイドカーコンテナ用 AWS Distro を手動でタスク定義に追加できます。次のタスク定義の例は、Amazon CloudWatch 統合に OpenTelemetry サイドカー用 AWS Distro を追加するためのコンテナの定義を示しています。

{ "family": "otel-using-cloudwatch", "taskRoleArn": "arn:aws:iam::111122223333:role/AmazonECS_OpenTelemetryCloudWatchRole", "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "aws-otel-emitter", "image": "application-image", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/aws-otel-emitter", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "dependsOn": [{ "containerName": "aws-otel-collector", "condition": "START" }] }, { "name": "aws-otel-collector", "image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.30.0", "essential": true, "command": [ "--config=/etc/ecs/ecs-cloudwatch.yaml" ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } } } ], "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "cpu": "1024", "memory": "3072" }