传播

跨服务传播器

分布式追踪超出了单个服务的范围,这意味着需要在服务之间传播一些上下文,以创建Span之间的父子关系。这需要进行跨服务的上下文传播,通过该机制将追踪的标识符发送给远程进程。

针对HTTP框架和服务器的仪表化库,例如 Phoenix, Cowboy, Elli 以及客户端如 Tesla 将自动使用全局注册的传播器注入或提取上下文。默认情况下,使用的全局传播器是W3C Trace ContextBaggage格式。

可以通过应用程序环境变量text_map_propagators来配置这些全局传播器:

%% sys.config ... {text_map_propagators, [baggage, trace_context]}, ...
## runtime.exs ... text_map_propagators: [:baggage, :trace_context], ...

或者通过以逗号分隔的列表形式使用环境变量OTEL_PROPAGATORS进行配置。这两种形式的配置都接受以下值:trace_contextbaggageb3b3multi

要手动注入或提取上下文,可以使用otel_propagator_text_map模块:

%% 使用进程字典中的上下文添加到一个空的标题列表中 Headers = otel_propagator_text_map:inject([]), %% 从Headers中创建一个进程字典中的上下文 otel_propagator_text_map:extract(Headers),
# 使用进程字典中的上下文添加到一个空的标题列表中 headers = :otel_propagator_text_map.inject([]) # 从headers中创建一个进程字典中的上下文 :otel_propagator_text_map.extract(headers)

otel_propagator_text_map:inject/1otel_propagator_text_map:extract/1使用全局注册的传播器。要使用特定的传播器,可以使用otel_propagator_text_map:inject/2otel_propagator_text_map:extract/2,其中第一个参数是要调用的传播器模块的名称。

最后修改 December 10, 2023: translate (a4350d6e)