本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 Remote Write Exporter 使用 remote_write
终端节点将抓取的指标发送到您的管理门户工作区。导出数据的HTTP请求将使用 AWS Sigv4(安全身份验证 AWS 协议)和 Sigv4 身份验证扩展插件进行签名。有关更多信息,请参阅签名版本 4 签名流程。
收集器会自动发现 EKS Amazon 上的 Prometheus 指标终端节点,并使用中的配置。
以下演示是在运行 Amazon Elastic Kubernetes Service 或自行管理 Kubernetes 的集群上进行此配置的示例。要执行这些步骤,您必须拥有来自默认 AWS
凭证链中任何潜在选项的 AWS 证书。有关更多信息,请参阅AWS SDK为 Go 配置。此演示使用了一个用于流程集成测试的示例应用程序。该示例应用程序在 /metrics
端点处公开指标,就像 Prometheus 客户端库一样。
先决条件
在开始以下摄取设置步骤之前,必须为服务帐号和信任策略设置自己的IAM角色。
为服务帐号和信任策略设置IAM角色
-
按照中的步骤为服务帐号创建IAM角色设置服务角色从 Amazon EKS 集群中摄取指标。
ADOT收集器将在抓取和导出指标时使用此角色。
-
接下来,编辑信任策略。打开IAM控制台,网址为https://console.aws.amazon.com/iam/
。 -
在左侧导航窗格中,选择角色并找到您在步骤 1 中创建的。amp-iamproxy-ingest-role
-
选择信任关系选项卡,然后选择编辑信任关系。
-
在信任关系策略中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" } } } ] } -
选择权限选项卡,并确保将以下权限策略附加到该角色。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aps:RemoteWrite", "aps:GetSeries", "aps:GetLabels", "aps:GetMetricMetadata" ], "Resource": "*" } ] }
启用 Prometheus 指标收集
注意
当您在 Amazon 中创建命名空间时 EKSalertmanager
,默认情况下节点导出器处于禁用状态。
在亚马逊或 Kubernetes 集群上启用 Prometheus 集合 EKS
-
从存储库中分叉并克隆示例应用程序,网址为aws-otel-community
。 然后,运行以下命令。
cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
-
将此图像推送到注册表,例如 Amazon ECR 或 DockerHub。
-
通过复制此 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
-
输入以下命令以验证示例应用程序是否已启动。在命令的输出中,您将在
NAME
列中看到prometheus-sample-app
。kubectl get all -n aoc-prometheus-pipeline-demo
-
启动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 终端节点区分开来。如果您想抓取其它示例应用程序,则可以将其从重新标记配置中删除。 -
输入以下命令部署ADOT收集器。
kubectl apply -f prometheus-daemonset.yaml
-
输入以下命令以验证ADOT收集器是否已启动。在
NAMESPACE
列中查找adot-col
。kubectl get pods -n adot-col
-
使用日志导出器验证管道是否正常运行。我们的示例模板已经与日志导出器集成。输入以下命令。
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
-
要测试 Amazon Managed Service for Prometheus 是否已收到这些指标,请使用
awscurl
。此工具允许您通过 AWS Sigv4 身份验证通过命令行发送HTTP请求,因此您必须在本地设置 AWS 凭证,并具有从亚马逊托管服务查询 Prometheus 的正确权限。有关安装的说明,请参阅 awscurl。awscurl
在以下命令中,将
AMP_REGION
和AMP_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 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 具有远程写入权限。