

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用适用于开放遥测的 AWS Distro 设置从 Amazon ECS 获取指标
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS"></a>

本节介绍如何使用开放遥测发行版 (ADOT) 从亚马逊弹性容器服务 (Amazon ECS) 收集指标，并使用开放遥测发行版 (ADOT) 将其采集到适用于普罗米修斯的亚马逊托 AWS 管服务中。它还描述了如何在 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`，请参阅 [Authenticator-Sigv4 on](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/sigv4authextension)。 GitHub

```
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>

要将抓取的指标发送到适用于 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)。

在您将 `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` 前缀查询和查看您的指标。