使用适用于开放遥测的 AWS Distro 设置从 Amazon ECS 获取指标 - Amazon Managed Service for Prometheus

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

使用适用于开放遥测的 AWS Distro 设置从 Amazon ECS 获取指标

本节介绍如何使用开放遥测发行版 (ADOT) 从亚马逊弹性容器服务 (Amazon ECS) 收集指标,并使用开放遥测发行版 (ADOT) 将其采集到适用于普罗米修斯的亚马逊托 AWS 管服务中。它还描述了如何在 Amazon Managed Grafana 中可视化您的指标。

先决条件

重要

在开始之前,您必须在具有默认设置的 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 开发人员指南》中的创建集群

  • 有关如何创建 Amazon Managed Service for Prometheus 工作区的信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的创建工作区

  • 有关如何创建 Amazon Managed Grafana 工作区的信息,请参阅《Amazon Managed Grafana 用户指南》中的创建工作区

定义自定义 ADOT 收集器容器映像

使用以下配置文件作为模板来定义您自己的 ADOT 收集器容器映像。将 my-remote-URLmy-region 替换为您的 endpointregion 值。将配置保存在名为 adot-config.yaml 的文件中。

注意

此配置使用 sigv4auth 扩展验证对 Amazon Managed Service for Prometheus 的调用。有关配置的更多信息sigv4auth,请参阅 Authenticator-Sigv4 on。 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]

将您的 ADOT 收集器容器映像推送到 Amazon ECR 存储库

使用 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"]
  2. 创建 Amazon ECR 存储库。

    # create repo: COLLECTOR_REPOSITORY=$(aws ecr create-repository --repository aws-otel-collector \ --query repository.repositoryUri --output text)
  3. 创建容器映像。

    # build ADOT collector image: docker build -t $COLLECTOR_REPOSITORY:ecs .
    注意

    这会假设您在运行容器的环境中构建容器。否则,您可能需要在构建映像时使用 --platform 参数。

  4. 登录 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
  5. 推送您的容器映像。

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

创建 Amazon ECS 任务定义以抓取 Amazon Managed Service for Prometheus

创建 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-collectorimage 值替换为您的存储库 URL 和映像标签($COLLECTOR_REPOSITORY:ecs)。将 adot-collectorprometheusregion 值替换为您的 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" }

将 AWS 托管式策略 AmazonPrometheusRemoteWriteAccess 附加到您任务的 IAM 角色

要将抓取的指标发送到适用于 Prometheus 的亚马逊托管服务,您的 Amazon ECS 任务必须具有正确的权限才能 AWS 为您调用 API 操作。您必须为任务创建 IAM 角色和并将 AmazonPrometheusRemoteWriteAccess 策略附加至其中。有关创建该角色并附加策略的更多信息,请参阅为任务创建 IAM 角色和策略

在您将 AmazonPrometheusRemoteWriteAccess 附加到您的 IAM 角色并使用该角色执行任务后,Amazon ECS 可以将您抓取的指标发送到 Amazon Managed Service for Prometheus。

在 Amazon Managed Grafana 中可视化您的指标

重要

在开始之前,您必须在 Amazon ECS 任务定义上运行 Fargate 任务。否则,Amazon Managed Service for Prometheus 将无法使用您的指标。

  1. 在 Amazon Managed Grafana 工作空间的导航窗格中,选择图标下方的数据源。 AWS

  2. 数据来源选项卡上的服务中,选择 Amazon Managed Service for Prometheus,然后选择您的默认区域

  3. 选择添加数据来源

  4. 使用 ecsprometheus 前缀查询和查看您的指标。