在 EKS on Fargate 中使用 AWS Distro for OpenTelemetry 配合 Amazon Managed Service for Prometheus
在本方案中,我们将展示如何为一个示例 Go 应用程序添加检测工具, 并使用 AWS Distro for OpenTelemetry (ADOT) 将 metrics 导入 Amazon Managed Service for Prometheus。 然后我们使用 Amazon Managed Grafana 来可视化这些 metrics。
我们将搭建一个 Amazon Elastic Kubernetes Service (EKS) on AWS Fargate 集群,并使用 Amazon Elastic Container Registry (ECR) 仓库 来演示完整的场景。
本指南大约需要 1 小时完成。
基础设施
在以下章节中,我们将搭建本方案所需的基础设施。
架构
ADOT 管道使我们能够使用 ADOT Collector 来 抓取经 Prometheus 检测的应用程序,并将抓取的 metrics 导入到 Amazon Managed Service for Prometheus。

ADOT Collector 包含两个与 Prometheus 相关的组件:
- Prometheus Receiver,以及
- AWS Prometheus Remote Write Exporter。
有关 Prometheus Remote Write Exporter 的更多信息,请查看: Getting Started with Prometheus Remote Write Exporter for AMP。
前提条件
创建 EKS on Fargate 集群
我们的演示应用程序是一个 Kubernetes 应用,将在 EKS on Fargate 集群中运行。
首先,使用提供的 cluster-config.yaml
模板文件创建 EKS 集群,将 <YOUR_REGION> 替换为
AMP 支持的区域之一。
确保在 shell 会话中设置 <YOUR_REGION>,例如在 Bash 中:
export AWS_DEFAULT_REGION=<YOUR_REGION>
使用以下命令创建集群:
eksctl create cluster -f cluster-config.yaml
创建 ECR 仓库
要将应用程序部署到 EKS,我们需要一个容器仓库。
您可以使用以下命令在您的账户中创建新的 ECR 仓库。
同样请确保设置 <YOUR_REGION>。
aws ecr create-repository \
--repository-name prometheus-sample-app \
--image-scanning-configuration scanOnPush=true \
--region <YOUR_REGION>
设置 AMP
首先,使用 AWS CLI 创建 Amazon Managed Service for Prometheus 工作区:
aws amp create-workspace --alias prometheus-sample-app
使用以下命令验证工作区是否已创建:
aws amp list-workspaces
更多详情请查看 AMP 入门指南。
设置 ADOT Collector
下载 adot-collector-fargate.yaml 并按以下步骤中描述的参数编辑此 YAML 文件。
在本示例中,ADOT Collector 配置使用注解 (scrape=true)
来指定要抓取的目标 endpoint。这使得 ADOT Collector 能够区分
示例应用 endpoint 和集群中 kube-system 的 endpoint。
如果您想抓取其他示例应用,可以从 re-label 配置中移除此设置。
按以下步骤编辑下载的文件以适应您的环境:
1. 将 <YOUR_REGION> 替换为您当前的区域。
2. 将 <YOUR_ENDPOINT> 替换为您工作区的 remote write URL。
执行以下查询获取您的 AMP remote write URL endpoint。
首先,获取工作区 ID:
YOUR_WORKSPACE_ID=$(aws amp list-workspaces \
--alias prometheus-sample-app \
--query 'workspaces[0].workspaceId' --output text)
然后使用以下命令获取您工作区的 remote write URL endpoint:
YOUR_ENDPOINT=$(aws amp describe-workspace \
--workspace-id $YOUR_WORKSPACE_ID \
--query 'workspace.prometheusEndpoint' --output text)api/v1/remote_write
请确保 YOUR_ENDPOINT 确实是 remote write URL,即
URL 应以 /api/v1/remote_write 结尾。
创建部署文件后,我们可以使用以下命令将其应用到集群:
kubectl apply -f adot-collector-fargate.yaml
设置 AMG
按照 Amazon Managed Grafana - 入门指南设置新的 AMG 工作区。
确保在创建过程中将"Amazon Managed Service for Prometheus"添加为数据源。

应用程序
在本方案中,我们将使用 AWS 可观测性仓库中的一个 示例应用程序。
这个 Prometheus 示例应用生成所有四种 Prometheus metric 类型
(counter、gauge、histogram、summary)并在 /metrics endpoint 上公开它们。
构建容器镜像
要构建容器镜像,首先克隆 Git 仓库并切换到目录:
git clone https://github.com/aws-observability/aws-otel-community.git && \
cd ./aws-otel-community/sample-apps/prometheus
首先,设置区域(如果之前未设置)和账户 ID。
将 <YOUR_REGION> 替换为您当前的区域。例如,
在 Bash shell 中如下所示:
export AWS_DEFAULT_REGION=<YOUR_REGION>
export ACCOUNTID=`aws sts get-caller-identity --query Account --output text`
接下来,构建容器镜像:
docker build . -t "$ACCOUNTID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/prometheus-sample-app:latest"
如果您的环境中 go mod 由于 proxy.golang.or i/o 超时而失败,
您可以通过编辑 Dockerfile 绕过 go mod proxy。
将 Docker 文件中的以下行:
RUN GO111MODULE=on go mod download
更改为:
RUN GOPROXY=direct GO111MODULE=on go mod download
现在您可以将容器镜像推送到之前创建的 ECR 仓库。
首先,登录默认 ECR registry:
aws ecr get-login-password --region $AWS_DEFAULT_REGION | \
docker login --username AWS --password-stdin \
"$ACCOUNTID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com"
最后,将容器镜像推送到您之前创建的 ECR 仓库:
docker push "$ACCOUNTID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/prometheus-sample-app:latest"