From 8f6f17c341720f73281656df883c741955554de6 Mon Sep 17 00:00:00 2001 From: John Guo Date: Wed, 27 Jan 2021 19:15:14 +0800 Subject: [PATCH] add common tracing labels --- database/gdb/gdb_core_tracing.go | 7 +++++-- database/gredis/gredis_conn.go | 1 + net/ghttp/ghttp_middleware_tracing.go | 3 +++ net/ghttp/internal/client/client_tracing.go | 3 +++ net/gtrace/gtrace.go | 16 ++++++++++++++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/database/gdb/gdb_core_tracing.go b/database/gdb/gdb_core_tracing.go index a1757abf6..484c76838 100644 --- a/database/gdb/gdb_core_tracing.go +++ b/database/gdb/gdb_core_tracing.go @@ -23,18 +23,21 @@ func (c *Core) addSqlToTracing(ctx context.Context, sql *Sql) { if gtrace.IsActivated(ctx) { return } - tr := otel.GetTracerProvider().Tracer( "github.com/gogf/gf/database/gdb", trace.WithInstrumentationVersion(fmt.Sprintf(`%s`, gf.VERSION)), ) ctx, span := tr.Start(ctx, sql.Type) defer span.End() + if sql.Error != nil { span.SetStatus(codes.Error, fmt.Sprintf(`%+v`, sql.Error)) } labels := make([]label.KeyValue, 0) - labels = append(labels, label.String("db.type", c.DB.GetConfig().Type)) + labels = append(labels, gtrace.CommonLabels()...) + labels = append(labels, + label.String("db.type", c.DB.GetConfig().Type), + ) if c.DB.GetConfig().Host != "" { labels = append(labels, label.String("db.host", c.DB.GetConfig().Host)) } diff --git a/database/gredis/gredis_conn.go b/database/gredis/gredis_conn.go index a133cd0ef..aaafd44c5 100644 --- a/database/gredis/gredis_conn.go +++ b/database/gredis/gredis_conn.go @@ -82,6 +82,7 @@ func (c *Conn) do(timeout time.Duration, commandName string, args ...interface{} if err != nil { span.SetStatus(codes.Error, fmt.Sprintf(`%+v`, err)) } + span.SetAttributes(gtrace.CommonLabels()...) span.SetAttributes( label.String("redis.host", c.redis.config.Host), label.Int("redis.port", c.redis.config.Port), diff --git a/net/ghttp/ghttp_middleware_tracing.go b/net/ghttp/ghttp_middleware_tracing.go index 3460f46ee..afb8d38a4 100644 --- a/net/ghttp/ghttp_middleware_tracing.go +++ b/net/ghttp/ghttp_middleware_tracing.go @@ -12,6 +12,7 @@ import ( "github.com/gogf/gf/internal/utils" "github.com/gogf/gf/net/ghttp/internal/client" "github.com/gogf/gf/net/ghttp/internal/httputil" + "github.com/gogf/gf/net/gtrace" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/label" @@ -45,6 +46,8 @@ func MiddlewareServerTracing(r *Request) { ctx, span := tr.Start(ctx, r.URL.String()) defer span.End() + span.SetAttributes(gtrace.CommonLabels()...) + // Inject tracing context. r.SetCtx(ctx) diff --git a/net/ghttp/internal/client/client_tracing.go b/net/ghttp/internal/client/client_tracing.go index ffe35141d..516f0396f 100644 --- a/net/ghttp/internal/client/client_tracing.go +++ b/net/ghttp/internal/client/client_tracing.go @@ -11,6 +11,7 @@ import ( "github.com/gogf/gf" "github.com/gogf/gf/internal/utils" "github.com/gogf/gf/net/ghttp/internal/httputil" + "github.com/gogf/gf/net/gtrace" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/label" @@ -34,6 +35,8 @@ func MiddlewareTracing(c *Client, r *http.Request) (response *Response, err erro ctx, span := tr.Start(r.Context(), r.URL.String()) defer span.End() + span.SetAttributes(gtrace.CommonLabels()...) + // Inject tracing content into http header. propagator := propagation.NewCompositeTextMapPropagator( propagation.TraceContext{}, diff --git a/net/gtrace/gtrace.go b/net/gtrace/gtrace.go index 21f3ecd62..b4dac689d 100644 --- a/net/gtrace/gtrace.go +++ b/net/gtrace/gtrace.go @@ -10,10 +10,17 @@ package gtrace import ( "context" "github.com/gogf/gf/container/gvar" + "github.com/gogf/gf/net/gipv4" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/baggage" "go.opentelemetry.io/otel/label" "go.opentelemetry.io/otel/trace" + "os" +) + +var ( + intranetIps, _ = gipv4.GetIntranetIpArray() + hostname, _ = os.Hostname() ) // IsActivated checks and returns if tracing feature is activated. @@ -21,6 +28,15 @@ func IsActivated(ctx context.Context) bool { return GetTraceId(ctx) != "" } +// CommonLabels returns common used attribute labels: +// ip.intranet, hostname. +func CommonLabels() []label.KeyValue { + return []label.KeyValue{ + label.Array(`ip.intranet`, intranetIps), + label.String(`hostname`, hostname), + } +} + // Tracer is a short function for retrieve Tracer. func Tracer(name ...string) trace.Tracer { tracerName := ""