From 1193094fff470d367e1f2a7e930ad07ced72efa0 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 8 Dec 2025 17:20:29 +0100 Subject: [PATCH] update to semconv v1.26.0 and use stable attributes Update to the semconv version used by go.opentelemetry.io/otel v1.21.0, and update to use stable attributes; - NetSockPeerAddr (net.sock.peer.addr) -> NetworkPeerAddress (network.peer.address) - NetSockPeerPort (net.sock.peer.port) -> NetworkPeerPort (network.peer.port) Unfortunately, there's no good replacement for NetPeerName (net.peer.name) and NetPeerPort (net.peer.port). The `network.peer.address` attribute should strictly only be used for IP-addresses or socket addresses, but the description is slightly ambiguous; > network.peer.address and network.local.address should be IP addresses, Unix > domain socket names, or other addresses specific to network type. The alternatie is to use either "semconv.ClientAddress" + "semconv.ClientPort" or "semconv.ServerAddress" + "semconv.ServerPort" for hostnames. However, the code in this module is generic and doesn't distinguish between "client" and "server", and there's no equivalent for "peer address". See https://opentelemetry.io/docs/specs/semconv/general/attributes/#other-network-attributes Signed-off-by: Sebastiaan van Stijn --- config.go | 2 +- interceptor.go | 23 +++++++++-------------- internal/parse.go | 2 +- semconv.go | 2 +- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/config.go b/config.go index 186308a..3fe8adf 100644 --- a/config.go +++ b/config.go @@ -37,7 +37,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/propagation" - semconv "go.opentelemetry.io/otel/semconv/v1.17.0" + semconv "go.opentelemetry.io/otel/semconv/v1.26.0" "go.opentelemetry.io/otel/trace" ) diff --git a/interceptor.go b/interceptor.go index e0c05c0..0364792 100644 --- a/interceptor.go +++ b/interceptor.go @@ -42,7 +42,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" - semconv "go.opentelemetry.io/otel/semconv/v1.17.0" + semconv "go.opentelemetry.io/otel/semconv/v1.26.0" "go.opentelemetry.io/otel/trace" grpc_codes "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -202,20 +202,15 @@ func peerAttr(addr string) []attribute.KeyValue { return []attribute.KeyValue(nil) } - var attr []attribute.KeyValue - if ip := net.ParseIP(host); ip != nil { - attr = []attribute.KeyValue{ - semconv.NetSockPeerAddr(host), - semconv.NetSockPeerPort(port), - } - } else { - attr = []attribute.KeyValue{ - semconv.NetPeerName(host), - semconv.NetPeerPort(port), - } + return []attribute.KeyValue{ + // NOTE(thaJeztah): strictly, we should use NetworkPeerAddress for IP-addresses, + // and either "semconv.ClientAddress" + "semconv.ClientPort" / "semconv.ServerAddress" + "semconv.ServerPort" + // for hostnames. However, this code is generic and doesn't distinguish "client" vs "server". + // + // See https://opentelemetry.io/docs/specs/semconv/general/attributes/ + semconv.NetworkPeerAddress(host), + semconv.NetworkPeerPort(port), } - - return attr } // peerFromCtx returns a peer address from a context, if one exists. diff --git a/internal/parse.go b/internal/parse.go index 694aeba..9adcc55 100644 --- a/internal/parse.go +++ b/internal/parse.go @@ -36,7 +36,7 @@ import ( "strings" "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.17.0" + semconv "go.opentelemetry.io/otel/semconv/v1.26.0" ) // ParseFullMethod returns a span name following the OpenTelemetry semantic diff --git a/semconv.go b/semconv.go index 64f0fe8..6ea5934 100644 --- a/semconv.go +++ b/semconv.go @@ -34,7 +34,7 @@ package otelttrpc import ( "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.17.0" + semconv "go.opentelemetry.io/otel/semconv/v1.26.0" ) // Semantic conventions for attribute keys for ttRPC.