ECS使用 AWS Distro 进行开放遥测设置从亚马逊获取的指标 - Amazon Managed Service for Prometheus

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

ECS使用 AWS Distro 进行开放遥测设置从亚马逊获取的指标

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

先决条件

重要

在开始之前,您必须在具有默认设置的 AWS Fargate 集群上安装亚马逊ECS环境、适用于 Prometheus 的亚马逊托管服务工作空间和亚马逊托管 Grafana 工作空间。我们假设您熟悉容器工作负载、Amazon Managed Service for Prometheus 和 Amazon Managed Grafana。

有关更多信息,请参阅以下链接:

  • 有关如何使用默认设置在 Fargate 集群上创建亚马逊ECS环境的信息,请参阅亚马逊ECS开发者指南中的创建集群

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

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

步骤 1:定义自定义ADOT收集器容器镜像

使用以下配置文件作为模板来定义自己的ADOT收集器容器镜像。Replace(替换) my-remote-URL 以及 my-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]

第 2 步:将您的ADOT收藏器容器镜像推送到 Amazon ECR 存储库

使用 Dockerfile 创建您的容器镜像并将其推送到亚马逊弹性容器注册表 (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. 创建亚马逊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 存储库。Replace(替换) 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

第 3 步:创建亚马逊ECS任务定义以抓取 Prometheus 的亚马逊托管服务

创建亚马逊ECS任务定义以抓取 Prometheus 的亚马逊托管服务。您的任务定义应包括一个名为 adot-collector 的容器和一个名为 prometheus 的容器。prometheus 生成指标,adot-collector 抓取 prometheus

注意

Amazon Managed Service for Prometheus 作为一项服务运行,从容器中收集指标。在本例中,容器以代理模式在本地运行 Prometheus,将本地指标发送到 Amazon Managed Service for Prometheus。

示例:任务定义

以下是任务定义具体形式的示例。您可以使用此示例作为模板来创建自己的任务定义。将的imageadot-collector值替换为存储库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" }

第 4 步:向您的任务授予访问适用于 Prometheus 的亚马逊托管服务的权限

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

在您加入您的AmazonPrometheusRemoteWriteAccessIAM角色并使用该角色执行任务后,亚马逊ECS可以将您抓取的指标发送到适用于 Prometheus 的亚马逊托管服务。

第 5 步:在 Amazon Managed Grafana 中可视化您的指标

重要

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

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

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

  3. 选择添加数据来源

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