我们用Kubernetes和Nginx 入口控制器使用各种后端服务运行我们的平台。我们还使用 New Relic(以及 Prometheus、Grafana)作为我们的可观察性仪表板和警报。Nginx Ingress Controller 是我们所有请求的入口点。
当我们不断收到请求时,如果我们的后端服务的所有线程都很忙,那么我假设请求开始排队,并且随着线程/资源开始释放,它们最终得到服务。
目前,我无法找到一个指标来告诉我请求在被 Nginx 接收并最终由我们的后端提供服务之前等待的时间。
Nginx 入口控制器Prometheus 指标包含以下 4 个延迟指标:
nginx_ingress_controller_request_duration_seconds
(nginx 变量request_time
:)nginx_ingress_controller_response_duration_seconds
(nginx 变量upstream_response_time
:)nginx_ingress_controller_connect_duration_seconds
(nginx 变量upstream_connect_time
:)nginx_ingress_controller_header_duration_seconds
(nginx 变量upstream_header_time
:)
在绘制这些指标并尝试各种负载测试时,我发现所有这些指标都给出了请求被 Nginx 接收后的延迟,但它们似乎都没有包括请求在被 Nginx 接收之前的等待时间。
我正在寻找以下问题的答案:
- 是否
upstream_connect_time
包括请求的等待时间(在被 Nginx 接收之前)? - 以上 4 个指标是否包括请求的等待时间(在被 Nginx 接收之前)?
- 我发现了一个变量,
upstream_queue_time
称为ngx_http_upstream_module
这里。这个指标是否给出了请求的等待时间(在被 Nginx 接收之前)?如果是,这是否仅适用于 Nginx Plus?我可以使用哪个指标? - 还有其他方法可以让我了解请求的等待时间(在被 Nginx 接收之前)吗?
如果我的上述理解不正确,请告诉我。
非常感谢您花时间和专业知识来回答这个问题。非常感谢。