

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Distro for Open Telemetry を使用して Amazon ECS からのメトリクス取り込みを設定する
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS"></a>

このセクションでは、Amazon Elastic Container Service (Amazon ECS) からメトリクスを収集し、 AWS Distro for Open Telemetry (ADOT) を使用して Amazon Managed Service for Prometheus に取り込む方法について説明します。また、Amazon Managed Grafana でメトリクスを視覚化する方法についても説明します。

## 前提条件
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-prereq"></a>

**重要**  
開始する前に、 AWS Fargate クラスター上のデフォルト設定の Amazon ECS 環境と、Amazon Managed Service for Prometheus ワークスペースおよび Amazon Managed Grafana ワークスペースが必要です。ユーザーがコンテナのワークロード、Amazon Managed Service for Prometheus、Amazon Managed Grafana に精通していることを前提としています。

詳細については、以下のリンクを参照してください。
+ Fargate クラスターにデフォルト設定で Amazon ECS 環境を作成する方法については、「Amazon ECS デベロッパーガイド**」の「[クラスターの作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)」を参照してください。
+ Amazon Managed Service for Prometheus ワークスペースを作成する方法については、「Amazon Managed Service for Prometheus ユーザーガイド**」の「[ワークスペースの作成](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html)」を参照してください。
+ Amazon Managed Grafana ワークスペースを作成する方法については、「Amazon Managed Grafana User Guide**」の「[Creating a workspace](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-create-workspace.html)」を参照してください。

## ステップ 1: カスタム ADOT コレクターコンテナイメージを定義する
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-create"></a>

以下の設定ファイルをテンプレートとして使用して、独自の ADOT コレクターコンテナイメージを定義します。*my-remote-URL* と *my-region* は、使用中の `endpoint` と `region` の値に置き換えます。設定を adot-config.yaml** というファイルに保存します。

**注記**  
この設定では、`sigv4auth` 拡張機能を使用して Amazon Managed Service for Prometheus への呼び出しを認証します。`sigv4auth` の構成方法の詳細については、GitHub の「[Authenticator - Sigv4](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/sigv4authextension)」を参照してください。

```
receivers:
  prometheus:
    config:
      global:
        scrape_interval: 15s
        scrape_timeout: 10s
      scrape_configs:
      - job_name: "prometheus"
        static_configs:
        - targets: [ 0.0.0.0:9090 ]
  awsecscontainermetrics:
    collection_interval: 10s
processors:
  filter:
    metrics:
      include:
        match_type: strict
        metric_names:
          - ecs.task.memory.utilized
          - ecs.task.memory.reserved
          - ecs.task.cpu.utilized
          - ecs.task.cpu.reserved
          - ecs.task.network.rate.rx
          - ecs.task.network.rate.tx
          - ecs.task.storage.read_bytes
          - ecs.task.storage.write_bytes
exporters:
  prometheusremotewrite:
    endpoint: my-remote-URL
    auth:
      authenticator: sigv4auth
  logging:
    loglevel: info
extensions:
  health_check:
  pprof:
    endpoint: :1888
  zpages:
    endpoint: :55679
  sigv4auth:
    region: my-region
    service: aps
service:
  extensions: [pprof, zpages, health_check, sigv4auth]
  pipelines:
    metrics:
      receivers: [prometheus]
      exporters: [logging, prometheusremotewrite]
    metrics/ecs:
      receivers: [awsecscontainermetrics]
      processors: [filter]
      exporters: [logging, prometheusremotewrite]
```

## ステップ 2: ADOT コレクターコンテナイメージを Amazon ECR リポジトリにプッシュする
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-push"></a>

Dockerfile を使用して、コンテナイメージを作成して Amazon Elastic Container Registry (ECR) リポジトリにプッシュします。

1. Dockerfile をビルドして、コンテナイメージをコピーして OTEL Docker イメージに追加します。

   ```
   FROM public.ecr.aws/aws-observability/aws-otel-collector:latest
   COPY adot-config.yaml /etc/ecs/otel-config.yaml
   CMD ["--config=/etc/ecs/otel-config.yaml"]
   ```

