通过 Operator 部署的 Opentelemetry Collector 具有重复的指标

问题描述 投票:0回答:1

我当前的设置是这样的:

Otel 运营商将 Otel Collector 部署为 K8s 部署,在我的案例中,有 2 个 Pod。 在同一个命名空间中,我有一堆配置了自动检测的服务,这些服务将遥测数据推送到酒店收集器服务。

在同一个命名空间中,我有一个 PodMonitor,Prometheus 使用它来发现 Otel Pod 并从中进行抓取。 两个 Pod 都作为目标出现在 Prometheus 中,一切似乎都很好。

我面临的问题是指标是重复的。对于相同的服务,我有相同的指标,每个指标都来自一个 otel-collector 实例。

例如:

process_runtime_jvm_classes_loaded{app_kubernetes_io_component="opentelemetry-collector", app_kubernetes_io_instance="platform.otel", app_kubernetes_io_managed_by="opentelemetry-operator", app_kubernetes_io_name="otel-collector", app_kubernetes_io_part_of="opentelemetry", app_kubernetes_io_version="latest", container="otc-container", container_id="a8616d3c490b842c66601c64b2bfead4e84de8277c408c69c7c4efd30539142d", endpoint="prometheus", exported_job="cwb-be", host_arch="amd64", host_name="cwb-be-685c64f54c-zlzkb", instance="10.43.151.208:8889", job="platform/otel-collector-pod-monitor", k8s_container_name="cwb-be", k8s_deployment_name="cwb-be", k8s_namespace_name="platform", k8s_node_name="aks-aerasvc1-95583755-vmss000000", k8s_pod_name="cwb-be-685c64f54c-zlzkb", k8s_replicaset_name="cwb-be-685c64f54c", namespace="platform", os_description="Linux 5.15.0-1051-azure", os_type="linux", pod="otel-collector-5dccb6749f-x6xkj", pod_template_hash="5dccb6749f", process_pid="9", process_runtime_description="Amazon.com Inc. OpenJDK 64-Bit Server VM 25.372-b07", process_runtime_name="OpenJDK Runtime Environment", process_runtime_version="1.8.0_372-b07", service_name="cwb-be", service_version="2.7.0-main-b153", telemetry_auto_version="1.32.1", telemetry_sdk_language="java", telemetry_sdk_name="opentelemetry", telemetry_sdk_version="1.34.1"}
25691

还有重复的,如果仔细观察,您会发现唯一的区别是提供此指标的收集器

process_runtime_jvm_classes_loaded{app_kubernetes_io_component="opentelemetry-collector", app_kubernetes_io_instance="platform.otel", app_kubernetes_io_managed_by="opentelemetry-operator", app_kubernetes_io_name="otel-collector", app_kubernetes_io_part_of="opentelemetry", app_kubernetes_io_version="latest", container="otc-container", container_id="a8616d3c490b842c66601c64b2bfead4e84de8277c408c69c7c4efd30539142d", endpoint="prometheus", exported_job="cwb-be", host_arch="amd64", host_name="cwb-be-685c64f54c-zlzkb", instance="10.43.157.118:8889", job="platform/otel-collector-pod-monitor", k8s_container_name="cwb-be", k8s_deployment_name="cwb-be", k8s_namespace_name="platform", k8s_node_name="aks-aerasvc1-95583755-vmss000000", k8s_pod_name="cwb-be-685c64f54c-zlzkb", k8s_replicaset_name="cwb-be-685c64f54c", namespace="platform", os_description="Linux 5.15.0-1051-azure", os_type="linux", pod="otel-collector-5dccb6749f-7jhfg", pod_template_hash="5dccb6749f", process_pid="9", process_runtime_description="Amazon.com Inc. OpenJDK 64-Bit Server VM 25.372-b07", process_runtime_name="OpenJDK Runtime Environment", process_runtime_version="1.8.0_372-b07", service_name="cwb-be", service_version="2.7.0-main-b153", telemetry_auto_version="1.32.1", telemetry_sdk_language="java", telemetry_sdk_name="opentelemetry", telemetry_sdk_version="1.34.1"}
25691

第一个收集器是:otel-collector-5dccb6749f-x6xkj,第二个收集器是otel-collector-5dccb6749f-7jhfg。而且度量值是完全一样的。似乎这个指标被推送到两个收集器以引起某种共鸣,然后普罗米修斯收集它们。

我部署 2 个收集器实例是否做错了什么?有没有办法消除这种重复? 你建议我做什么?

我不明白该服务如何将相同的指标推送给两个收集器,因为它们落后于通过 K8s 服务提供的 lb。

PS:我可以在 prometheus 或 grafana 级别删除它,但我担心我做错了什么。

谢谢

open-telemetry open-telemetry-collector open-telemetry-java
1个回答
0
投票

我认为这里的问题是 Prometheus 的限制。示例:

如果您的指标

hello
是酒店加减计数器,则这将转换为普罗米修斯仪表。如果您有三个 pod 发送
hello{pod='<pod-name>'} 1
,您将向您的两个收集器池发送以下内容:

hello{pod='a'} 1
hello{pod='b'} 1
hello{pod='c'} 1

从每个 Pod 到收集器的发送基本上是随机的,除非您使用某种自定义负载平衡策略(自动检测不会出现这种情况)。

hello{pod='a', collector='col-a'} 1
hello{pod='b', collector='col-a'} 1
hello{pod='c', collector='col-a'} 1
hello{pod='a', collector='col-b'} 1
hello{pod='b', collector='col-b'} 1
hello{pod='c', collector='col-b'} 1

因此,对于每个请求,它都可以发送到任一收集器。当在普罗米修斯中聚合时,这个问题就会显现出来。如果您尝试

sum
这些指标,您将观察到实际值的
n
系数(其中n是池中收集器的数量。)

以下是阻止这种情况发生的选项:

  1. 使用prometheus远程写入导出器将样本直接写入prometheus
  2. 将 OTLP 直接发送到 prometheus(这是一个 alpha 功能)
  3. 使用 max 聚合这些指标以仅获得单个值
© www.soinside.com 2019 - 2024. All rights reserved.