通过访问日志定位请求异常延迟的原因

在工作负载中注入Sidecar,可以实现流量劫持,并按照您的配置对流量进行修改和路由。Sidecar处理和转发带来的额外时间开销会增加请求的延迟时间。在节点性能充足的情况下,Sidecar通常不会对并发能力有显著的影响。本文介绍如何通过访问日志定位请求异常延迟的原因。

步骤一:在请求路径上确认耗时异常的组件

您可以查看访问日志中的duration字段,确认请求在数据平面组件消耗的总时间,包括读取并转发请求至上游、等待上游响应,以及读取并转发上游响应至下游的时间。

如果该时间异常,继续向上游方向排查调用路径上的下一个组件。如果调用路径上,下一个组件的延迟符合预期,表示耗时异常发生在当前组件上;如果下一个组件异样,继续向上游排查,直至确定耗时异常的最上游组件。

步骤二:确认组件的耗时原因

组件耗时的原因包括网络传输耗时上游处理耗时。您可以根据访问日志中的相关字段,确认耗时的原因。

网络传输耗时

查看访问日志的request_durationrequest_tx_duration字段。

  • 如果request_duration耗时长,表示当前数据面组件(Sidecar或网关)从下游读取请求,消耗了较长时间。

  • 如果request_tx_duration耗时长,表示请求发送至上游,消耗了较长时间。

对于携带了Body的HTTP请求,Body是边读取边发送给上游(而非读取后发送)。因此,request_duration的时间长会间接导致request_tx_duration的时间变长。

  • 如果仅有request_tx_duration耗时长,表示读取请求速度较快,但发送给上游的速度较慢。

  • 如果request_durationresponse_tx_duration同时耗时长,表示从上游读取Response或将Response转发给下游的速度较慢。

上游处理耗时

访问日志的response_duration字段,表示从请求发生到收到上游响应的首个字节所消耗的时间。

response_duration减去request_tx_duration的字段值,表示上游处理所消耗的时间。如果时间较长,表示上游处理速度较慢或者上游连接网络延迟较高。