入口控制器中 request_duration 和 response_duration prometheus 指标之间的差异

San*_*ath 9 prometheus kubernetes-ingress nginx-ingress

我们的 prometheus 中提供了入口控制器的以下 3 个指标,我试图了解这些指标之间的差异。

我的理解,

request_duration - 在 nginx 中到达请求与将响应发送回客户端之间的时间。

ingress_upstream_latency - 上游服务器/pod 接受请求之前 nginx 中等待的时间。

response_duration - 从后端容器 /pod 获取响应的时间

# HELP nginx_ingress_controller_request_duration_seconds The request processing time in milliseconds
# TYPE nginx_ingress_controller_request_duration_seconds histogram

# HELP nginx_ingress_controller_ingress_upstream_latency_seconds Upstream service latency per Ingress
# TYPE nginx_ingress_controller_ingress_upstream_latency_seconds summary

# HELP nginx_ingress_controller_response_duration_seconds The time spent on receiving the response from the upstream server
# TYPE nginx_ingress_controller_response_duration_seconds histogram
Run Code Online (Sandbox Code Playgroud)

因此,根据上述指标 request_duration = ingress_upstream_latency+ response_duration

  1. 当我做了一些测试时,我能够看到response_duration大于request_duration,这是怎么可能的,或者上面的理解是错误的。我试图了解这两个指标 nginx_ingress_controller_request_duration_seconds 和 nginx_ingress_controller_response_duration_seconds 之间的区别

chi*_*iik 0

仅供参考:nginx_ingress_controller_request_duration_secondsrequest_timenginx var,它的文档说:

从客户端读取第一个字节到将最后一个字节发送到客户端后写入日志之间经过的时间。

所以这个是关于最终客户端访问 nginx 的总持续时间 - 即受客户端及其网络的影响。另外两个是关于 nginx 与上游/后端服务器的通信。

您不能只添加您提到的 2 个指标来获取request_time,因为还有其他事情,例如等待涉及的客户端。

upstream_response_timerequest_time由于测量方法的不同,可能比 的大几毫。