【发布时间】:2020-04-21 19:12:01
【问题描述】:
我正在使用版本 1.3.5 的 istio。是否需要设置任何配置以允许 istio-proxy 记录 traceId?我正在使用已启用的 jaeger 跟踪(机智 zipkin 协议)。通过 traceId 日志记录,我想完成一件事: - 在上游的多个服务中记录相关性。基本上我可以通过某些traceId过滤所有日志。
【问题讨论】:
我正在使用版本 1.3.5 的 istio。是否需要设置任何配置以允许 istio-proxy 记录 traceId?我正在使用已启用的 jaeger 跟踪(机智 zipkin 协议)。通过 traceId 日志记录,我想完成一件事: - 在上游的多个服务中记录相关性。基本上我可以通过某些traceId过滤所有日志。
【问题讨论】:
根据 istio 1.3 使用的 envoy v1.12.0 的 envoy 代理文档:
跟踪上下文传播
Envoy 提供了报告有关网格中服务之间通信的跟踪信息的功能。但是,为了能够关联调用流中各种代理生成的跟踪信息,服务必须在入站和出站请求之间传播特定的跟踪上下文。
无论使用哪个跟踪提供程序,该服务都应传播 x-request-id 以启用要关联的调用服务之间的日志记录。
跟踪提供程序还需要额外的上下文,以便理解跨度(逻辑工作单元)之间的父/子关系。这可以通过直接在服务本身内使用 LightStep(通过 OpenTracing API)或 Zipkin 跟踪器来实现,从入站请求中提取跟踪上下文并将其注入任何后续出站请求。这种方法还可以让服务创建额外的 span,描述在服务内部完成的工作,这在检查端到端跟踪时可能很有用。
或者,跟踪上下文可以由服务手动传播:
使用 LightStep 跟踪器时,Envoy 依赖服务来传播 x-ot-span-context 向其他服务发送 HTTP 请求时的 HTTP 标头。
使用 Zipkin 跟踪器时,Envoy 依赖服务来传播 B3 HTTP 标头 ( x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, 和 x-b3-flags)。 这 x-b3-sampled 标头也可以由外部客户端提供,以启用或 禁用对特定请求的跟踪。此外,单 b3 支持标头传播格式,这是一种更压缩的 格式。
使用 Datadog 跟踪器时,Envoy 依赖该服务来传播 Datadog 特定的 HTTP 标头 ( x-datadog-trace-id, x-datadog-parent-id, x-datadog-sampling-priority)。
TLDR:traceId 标头需要手动添加到 B3 HTTP 标头中。
【讨论】:
Whichever tracing provider is being used, the service should propagate the x-request-id to enable logging across the invoked services to be correlated. 这基本上回答了我的问题,因为我意识到默认情况下,envoy/istio-proxy 具有包含 x-request-id 值的 accessLog。