我在负载平衡环境 (OpenShift) 中拥有同一个 Spring-Boot 应用程序的多个 docker 镜像 (pod),并且每个 docker 镜像都公开 Prometheus 端点。我在 Prometheus 中使用以下查询来获取单个 Docker 镜像的每秒请求数:
速率(http_server_requests_seconds_count [1m])
问题在于,当 Prometheus 从多个 Pod 收集数据时,查询不会返回正确的答案(实际上,由于负载均衡器的原因,每次 Prometheus 调用应用程序端点时,一个 Pod 都会成为目标)。
有没有办法使用 Prometheus 获取所有 Pod 每秒的请求数?
提前致谢。
最佳答案
在我看来,您将 Prometheus 指向您的负载均衡器,而不是分别指向您的每个实例。这将为您提供完全无法使用的指标,因为它们将从您的一个或另一个实例中随机收集,并且这些指标中不会有任何内容告诉您它来自哪个实例。
您需要做的是将 Prometheus 指向应用程序的每个实例。然后,Prometheus 将分别收集每个实例的指标,并应用带有收集实例的 IP 地址或 DNS 名称的 instance
标签。 IE。您将拥有 N 个独立的 http_server_requests_seconds_count
指标:
http_server_requests_seconds_count{job="myapp",instance="1.2.3.4:8080"} 1234
http_server_requests_seconds_count{job="myapp",instance="5.6.7.8:8080"} 5678
...
如果您随后查询 Prometheus rate(http_server_requests_seconds_count[1m])
,您将获得每个实例具有单独值的向量:
{job="myapp",instance="1.2.3.4:8080"} 1.234
{job="myapp",instance="5.6.7.8:8080"} 5.678
...
如果您想要跨实例的每个作业的请求总速率,您可以查询 sum by(job) (rate(http_server_requests_seconds_count[1m]))
。
关于spring-boot - 在多 Pod Spring 应用程序中获取请求/秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130845/