

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 使用者指南*》中的[建立工作區](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 上的[驗證器 - 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 ECS 任務定義來抓取 Amazon Managed Service for Prometheus。您的工作定義應包含名為 `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 角色。如需有關建立此角色並附加政策的詳細資訊，請參閱[為任務建立 IAM 角色和政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

在您將 `AmazonPrometheusRemoteWriteAccess` 附加至 IAM 角色並將該角色用於您的任務之後，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` 個前綴查詢和檢視您的指標。