使用 Prometheus 的平均请求持续时间
Average request duration using Prometheus
我已经在 Kubernetes 集群中部署了 Istio Bookinfo 应用程序。按照文档,我尝试使用以下查询来测量平均请求持续时间:
rate(istio_request_duration_milliseconds_sum[1m]) / rate(istio_request_duration_milliseconds_count[1m])
这个查询 returns 我 "doubled" 结果即对于每个请求我得到两个结果,具有不同的 Value 但相同的 source 和 destination,一个标记为 reporter="source",另一个标记为 reporter="destination"。我找不到任何关于它的说明,我也不清楚这些措施是如何运作的。为什么我返回了两个值?
指标确实是从两个来源报告的,一次来自请求发送者,另一次来自请求接收者。这有点多余,但在某些情况下,值会有所不同,尤其是请求持续时间:来自请求发送方 (reporter=source
),持续时间代表整个请求延迟(服务器处理时间 + 网络往返),而来自请求receiver(reporter=destination
),主要代表服务器处理时间。
在一些特殊情况下,没有冗余并且指标只报告一次(无论是来自源还是来自目标):例如当故障注入或流量镜像等 istio 功能发挥作用时。
因此,在 Prometheus 中,您应该始终使用 {reporter="source"}
或 {reporter="destination"}
.
过滤所有查询
我已经在 Kubernetes 集群中部署了 Istio Bookinfo 应用程序。按照文档,我尝试使用以下查询来测量平均请求持续时间:
rate(istio_request_duration_milliseconds_sum[1m]) / rate(istio_request_duration_milliseconds_count[1m])
这个查询 returns 我 "doubled" 结果即对于每个请求我得到两个结果,具有不同的 Value 但相同的 source 和 destination,一个标记为 reporter="source",另一个标记为 reporter="destination"。我找不到任何关于它的说明,我也不清楚这些措施是如何运作的。为什么我返回了两个值?
指标确实是从两个来源报告的,一次来自请求发送者,另一次来自请求接收者。这有点多余,但在某些情况下,值会有所不同,尤其是请求持续时间:来自请求发送方 (reporter=source
),持续时间代表整个请求延迟(服务器处理时间 + 网络往返),而来自请求receiver(reporter=destination
),主要代表服务器处理时间。
在一些特殊情况下,没有冗余并且指标只报告一次(无论是来自源还是来自目标):例如当故障注入或流量镜像等 istio 功能发挥作用时。
因此,在 Prometheus 中,您应该始终使用 {reporter="source"}
或 {reporter="destination"}
.