分布式链路追踪:从 Span 到调用链

FreeGuideOnline 最新 2026-06-30

python from opentelemetry import trace tracer = trace.get_tracer(name)

def handle_request(): with tracer.start_as_current_span("service-A-main") as span: span.set_attribute("http.method", "POST") # 执行业务... headers = {} # 将追踪上下文注入到HTTP头 propagate_context(headers) response = call_service_b(headers) span.add_event("called service B")


**服务 B(被调用方)**

```python
def call_service_b(headers):
    # 从请求头中提取上下文,并创建一个新Span
    context = extract_context(headers)
    with tracer.start_as_current_span("service-B-handler", context=context) as span:
        span.set_attribute("http.status_code", 200)
        # 模拟数据库查询
        with tracer.start_as_current_span("db-query") as db_span:
            db_span.set_attribute("db.statement", "SELECT...")
        return "OK"