From f459e1dbf57a25155b4b6393dd1ce79790b48910 Mon Sep 17 00:00:00 2001 From: Wen Hu Date: Fri, 1 Dec 2023 11:20:51 +0800 Subject: [PATCH] feat(attributes): add attributes for span and metrics (#31) --- tracing/middleware.go | 8 ++++++++ tracing/testdata/hertz_request_metrics.txt | 4 ++-- tracing/tracer_server.go | 9 +++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/tracing/middleware.go b/tracing/middleware.go index 7ffde5c..9053357 100644 --- a/tracing/middleware.go +++ b/tracing/middleware.go @@ -19,6 +19,7 @@ import ( "time" "github.com/cloudwego/hertz/pkg/common/tracer/stats" + "go.opentelemetry.io/otel/attribute" "github.com/cloudwego/hertz/pkg/app" "github.com/cloudwego/hertz/pkg/app/client" @@ -100,6 +101,13 @@ func ClientMiddleware(opts ...Option) client.Middleware { span.SetAttributes(semconv.HTTPServerAttributesFromHTTPRequest("", cfg.clientHttpRouteFormatter(req), httpReq)...) } + // span attributes + attrs := []attribute.KeyValue{ + semconv.HTTPURLKey.String(req.URI().String()), + semconv.HTTPStatusCodeKey.Int(resp.StatusCode()), + } + span.SetAttributes(attrs...) + // set span status with resp status code span.SetStatus(semconv.SpanStatusFromHTTPStatusCode(resp.StatusCode())) diff --git a/tracing/testdata/hertz_request_metrics.txt b/tracing/testdata/hertz_request_metrics.txt index 5b2dc7a..de1ea65 100755 --- a/tracing/testdata/hertz_request_metrics.txt +++ b/tracing/testdata/hertz_request_metrics.txt @@ -1,6 +1,6 @@ # HELP http_client_request_count_total measures the client request count total # TYPE http_client_request_count_total counter -http_client_request_count_total{deployment_environment="test-env",http_host="localhost:39888",http_method="GET",http_route="/ping",otel_scope_name="github.com/hertz-contrib/obs-opentelemetry",otel_scope_version="semver:0.39.0",service_name="test-server",service_namespace="test-ns",status_code="Unset"} 1 +http_client_request_count_total{deployment_environment="test-env",http_host="localhost:39888",http_method="GET",http_route="/ping",http_status_code="200",otel_scope_name="github.com/hertz-contrib/obs-opentelemetry",otel_scope_version="semver:0.39.0",service_name="test-server",service_namespace="test-ns",status_code="Unset"} 1 # HELP http_server_request_count_total measures Incoming request count total # TYPE http_server_request_count_total counter -http_server_request_count_total{deployment_environment="test-env",http_host="localhost:39888",http_method="GET",http_route="/ping",otel_scope_name="github.com/hertz-contrib/obs-opentelemetry",otel_scope_version="semver:0.39.0",peer_deployment_environment="test-env",peer_service="test-server",peer_service_namespace="test-ns",service_name="test-server",service_namespace="test-ns",status_code="Unset"} 1 +http_server_request_count_total{deployment_environment="test-env",http_host="localhost:39888",http_method="GET",http_route="/ping",http_status_code="200",otel_scope_name="github.com/hertz-contrib/obs-opentelemetry",otel_scope_version="semver:0.39.0",peer_deployment_environment="test-env",peer_service="test-server",peer_service_namespace="test-ns",service_name="test-server",service_namespace="test-ns",status_code="Unset"} 1 diff --git a/tracing/tracer_server.go b/tracing/tracer_server.go index ad86f80..ca7bea1 100644 --- a/tracing/tracer_server.go +++ b/tracing/tracer_server.go @@ -18,6 +18,7 @@ import ( "context" "time" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" "github.com/cloudwego/hertz/pkg/app" @@ -115,6 +116,14 @@ func (s *serverTracer) Finish(ctx context.Context, c *app.RequestContext) { span.SetStatus(semconv.SpanStatusFromHTTPStatusCode(c.Response.StatusCode())) } + // span attributes + attrs := []attribute.KeyValue{ + semconv.HTTPURLKey.String(c.URI().String()), + semconv.NetPeerIPKey.String(c.ClientIP()), + semconv.HTTPStatusCodeKey.Int(c.Response.StatusCode()), + } + span.SetAttributes(attrs...) + injectStatsEventsToSpan(span, st) if panicMsg, panicStack, httpErr := parseHTTPError(ti); httpErr != nil || len(panicMsg) > 0 {