

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

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

メトリクスは Amazon Managed Service for Prometheus にエクスポートされ、Amazon Managed Grafana ダッシュボードを使用して閲覧できます。アプリケーションは、Prometheus ライブラリまたは OpenTelemetry SDK のいずれかとインストルメント化する必要があります。OpenTelemetry SDK を使用したアプリケーションの計測の詳細については、AWS Distro for OpenTelemetry ドキュメントの「[AWS Distro for OpenTelemetry の概要](https://aws-otel.github.io/docs/introduction)」を参照してください。

Prometheus ライブラリを使用する場合は、アプリケーションがメトリクスデータのスクレイプに使用する `/metrics` のエンドポイントを公開する必要があります。Prometheus ライブラリを使用してアプリケーションを計測する詳細については、「Prometheus ドキュメント」の「[Prometheus クライアントライブラリ](https://prometheus.io/docs/instrumenting/clientlibs/)」を参照してください。

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

AWS Distro for OpenTelemetry での Fargate 統合で Amazon ECS を使用し、 Amazon Managed Service for Prometheus にアプリケーションメトリクスを送信する場合には、次のことを考慮する必要があります。
+ AWS Distro for OpenTelemetry の統合は、Fargate でホストされている Amazon ECS ワークロード、および、Amazon EC2 インスタンスでホストされている Amazon ECS ワークロード用としてサポートされています。現在、外部インスタンスはサポートされていません。
+ デフォルトの OpenElementry 用 AWS Distro には、Amazon Managed Service for Prometheus へエクスポートするとき、アプリケーションメトリクス用にタスクレベルのディメンションがすべて含まれています。アプリケーションをインストルメント化して、ディメンションを追加することもできます。詳細については、「AWS Distro for OpenTelemetry ドキュメント」の「[Amazon Managed Service for Prometheus のリモート書き込みの使用開始](https://aws-otel.github.io/docs/getting-started/prometheus-remote-write-exporter)」を参照してください。

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

OpenTelemetry サイドカー用 AWS Distro を使用して Amazon ECS と Amazon Managed Service for Prometheus の統合には、タスク IAM ロールを作成してタスク定義でロールを指定する必要があります。このタスク用の IAM ロールは、タスク定義を登録する前に、手動で作成する必要があります。タスクロールの作成に関する詳細については、「[Amazon ECS タスクの IAM ロール](task-iam-roles.md)」を参照してください。

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)」を参照してください。

AWS Distro for OpenTelemetry と Amazon Managed Service for Prometheus の統合には、次のアクセス許可が必要です。
+ logs:PutLogEvents
+ logs:CreateLogGroup
+ logs:CreateLogStream
+ logs:DescribeLogStreams
+ logs:DescribeLogGroups
+ cloudwatch:PutMetricData

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

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

Amazon ECS コンソールを使用していない場合、OpenTelemetry サイドカーコンテナ用 AWS Distro を手動でタスク定義に追加できます。次のタスク定義の例は、Amazon Managed Service for Prometheus 統合向けに 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": "aws-region",
					"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-amp.yaml"
			],
			"environment": [{
				"name": "AWS_PROMETHEUS_ENDPOINT",
				"value": "https://aps-workspaces.aws-region.amazonaws.com/workspaces/ws-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111/api/v1/remote_write"
			}],
			"logConfiguration": {
				"logDriver": "awslogs",
				"options": {
					"awslogs-create-group": "True",
					"awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector",
					"awslogs-region": "aws-region",
					"awslogs-stream-prefix": "ecs"
				}
			}
		}
	],
	"networkMode": "awsvpc",
	"requiresCompatibilities": [
		"FARGATE"
	],
	"cpu": "1024",
	"memory": "3072"
}
```