istio - 如何配置 istio-proxy 来记录 traceId?
问题描述
我正在使用版本 1.3.5 的 istio。是否需要设置任何配置以允许 istio-proxy 记录 traceId?我正在使用已启用的 jaeger 跟踪(机智 zipkin 协议)。通过使用 traceId 日志记录,我想完成一件事: - 在上游的多个服务中记录相关性。基本上我可以通过某些traceId过滤所有日志。
解决方案
v1.12.0
根据istio 使用的envoy 代理文档1.3
:
跟踪上下文传播
Envoy 提供了报告有关网格中服务之间通信的跟踪信息的能力。但是,为了能够关联调用流中各种代理生成的跟踪信息,服务必须在入站和出站请求之间传播特定的跟踪上下文。
无论使用哪个跟踪提供程序,服务都应该传播 x-request-id 以启用跨被调用服务的日志记录以进行关联。
跟踪提供者还需要额外的上下文,以使跨度(逻辑工作单元)之间的父/子关系能够被理解。这可以通过直接在服务本身内使用 LightStep(通过 OpenTracing API)或 Zipkin 跟踪器来实现,从入站请求中提取跟踪上下文并将其注入任何后续出站请求。这种方法还将使服务能够创建额外的跨度,描述在服务内部完成的工作,这在检查端到端跟踪时可能很有用。
或者,跟踪上下文可以由服务手动传播:
使用 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 标头。
推荐阅读
- c - 如何在 C 中使用有符号或无符号整数进行位映射?
- python - 如何使用 python 与 Web 服务建立经过身份验证的连接?
- c# - for 循环的问题,并尝试将列表声明从列表字符串到日期时间的转换中分离出来
- python - 从数字列表中创建最大数字的 Python 函数
- python - numpy:与非零相反(获取零元素的索引)
- python - 如何在python中让一个函数“调用”接受任何函数作为参数和她的参数?
- sql-server - SQL查找总重量
- python - python:根据日期将csv拆分为多个csv
- php - 如何仅为某些路线加载服务提供者 - Laravel
- java - Wiered Spring kafka 消费者问题。具有相同配置的两个消费者具有不同的行为