Kratos 鏈路追蹤

2022-04-25 09:55 更新

鏈路追蹤

Tracing 中間件使用 OpenTelemetry 實現(xiàn)了鏈路追蹤。

配置

Tracing 中間件中提供了一個配置方法 ?SetTracerProvider()?。

  • ?SetTracerProvider?

package otel
...
func SetTracerProvider(tp trace.TracerProvider) {
    global.SetTracerProvider(tp)
}   

SetTracerProvider 用于設(shè)置 tracing 的鏈路追蹤程序的提供者,該方法接收一個 trace.TracerProvider。

使用方法

server 中使用 tracing 采集數(shù)據(jù)

package server

func initTracer() func() {
    // 創(chuàng)建一個 jaeger 的 pipeline,其他收集方式可以查看 opentelemetry 文檔
    flush, err := jaeger.InstallNewPipeline(
        jaeger.WithCollectorEndpoint("http://localhost:14268/api/traces"),
        jaeger.WithSDKOptions(
            sdktrace.WithSampler(sdktrace.AlwaysSample()),
            sdktrace.WithResource(resource.NewWithAttributes(
                semconv.ServiceNameKey.String("kratos-trace"),
                attribute.String("exporter", "jaeger"),
                attribute.Float64("float", 312.23),
            )),
        ),
    )
    if err != nil {
        log.Fatal(err)
    }
    return flush
}
// NewGRPCServer new a gRPC server.
func NewGRPCServer(c *conf.Server, executor *service.ExecutorService) *grpc.Server {
    flush := initTracer()
    defer flush()
    //tr := otel.Tracer("component-main")
    var opts = []grpc.ServerOption{
        grpc.Middleware(
            middleware.Chain(
                tracing.Server(),
            ),
        ),
    }
   // ...
}

client 中使用 tracing 采集數(shù)據(jù)

func initTracer() func() {
    // 創(chuàng)建一個 jaeger 的 pipeline,其他收集方式可以查看 opentelemetry 文檔
    flush, err := jaeger.InstallNewPipeline(
        jaeger.WithCollectorEndpoint("http://localhost:14268/api/traces"),
        jaeger.WithSDKOptions(
            sdktrace.WithSampler(sdktrace.AlwaysSample()),
            sdktrace.WithResource(resource.NewWithAttributes(
                semconv.ServiceNameKey.String("kratos-trace"),
                attribute.String("exporter", "jaeger"),
                attribute.Float64("float", 312.23),
            )),
        ),
    )
    if err != nil {
        log.Fatal(err)
    }
    return flush
}
func grpcCli() (*grpc.ClientConn, error) {
    return grpc.DialInsecure(
        context.Background(),
        grpc.WithMiddleware(
            tracing.Client(),
        ),
    )
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號