使用 AWS Distro 在亚马逊 Elastic Kubernetes Service 集群 OpenTelemetry 上设置指标提取 - Amazon Managed Service for Prometheus

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

使用 AWS Distro 在亚马逊 Elastic Kubernetes Service 集群 OpenTelemetry 上设置指标提取

您可以使用 D AWS istor for OpenTelemetry (ADOT) 收集器从装有 Prometheus 工具的应用程序中获取指标,然后将这些指标发送到适用于 Prometheus 的亚马逊托管服务。

注意

有关ADOT收集器的更多信息,请参阅AWS 发行版。 OpenTelemetry

有关支持 Prometheus 的应用程序的更多信息,请参阅。与 Prometheus 兼容的指标有哪些?

收集 Prometheus 指标ADOT涉及三个 OpenTelemetry 组成部分:Prometheus 接收器、Prometheus 远程写入导出器和 Sigv4 身份验证扩展。

您可以使用现有的 Prometheus 配置来配置 Prometheus Receiver,以执行服务发现和指标抓取。Prometheus Receiver 以 Prometheus 展览格式抓取指标。您要抓取的任何应用程序或终端节点都应使用 Prometheus 客户端库进行配置。Prometheus Receiver 支持 Prometheus 文档配置中描述的全套 Prometheus 抓取和重新标记配置。您可以将这些配置直接粘贴到ADOT收集器配置中。

Prometheus Remote Write Exporter 使用 remote_write 终端节点将抓取的指标发送到您的管理门户工作区。导出数据的HTTP请求将使用 AWS Sigv4(安全身份验证 AWS 协议)和 Sigv4 身份验证扩展插件进行签名。有关更多信息,请参阅签名版本 4 签名流程

收集器会自动发现 EKS Amazon 上的 Prometheus 指标终端节点,并使用中的配置。 <kubernetes_sd_config>

以下演示是在运行 Amazon Elastic Kubernetes Service 或自行管理 Kubernetes 的集群上进行此配置的示例。要执行这些步骤,您必须拥有来自默认 AWS 凭证链中任何潜在选项的 AWS 证书。有关更多信息,请参阅AWS SDK为 Go 配置。此演示使用了一个用于流程集成测试的示例应用程序。该示例应用程序在 /metrics 端点处公开指标,就像 Prometheus 客户端库一样。

先决条件

在开始以下摄取设置步骤之前,必须为服务帐号和信任策略设置自己的IAM角色。

为服务帐号和信任策略设置IAM角色
  1. 按照中的步骤为服务帐号创建IAM角色设置服务角色从 Amazon EKS 集群中摄取指标

    ADOT收集器将在抓取和导出指标时使用此角色。

  2. 接下来,编辑信任策略。打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  3. 在左侧导航窗格中,选择角色并找到您在步骤 1 中创建的。amp-iamproxy-ingest-role

  4. 选择信任关系选项卡,然后选择编辑信任关系

  5. 在信任关系策略中JSON,aws-amp替换为,adot-col然后选择更新信任策略。最终的信任策略应如下所示:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/openid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/openid:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account" } } } ] }
  6. 选择权限选项卡,并确保将以下权限策略附加到该角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aps:RemoteWrite", "aps:GetSeries", "aps:GetLabels", "aps:GetMetricMetadata" ], "Resource": "*" } ] }

启用 Prometheus 指标收集

注意

当您在 Amazon 中创建命名空间时 EKSalertmanager,默认情况下节点导出器处于禁用状态。

