AWS Distro for OpenTelemetry を使用した ECS クラスターでのシステムメトリクスの収集
AWS Distro for OpenTelemetry (ADOT) は、OpenTelemetry プロジェクトの AWS がサポートするセキュアなディストリビューションです。ADOT を使用することで、複数のソースからテレメトリーデータを収集し、関連付けられたメトリクス、トレース、ログを複数のモニタリングソリューションに送信できます。ADOT は Amazon ECS クラスターに 2 つの異なるパターンでデプロイできます。
ADOT Collector のデプロイパターン
-
サイドカーパターンでは、ADOT Collector がクラスター内の各タスク内で実行され、そのタスク内のアプリケーションコンテナから収集されたテレメトリデータのみを処理します。このデプロイパターンは、Collector が Amazon ECS Task Metadata Endpoint からタスクメタデータを読み取り、CPU、メモリ、ネットワーク、ディスクなどのリソース使用量メ トリクスを生成する必要がある場合にのみ必要です。

-
セントラルコレクターパターンでは、ADOT Collector の単一インスタンスがクラスターにデプロイされ、クラスター上で実行されているすべてのタスクからのテレメトリデータを処理します。これは最も一般的に使用されるデプロイパターンです。Collector は REPLICA または DAEMON サービススケジューラー戦略を使用してデプロイされます。

ADOT Collector のアーキテクチャにはパイプラインの概念があります。1 つの Collector に複数のパイプラインを含めることができます。各パイプラインは、メトリクス、トレース、ログという 3 種類のテレメトリデータのいずれかを処理することに専念します。各種類のテレメトリデータに対して複数のパイプラインを設定できます。この汎用性のあるアーキテクチャにより、1 つの Collector が、クラスターに個別にデプロイする必要がある複数のオブザーバビリティエージェントの役割を果たすことができます。これにより、クラスター上のオブザーバビリティエージェントのデプロイメントフットプリントが大幅に削減されます。パイプラインを構成する Collector の主要コンポーネントは、Receivers、Processors、Exporters の 3 つのカテゴリーに分類されます。Extensions と呼ばれる二次的なコンポーネントも あり、これらは Collector に追加できる機能を提供しますが、パイプラインの一部ではありません。
Receivers、Processors、Exporters、Extensions の詳細な説明については、OpenTelemetry のドキュメントを参照してください。
ECS タスクメトリクス収集のための ADOT Collector のデプロイ
ECS タスクレベルでリソース使用率メトリクスを収集するには、以下のようなタスク定義を使用して、サイドカーパターンで ADOT Collector をデプロイする必要があります。
Collector に使用されるコンテナイメージには、複数のパイプライン設定が同梱されています。
要件に応じてそれらの中から 1 つを選択し、コンテナ定義の command セクションで設定ファイルのパスを指定できます。
この値を --config=/etc/ecs/container-insights/otel-task-metrics-config.yaml に設定すると、パイプライン設定 が使用され、Collector と同じタスク内で実行されている他のコンテナからリソース使用率メトリクスとトレースを収集し、Amazon CloudWatch と AWS X-Ray に送信します。
具体的には、Collector は AWS ECS Container Metrics Receiver を使用して、Amazon ECS タスクメタデータエンドポイント からタスクメタデータと Docker の統計情報を読み取り、それらから CPU、メモリ、ネットワーク、ディスクなどのリソース使用率メトリクスを生成します。
{
"family":"AdotTask",
"taskRoleArn":"arn:aws:iam::123456789012:role/ECS-ADOT-Task-Role",
"executionRoleArn":"arn:aws:iam::123456789012:role/ECS-Task-Execution-Role",
"networkMode":"awsvpc",
"containerDefinitions":[
{
"name":"application-container",
"image":"..."
},
{
"name":"aws-otel-collector",
"image":"public.ecr.aws/aws-observability/aws-otel-collector:latest",
"cpu":512,
"memory":1024,
"command": [
"--config=/etc/ecs/container-insights/otel-task-metrics-config.yaml"
],
"portMappings":[
{
"containerPort":2000,
"protocol":"udp"
}
],
"essential":true
}
],
"requiresCompatibilities":[
"EC2"
],
"cpu":"1024",
"memory":"2048"
}