diff --git a/core/logx/tracelogger.go b/core/logx/tracelogger.go index 2da05072..5d48c6de 100644 --- a/core/logx/tracelogger.go +++ b/core/logx/tracelogger.go @@ -96,7 +96,10 @@ func WithContext(ctx context.Context) Logger { func spanIdFromContext(ctx context.Context) string { span := trace.SpanFromContext(ctx) if span.IsRecording() { - return span.SpanContext().SpanID().String() + spanCtx := span.SpanContext() + if spanCtx.IsValid() { + return spanCtx.SpanID().String() + } } t, ok := ctx.Value(tracespec.TracingKey).(tracespec.Trace) @@ -110,7 +113,10 @@ func spanIdFromContext(ctx context.Context) string { func traceIdFromContext(ctx context.Context) string { span := trace.SpanFromContext(ctx) if span.IsRecording() { - return span.SpanContext().SpanID().String() + spanCtx := span.SpanContext() + if spanCtx.IsValid() { + return span.SpanContext().TraceID().String() + } } t, ok := ctx.Value(tracespec.TracingKey).(tracespec.Trace) diff --git a/core/service/serviceconf.go b/core/service/serviceconf.go index 6a36e682..6496aab1 100644 --- a/core/service/serviceconf.go +++ b/core/service/serviceconf.go @@ -7,6 +7,7 @@ import ( "github.com/tal-tech/go-zero/core/logx" "github.com/tal-tech/go-zero/core/prometheus" "github.com/tal-tech/go-zero/core/stat" + "github.com/tal-tech/go-zero/core/trace/opentelemetry" ) const ( @@ -26,11 +27,10 @@ const ( type ServiceConf struct { Name string Log logx.LogConf - Mode string `json:",default=pro,options=dev|test|rt|pre|pro"` - MetricsUrl string `json:",optional"` - Prometheus prometheus.Config `json:",optional"` - // TODO: enable it in v1.2.2 - // Telemetry opentelemetry.Config `json:",optional"` + Mode string `json:",default=pro,options=dev|test|rt|pre|pro"` + MetricsUrl string `json:",optional"` + Prometheus prometheus.Config `json:",optional"` + Telemetry opentelemetry.Config `json:",optional"` } // MustSetUp sets up the service, exits on error. @@ -52,11 +52,10 @@ func (sc ServiceConf) SetUp() error { sc.initMode() prometheus.StartAgent(sc.Prometheus) - // TODO: enable it in v1.2.2 - // if len(sc.Telemetry.Name) == 0 { - // sc.Telemetry.Name = sc.Name - // } - // opentelemetry.StartAgent(sc.Telemetry) + if len(sc.Telemetry.Name) == 0 { + sc.Telemetry.Name = sc.Name + } + opentelemetry.StartAgent(sc.Telemetry) if len(sc.MetricsUrl) > 0 { stat.SetReportWriter(stat.NewRemoteWriter(sc.MetricsUrl)) diff --git a/core/trace/opentelemetry/serverstream.go b/core/trace/opentelemetry/serverstream.go index 43a24b49..d67146bc 100644 --- a/core/trace/opentelemetry/serverstream.go +++ b/core/trace/opentelemetry/serverstream.go @@ -6,8 +6,8 @@ import ( "google.golang.org/grpc" ) -// serverStream wraps around the embedded grpc.ServerStream, and intercepts the RecvMsg and -// SendMsg method call. +// serverStream wraps around the embedded grpc.ServerStream, +// and intercepts the RecvMsg and SendMsg method call. type serverStream struct { grpc.ServerStream ctx context.Context diff --git a/rest/engine.go b/rest/engine.go index 5f92d99b..4ed8e0cd 100644 --- a/rest/engine.go +++ b/rest/engine.go @@ -108,7 +108,7 @@ func (s *engine) bindRoute(fr featuredRoutes, router httpx.Router, metrics *stat route Route, verifier func(chain alice.Chain) alice.Chain) error { chain := alice.New( handler.TracingHandler, - handler.OtelHandler(route.Path), + handler.OtelHandler(s.conf.Name, route.Path), s.getLogHandler(), handler.PrometheusHandler(route.Path), handler.MaxConns(s.conf.MaxConns), diff --git a/rest/handler/otelhandler.go b/rest/handler/otelhandler.go index 72bbfafa..9f41d484 100644 --- a/rest/handler/otelhandler.go +++ b/rest/handler/otelhandler.go @@ -11,7 +11,7 @@ import ( ) // OtelHandler return a middleware that process the opentelemetry. -func OtelHandler(path string) func(http.Handler) http.Handler { +func OtelHandler(serviceName, path string) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { if !opentelemetry.Enabled() { return next @@ -26,7 +26,8 @@ func OtelHandler(path string) func(http.Handler) http.Handler { ctx, path, oteltrace.WithSpanKind(oteltrace.SpanKindServer), - oteltrace.WithAttributes(semconv.HTTPServerAttributesFromHTTPRequest("", path, r)...), + oteltrace.WithAttributes(semconv.HTTPServerAttributesFromHTTPRequest( + serviceName, path, r)...), ) defer span.End() diff --git a/tools/goctl/rpc/generator/genmain.go b/tools/goctl/rpc/generator/genmain.go index 0785708d..f7aff9dd 100644 --- a/tools/goctl/rpc/generator/genmain.go +++ b/tools/goctl/rpc/generator/genmain.go @@ -21,9 +21,9 @@ import ( {{.imports}} "github.com/tal-tech/go-zero/core/conf" + "github.com/tal-tech/go-zero/core/service" "github.com/tal-tech/go-zero/zrpc" "google.golang.org/grpc" - "github.com/tal-tech/go-zero/core/service" "google.golang.org/grpc/reflection" )