spring-boot - 在多 Pod Spring 应用程序中获取请求/秒

标签 spring-boot docker openshift prometheus

我在负载平衡环境 (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/

相关文章:

wordpress - 解决 openshift 磁盘配额使用问题

tomcat - 在 Openshift v3 Tomcat 镜像中编辑 catalina.sh

java.lang.IllegalStateException : Unable to find a @SpringBootConfiguration, 您需要在测试中使用 @ContextConfiguration

maven - 找不到 SpringApplicationConfiguration : Erroneous spring-boot-starter-test content?

git - 在另一个公共(public) GitHub 存储库更改上触发自动 Docker Hub 构建

docker - 如何从 dockerfile 构建奇异容器

docker - kubernetes 的安全工具

java - 使用 RequestBody 的 POST 请求不起作用

amazon-web-services - 使用java Jedis连接aws elasticache redis

docker - 如何使用 docker images confluenceinc/cp-kafka 创建 Kafka 生产者和控制台消费者?