

# 애플리케이션 추적 데이터를 사용하여 Amazon ECS 최적화 기회 식별
<a name="trace-data"></a>

Amazon ECS는 AWS Distro for OpenTelemetry와 통합되어 애플리케이션에서 추적 데이터를 수집합니다. Amazon ECS는 AWS Distro for OpenTelemetry 사이드카 컨테이너를 사용하여 추적 데이터를 수집하고 AWS X-Ray로 라우팅합니다. 자세한 정보는 [Amazon ECS에서 AWS Distro for OpenTelemetry Collector 설정](https://aws-otel.github.io/docs/setup/ecs)을 참조하세요. 그런 다음, AWS X-Ray를 사용하여 오류 및 예외를 식별하고 성능 병목 현상과 응답 시간을 분석할 수 있습니다.

AWS Distro for OpenTelemetry Collector가 AWS X-Ray로 추적 데이터를 전송하려면 추적 데이터를 생성하도록 애플리케이션을 구성해야 합니다. 자세한 정보는 *AWS X-Ray 개발자 안내서*의 [AWS X-Ray용 애플리케이션 계측](https://docs.aws.amazon.com/xray/latest/devguide/xray-instrumenting-your-app.html)을 참조하세요.

## AWS Distro for OpenTelemetry와 AWS X-Ray 통합에 필요한 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 통합을 위한 AWS Distro for OpenTelemetry 사이드카 지정
<a name="trace-data-containerdefinitions"></a>

Amazon ECS 콘솔은 **추적 수집 사용** 옵션으로 AWS Distro for OpenTelemetry 사이드카 컨테이너 생성을 단순화합니다. 자세한 내용은 [콘솔을 사용하여 Amazon ECS 작업 정의 생성](create-task-definition.md) 섹션을 참조하세요.

Amazon ECS 콘솔을 사용하지 않는 경우 태스크 정의에 AWS Distro for OpenTelemetry 사이드카 컨테이너를 추가할 수 있습니다. 다음 태스크 정의 조각은 AWS X-Ray 통합을 위한 AWS Distro for OpenTelemetry 사이드카를 추가하기 위한 컨테이너 정의를 보여줍니다.

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