Skip to content

Latest commit

 

History

History
78 lines (57 loc) · 1.82 KB

File metadata and controls

78 lines (57 loc) · 1.82 KB

6.5 分布式链路追踪

📍 导航返回目录 | 上一节:熔断降级 | 下一节:监控告警


OpenTelemetry + Jaeger

Go集成

package main

import (
    "context"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/exporters/jaeger"
    "go.opentelemetry.io/otel/sdk/trace"
)

func InitTracer(serviceName string) error {
    exporter, err := jaeger.New(jaeger.WithCollectorEndpoint(
        jaeger.WithEndpoint("http://localhost:14268/api/traces"),
    ))
    if err != nil {
        return err
    }
    
    tp := trace.NewTracerProvider(
        trace.WithBatcher(exporter),
        trace.WithResource(resource.NewWithAttributes(
            semconv.SchemaURL,
            semconv.ServiceNameKey.String(serviceName),
        )),
    )
    
    otel.SetTracerProvider(tp)
    return nil
}

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    ctx := r.Context()
    tracer := otel.Tracer("my-service")
    
    ctx, span := tracer.Start(ctx, "handle-request")
    defer span.End()
    
    // 调用其他服务
    callUserService(ctx)
    callOrderService(ctx)
    
    w.Write([]byte("OK"))
}

func callUserService(ctx context.Context) {
    tracer := otel.Tracer("my-service")
    _, span := tracer.Start(ctx, "call-user-service")
    defer span.End()
    
    // HTTP请求传递TraceID
    // ...
}

本章小结

关键要点

  • ✅ 链路追踪定位性能瓶颈
  • ✅ OpenTelemetry统一标准
  • ✅ Jaeger可视化分析
  • ✅ TraceID跨服务传递

⏮️ 上一节:熔断降级 | ⏭️ 下一节:监控告警