在亚马逊或 Kubernetes 集群上启用 Prometheus 集合 EKS
  1. 从存储库中分叉并克隆示例应用程序,网址为aws-otel-community

    然后,运行以下命令。

    cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
  2. 将此图像推送到注册表,例如 Amazon ECR 或 DockerHub。

  3. 通过复制此 Kubernetes 配置并应用,在集群中部署示例应用程序。通过在 prometheus-sample-app.yaml 文件中替换 {{PUBLIC_SAMPLE_APP_IMAGE}},将映像更改为刚才推送的映像。

    curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-sample-app.yaml -o prometheus-sample-app.yaml kubectl apply -f prometheus-sample-app.yaml
  4. 输入以下命令以验证示例应用程序是否已启动。在命令的输出中,您将在 NAME 列中看到 prometheus-sample-app

    kubectl get all -n aoc-prometheus-pipeline-demo
  5. 启动ADOT收集器的默认实例。为此,请先输入以下命令来提取收集器的 Kubernetes 配置。ADOT

    curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-daemonset.yaml -o prometheus-daemonset.yaml

    然后编辑模板文件,用您 Amazon Managed Service for Prometheus 工作区的 remote_write 终端节点替换 YOUR_ENDPOINT,并用您的区域替换 YOUR_REGION。查看工作区详细信息时,请使用 Amazon Managed Service for Prometheus 控制台中显示的 remote_write 终端节点。

    你还需要YOUR_ACCOUNT_ID在 Kubernetes 配置的服务账户部分更改为你的 AWS 账户 ID。

    在此示例中,ADOT收集器配置使用注释 (scrape=true) 来告知要抓取哪些目标端点。这允许ADOT收集器将示例应用程序终端节点与集群中的 kube-system 终端节点区分开来。如果您想抓取其它示例应用程序,则可以将其从重新标记配置中删除。

  6. 输入以下命令部署ADOT收集器。

    kubectl apply -f prometheus-daemonset.yaml
  7. 输入以下命令以验证ADOT收集器是否已启动。在 NAMESPACE 列中查找 adot-col

    kubectl get pods -n adot-col
  8. 使用日志导出器验证管道是否正常运行。我们的示例模板已经与日志导出器集成。输入以下命令。

    kubectl get pods -A kubectl logs -n adot-col name_of_your_adot_collector_pod

    从示例应用程序中抓取的一些指标如下所示:

    Resource labels: -> service.name: STRING(kubernetes-service-endpoints) -> host.name: STRING(192.168.16.238) -> port: STRING(8080) -> scheme: STRING(http) InstrumentationLibraryMetrics #0 Metric #0 Descriptor: -> Name: test_gauge0 -> Description: This is my gauge -> Unit: -> DataType: DoubleGauge DoubleDataPoints #0 StartTime: 0 Timestamp: 1606511460471000000 Value: 0.000000
  9. 要测试 Amazon Managed Service for Prometheus 是否已收到这些指标,请使用 awscurl此工具允许您通过 AWS Sigv4 身份验证通过命令行发送HTTP请求,因此您必须在本地设置 AWS 凭证,并具有从亚马逊托管服务查询 Prometheus 的正确权限。有关安装的说明,请参阅 awscurl。awscurl

    在以下命令中,将 AMP_REGIONAMP_ENDPOINT替换为您 Amazon Managed Service for Prometheus 工作区的信息。

    awscurl --service="aps" --region="AMP_REGION" "https://AMP_ENDPOINT/api/v1/query?query=adot_test_gauge0" {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"adot_test_gauge0"},"value":[1606512592.493,"16.87214000011479"]}]}}

    如果您收到指标响应,则表示您的管道设置已成功,并且该指标已成功从示例应用程序传播到 Amazon Managed Service for Prometheus。

清理

要清理此演示,请输入以下命令。

kubectl delete namespace aoc-prometheus-pipeline-demo kubectl delete namespace adot-col

高级配置

Prometheus Receiver 支持 Prometheus 文档配置中描述的全套 Prometheus 抓取和重新标记配置。您可以将这些配置直接粘贴到ADOT收集器配置中。

Prometheus Receiver 的配置包括您的服务发现、抓取配置和重新标记配置。接收方配置如下所示。

receivers: prometheus: config: [[Your Prometheus configuration]]

下面是一个配置示例:

receivers: prometheus: config: global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: kubernetes-service-endpoints sample_limit: 10000 kubernetes_sd_configs: - role: endpoints tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

如果您已有 Prometheus 配置,则必须将 $ 字符替换为 $$,以避免将值替换为环境变量。*这对于 relabel_configurations 的替换值尤其重要。例如,如果您从以下 relabel_configuration 开始:

relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: ${1}://${2}${3} target_label: __param_target

它将变成以下内容:

relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: $${1}://${2}${3} target_label: __param_target

Prometheus Remote Write Exporter 和 Sigv4 Authentication Extension

Prometheus Remote Write Exporter 和 Sigv4 Authentication Extension 的配置比 Prometheus Receiver 简单。在管道的这个阶段,指标已经被摄取完毕,我们准备将这些数据导出到 Amazon Managed Service for Prometheus。对可与 Amazon Managed Service for Prometheus 进行通信的成功配置的最低要求如以下示例所示。

extensions: sigv4auth: service: "aps" region: "user-region" exporters: prometheusremotewrite: endpoint: "https://aws-managed-prometheus-endpoint/api/v1/remote_write" auth: authenticator: "sigv4auth"

此配置使用默认 AWS 凭证链中的 AWS 凭据发送由 AWS Sigv4 签名的HTTPS请求。有关更多信息,请参阅配置 AWS SDK for Go。必须将服务指定为 aps

无论采用何种部署方法,ADOT收集器都必须有权访问默认 AWS 凭证链中列出的选项之一。Sigv4 身份验证扩展依赖于 AWS SDK for Go 并使用它来获取凭据和进行身份验证。您必须确保这些凭证对于 Amazon Managed Service for Prometheus 具有远程写入权限。