1. Amazon ECR リポジトリを作成します。

   ```
   # create repo:
   COLLECTOR_REPOSITORY=$(aws ecr create-repository --repository aws-otel-collector \ 
                                  --query repository.repositoryUri --output text)
   ```

1. コンテナイメージを作成します。

   ```
   # build ADOT collector image:
   docker build -t $COLLECTOR_REPOSITORY:ecs .
   ```
**注記**  
コンテナのビルドは、そのコンテナが実行される環境と同じ環境で行うことを前提としています。そうでない場合、イメージのビルド時に `--platform` パラメータの使用が必要になることがあります。

1. Amazon ECR リポジトリにサインインします。*my-region* は、使用中の `region` の値に置き換えます。

   ```
   # sign in to repo:
   aws ecr get-login-password --region my-region | \
           docker login --username AWS --password-stdin $COLLECTOR_REPOSITORY
   ```

1. コンテナイメージをプッシュします。

   ```
   # push ADOT collector image:
   docker push $COLLECTOR_REPOSITORY:ecs
   ```

## ステップ 3: Amazon ECS タスク定義を作成して Amazon Managed Service for Prometheus をスクレイピングする
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-task"></a>

Amazon Managed Service for Prometheus をスクレイピングする Amazon ECS タスク定義を作成します。タスク定義には、`adot-collector` という名前のコンテナと、`prometheus` という名前のコンテナを含める必要があります。`prometheus` はメトリクスを生成し、`adot-collector` は `prometheus` をスクレイピングします。

**注記**  
Amazon Managed Service for Prometheus はサービスとして実行され、コンテナからメトリクスを収集します。この場合のコンテナは、Prometheus をエージェントモードでローカルで実行し、ローカルのメトリクスを Amazon Managed Service for Prometheus に送信します。

**例: タスク定義**

以下の例は、タスク定義がどのようなものかを示しています。この例をテンプレートとして使用して、独自のタスク定義を作成できます。`adot-collector` の `image` の値は、リポジトリの URL とイメージタグ (`$COLLECTOR_REPOSITORY:ecs`) に置き換えます。`adot-collector` と `prometheus` の `region` の値は、使用中の `region` の値に置き換えます。

```
{
  "family": "adot-prom",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "adot-collector",
      "image": "account_id.dkr.ecr.region.amazonaws.com/image-tag",
      "essential": true,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-adot-collector",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    },
    {
      "name": "prometheus",
      "image": "prom/prometheus:main",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-prom",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "1024"
}
```

## ステップ 4: Amazon Managed Service for Prometheus にアクセスする許可をタスクに付与する
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-attach"></a>

スクレイピングされたメトリクスを Amazon Managed Service for Prometheus に送信するには、Amazon ECS タスクに AWS API オペレーションを呼び出すための正しいアクセス許可が必要です。タスク用の IAM ロールを作成し、そのロールに `AmazonPrometheusRemoteWriteAccess` ポリシーをアタッチする必要があります。このロールを作成してポリシーをアタッチする方法の詳細については、「[タスク用の IAM ロールとポリシーの作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)」を参照してください。

IAM ロールに `AmazonPrometheusRemoteWriteAccess` をアタッチし、そのロールをタスクに使用したら、スクレイピングされたメトリクスを Amazon ECS によって Amazon Managed Service for Prometheus に送信できます。

## ステップ 5: Amazon Managed Grafana でメトリクスを視覚化する
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-vis"></a>

**重要**  
開始する前に、Amazon ECS タスク定義に対して Fargate タスクを実行する必要があります。そうしないと、Amazon Managed Service for Prometheus でメトリクスを使用することができません。

1. Amazon Managed Grafana ワークスペースのナビゲーションペインで、 AWS アイコンの下にある**データソース**を選択します。

1. **[データソース]** タブの **[サービス]** で、**[Amazon Managed Service for Prometheus]** を選択し、**[デフォルトのリージョン]** を選択します。

1. **[データソースの追加]** を選択します。

1. `ecs` および `prometheus` プレフィックスを使用して、メトリクスのクエリと表示を行います。