链路追踪

Tracing 中间件使用 OpenTelemetry 实现了链路追踪。

配置

Tracing 中间件中提供了一个配置方法 SetTracerProvider()

SetTracerProvider

  1. package otel
  2. ...
  3. func SetTracerProvider(tp trace.TracerProvider) {
  4. global.SetTracerProvider(tp)
  5. }

SetTracerProvider 用于设置 tracing 的链路追踪程序的提供者,该方法接收一个 trace.TracerProvider。

使用方法

server 中使用 tracing 采集数据

  1. package server
  2. func initTracer() func() {
  3. // 创建一个 jaeger 的 pipeline,其他收集方式可以查看 opentelemetry 文档
  4. flush, err := jaeger.InstallNewPipeline(
  5. jaeger.WithCollectorEndpoint("http://localhost:14268/api/traces"),
  6. jaeger.WithSDKOptions(
  7. sdktrace.WithSampler(sdktrace.AlwaysSample()),
  8. sdktrace.WithResource(resource.NewWithAttributes(
  9. semconv.ServiceNameKey.String("kratos-trace"),
  10. attribute.String("exporter", "jaeger"),
  11. attribute.Float64("float", 312.23),
  12. )),
  13. ),
  14. )
  15. if err != nil {
  16. log.Fatal(err)
  17. }
  18. return flush
  19. }
  20. // NewGRPCServer new a gRPC server.
  21. func NewGRPCServer(c *conf.Server, executor *service.ExecutorService) *grpc.Server {
  22. flush := initTracer()
  23. defer flush()
  24. //tr := otel.Tracer("component-main")
  25. var opts = []grpc.ServerOption{
  26. grpc.Middleware(
  27. middleware.Chain(
  28. tracing.Server(),
  29. ),
  30. ),
  31. }
  32. // ...
  33. }

client 中使用 tracing 采集数据

  1. func initTracer() func() {
  2. // 创建一个 jaeger 的 pipeline,其他收集方式可以查看 opentelemetry 文档
  3. flush, err := jaeger.InstallNewPipeline(
  4. jaeger.WithCollectorEndpoint("http://localhost:14268/api/traces"),
  5. jaeger.WithSDKOptions(
  6. sdktrace.WithSampler(sdktrace.AlwaysSample()),
  7. sdktrace.WithResource(resource.NewWithAttributes(
  8. semconv.ServiceNameKey.String("kratos-trace"),
  9. attribute.String("exporter", "jaeger"),
  10. attribute.Float64("float", 312.23),
  11. )),
  12. ),
  13. )
  14. if err != nil {
  15. log.Fatal(err)
  16. }
  17. return flush
  18. }
  19. func grpcCli() (*grpc.ClientConn, error) {
  20. return grpc.DialInsecure(
  21. context.Background(),
  22. grpc.WithMiddleware(
  23. tracing.Client(),
  24. ),
  25. )
  26. }

References