

# アプリケーショントレースデータを使用して Amazon ECS 最適化の機会を特定する
<a name="trace-data"></a>

Amazon ECS は OpenTelemetry 用 AWS Distro と統合して、アプリケーションからトレースデータを収集します。Amazon ECS は OpenTelemetry サイドカーコンテナ用の AWS Distroを使用して、トレースデータを収集し、AWS X-Ray にルーティングします。詳細については、「[Amazon ECS の OpenTelemetry Collector 用 AWS Distro の設定](https://aws-otel.github.io/docs/setup/ecs)」を参照してください。そして、AWS X-Ray を使用してエラーや例外の特定、パフォーマンスのボトルネックや応答時間の分析を行うことができます。

OpenTelemetry Collector 用 AWS Distro がトレースデータを AWS X-Ray に送信するため、アプリケーションがトレースデータを作成できるように設定する必要があります。詳細については、「[AWS X-Rayデベロッパーガイド](https://docs.aws.amazon.com/xray/latest/devguide/xray-instrumenting-your-app.html)」の「*AWS X-Ray用にアプリケーションを計測する*」を参照してください。

## AWS X-Ray を使用した AWS Distro for OpenTelemetry の統合に必要な IAM 権限
<a name="trace-data-iam"></a>

Amazon ECS と AWS Distro for OpenTelemetry の統合には、タスク用のロールを作成し、タスク定義でそのロールを指定する必要があります。コンテナログが CloudWatch Logs にルーティングされるように AWS Distro for OpenTelemetry サイドカーを設定することをお勧めします。

**重要**  
AWS Distro for OpenTelemetry 統合を使用してアプリケーションメトリクスの収集も行う場合は、タスク用の IAM ロールに、その統合に必要な権限も含まれている必要があります。詳細については、「[アプリケーションメトリクスを使用して Amazon ECS アプリケーションのパフォーマンスを相関させる](metrics-data.md)」を参照してください。

ロールを作成した後に、以下のアクセス許可でポリシーを作成し、ロールにアタッチします。
+ `logs:PutLogEvents`
+ `logs:CreateLogGroup`
+ `logs:CreateLogStream`
+ `logs:DescribeLogStreams`
+ `logs:DescribeLogGroups`
+ `logs:PutRetentionPolicy`
+ `xray:PutTraceSegments`
+ `xray:PutTelemetryRecords`
+ `xray:GetSamplingRules`
+ `xray:GetSamplingTargets`
+ `xray:GetSamplingStatisticSummaries`
+ `ssm:GetParameters`

# タスク定義で AWS X-Ray 統合向け OpenTelemetry サイドカー用 AWS Distro の指定
<a name="trace-data-containerdefinitions"></a>

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

Amazon ECS コンソールを使用していない場合、OpenTelemetry サイドカーコンテナ用 AWS Distro をタスク定義に追加できます。次のタスク定義のスニペットは、AWS X-Ray 統合向けの OpenTelemetry サイドカー用 AWS Distro を追加するためのコンテナの定義を示します。

```
{
	"family": "otel-using-xray",
	"taskRoleArn": "arn:aws:iam::111122223333:role/AmazonECS_OpenTelemetryXrayRole",
	"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/otel-instance-metrics-config.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"
}
```