

# アプリケーションメトリクスを Amazon CloudWatch にエクスポートする
<a name="application-metrics-cloudwatch"></a>

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

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

## 考慮事項
<a name="application-metrics-cloudwatch-considerations"></a>

OpenTelemetry 用 AWS Distro と Fargate 統合に Amazon ECS を使用して Amazon CloudWatch にアプリケーションメトリクスを送信する場合、次のことを考慮する必要があります。
+ この統合では、カスタムアプリケーションメトリクスのみを CloudWatch に送信します。タスクレベルのメトリクスが必要な場合は、Amazon ECS クラスター設定で Container Insights を有効にします。詳細については、「[オブザーバビリティが強化された Container Insights を使用し、Amazon ECS コンテナを監視する](cloudwatch-container-insights.md)」を参照してください。
+ AWS Distro for OpenTelemetry の統合は、Fargate でホストされている Amazon ECS ワークロード、および、Amazon EC2 インスタンスでホストされている Amazon ECS ワークロード用としてサポートされています。現在、外部インスタンスはサポートされていません。
+ CloudWatch は、メトリクスごとに最大 30 個のディメンションをサポートします。デフォルトの Amazon ECS は `TaskARN`、`ClusterARN`、`LaunchType`、`TaskDefinitionFamily`、`TaskDefinitionRevision` ディメンションをメトリクスに含めることが既定となります。残りの 25 個のディメンションは、アプリケーションで定義できます。30 個以上のディメンションが設定されている場合、CloudWatch はそれらを表示できません。この場合、アプリケーションメトリクスは `ECS/AWSOTel/Application` CloudWatch のメトリクス名前空間に表示されますが、ディメンションは表示されません。アプリケーションを計測して、さらにディメンションを追加できます。詳細については、「AWS Distro for OpenTelemetry ドキュメント」の「[AWS Distro for OpenTelemetry で CloudWatch のメトリクスを使用する](https://aws-otel.github.io/docs/getting-started/cloudwatch-metrics)」を参照してください。

## OpenTelemetry 用 AWS Distro と Amazon CloudWatch の統合に必要な IAM 許可
<a name="application-metrics-cloudwatch-iam"></a>

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

**重要**  
OpenTelemetry 用 AWS Distro 統合を使用してアプリケーションのトレースデータも収集する場合、タスク IAM ロールもその統合に必要な許可が含まれていることを確認します。詳細については、「[アプリケーショントレースデータを使用して Amazon ECS 最適化の機会を特定する](trace-data.md)」を参照してください。  
アプリケーションに権限が追加で必要な場合は、それらの権限をこのポリシーに追加する必要があります。各タスク定義では、タスク用の IAM ロールを 1 個のみ指定できます。例えば、Systems Manager に保存されているカスタム設定ファイルを使用する場合、この IAM ポリシーに `ssm:GetParameters` 権限を追加する必要があります。

**Elastic Container Service のサービスロールを作成するには (IAM コンソール)**

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

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

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

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

1. [**次へ**] を選択します。

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

1. (オプション) [アクセス許可の境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

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

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

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

1. [**次へ**] を選択します。

1. このロールの目的を識別しやすいロール名またはロール名サフィックスを入力します。
**重要**  
ロールに名前を付けるときは、次のことに注意してください。  
ロール名は AWS アカウント内で一意である必要があります。ただし、大文字と小文字は区別されません。  
例えば、**PRODROLE** と **prodrole** の両方の名前でロールを作成することはできません。ロール名がポリシーまたは ARN の一部として使用される場合、ロール名は大文字と小文字が区別されます。ただし、サインインプロセスなど、コンソールにロール名がユーザーに表示される場合、ロール名は大文字と小文字が区別されません。
他のエンティティがロールを参照する可能性があるため、ロールを作成した後にロール名を編集することはできません。

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

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

1. (オプション) ロールの識別、整理、検索を簡単にするには、キーと値のペアとしてタグを追加します。IAM でのタグの使用の詳細については、「*IAM ユーザーガイド*」の「[AWS Identity and Access Management リソースのタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)」を参照してください。

1. ロールを確認したら、**[ロールを作成]** を選択します。

## タスク定義の OpenTelemetry サイドカー用 AWS Distro を指定
<a name="application-metrics-cloudwatch-containerdefinitions"></a>

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

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"
}
```