核心可观测性功能Trace ID 与分布式 tracing

Trace ID 与分布式 tracing

trace ID 是一个唯一标识符,会随着请求在系统中的流转而被携带。在分布式系统中,trace ID 让你能够跨多个服务关联操作,并重建请求的完整生命周期。

默认情况下,Litefuse 会分配 32 位十六进制的 trace ID 和 16 位十六进制的 observation ID。

创建和访问 Trace ID

使用 create_trace_id() 生成 trace ID。如果提供了 seed,则 ID 是确定性的。使用相同的 seed 会得到相同的 ID。这对于将外部 ID 与 Litefuse trace 关联非常有用。

from langfuse import get_client, Langfuse
langfuse = get_client()
 
external_request_id = "req_12345"
deterministic_trace_id = langfuse.create_trace_id(seed=external_request_id)

使用 get_current_trace_id() 获取当前 trace ID,使用 get_current_observation_id 获取当前 observation ID。

你也可以通过 observation.trace_idobservation.id 直接从 LangfuseSpan 或 LangfuseGeneration 对象上访问 trace ID 和 observation ID。

from langfuse import get_client, Langfuse
langfuse = get_client()
 
with langfuse.start_as_current_observation(as_type="span", name="my-op") as current_op:
    trace_id = langfuse.get_current_trace_id()
    observation_id = langfuse.get_current_observation_id()
    print(trace_id, observation_id)

设置自定义 Trace ID

在使用 Langfuse SDK 包裹应用代码时,你可以指定一个自定义的 trace ID。

使用 Context Manager

from langfuse import get_client
 
langfuse = get_client()
 
# Use a predefined trace ID with trace_context parameter
with langfuse.start_as_current_observation(
    as_type="span",
    name="my-operation",
    trace_context={
        "trace_id": "abcdef1234567890abcdef1234567890",  # Must be 32 hex chars
        "parent_span_id": "fedcba0987654321"  # Optional, 16 hex chars
    }
) as observation:
    print(f"This observation has trace_id: {observation.trace_id}")
    # YOUR APPLICATION CODE HERE

使用装饰器

from langfuse import observe
 
@observe()
def my_operation(input):
    # YOUR APPLICATION CODE HERE
    result = call_llm(input)
    return result
 
process_user_request(
    input="Hello",
    langfuse_trace_id="abcdef1234567890abcdef1234567890" # Must be 32 hex chars
)
这个页面对你有帮助吗?