-
Notifications
You must be signed in to change notification settings - Fork 897
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BREAKING: Replace net.peer.*
/net.host.*
with client.*
/server.*
(and source.*
/destination.*
)
#3402
Conversation
445e174
to
7f0c488
Compare
857434a
to
e61495d
Compare
I think rather than just renaming, this is a complete change of concepts behind representing the related information. Which is a bit of a shame, since quite a bit of brain power went into the current net.* conventions by now. |
great questions. The good things about the change are:
The con is obviously that it will break everyone and that's why we're trying to come up with a transition plan #3404 (which currently suggest major version bump for instrumentations) plus months of support for old instrumentations) |
as a layperson in networking terminology, I found peer/host to be very confusing when adding these attributes to the Java HTTP instrumentation. I think using client/server terminology is a big win. |
it's a breaking change for OTEL, so hardly a win in itself.
Not really following this, can you give an example? To me, the client/server nomenclature is a simplification that does not always make sense. E.g. there's no such terminology in the TCP stack because it only deals with packets passing, not the purpose of the packets or the roles of the actors. And even when we rise to the application level, there are many scenarios where there are equal players (peers) communicating, e.g. nodes in Paxos or any gossip protocol, actors exchanging messages in systems like Akka, etc. How would one decide who is a client or a server in those scenarios? |
@AlexanderWert how would you model this in ECS? (is this the purpose of |
@trask @yurishkuro Yes, exactly! In ECS |
@lmolkova I'm wondering if |
3659b9f
to
2fb734a
Compare
I'm not sure, but one thought would be something like |
I was thinking the same. We end up with an extra attribute for the position of the current operation in the protocol interaction, regardless of whether we use net/peer or source/destination. With net/peer we would need to store the server/client role distinction for where it exists and nothing in p2p cases. With source/destination+client/server we will need an attribute to indicate which namespace indicates the local/remote end. (My previous comment was only about p2p, but I realized, actually the same applies to client/server, at least on non-span telemetry) |
net.peer.*
/net.host.*
with client.*
/server.*
(and source.*
/destination.*
for P2P)net.peer.*
/net.host.*
with client.*
/server.*
(and source.*
/destination.*
)
We can definitely add one (or keep using messaging.operation) once we get to gRPC streaming or similar. At the same time, it's not necessarily important to know a direction when tracing a packet. E.g. I want to count all packets from |
If i have |
In the case of tracing signals (i.e. spans) the SpanKind (e.g. In the case of metrics, the semantics of the metric itself imply whether it's server or client. For example, Similar situation with logs. Here, the instrumentation scope and the resource attributes provide the context what kind of logs are being collected. @Oberon00 summarized it very well:
|
@AlexanderWert I don't think that's the case for logs. If you have a service that logs a line with When using source/destination instead of client/server, this applies to spans & metrics as well since source/destination may flip around for the same connection. |
Since this was merged without solving the problem, I created a follow-up issue: open-telemetry/semantic-conventions#62 |
|
Rename http.client_ip -> client.address
Fixes #3793 ## Changes Update OpenTelemetry to Zipkin Transformation to handle attributes from older semantic conventions in a backwards compatible way so that following attributes are (again) handled: - `net.peer.name` - `net.host.name` - `net.sock.peer.addr` & `net.sock.peer.port` - `server.socket.domain` - `server.socket.address` & `server.socket.port` The backwards compatibility of a stable OpenTelemetry to Zipkin Transformation was broken by: - #3402 - #3713
…` (and `source.*`/`destination.*`) (open-telemetry#3402)
Fixes open-telemetry#3793 ## Changes Update OpenTelemetry to Zipkin Transformation to handle attributes from older semantic conventions in a backwards compatible way so that following attributes are (again) handled: - `net.peer.name` - `net.host.name` - `net.sock.peer.addr` & `net.sock.peer.port` - `server.socket.domain` - `server.socket.address` & `server.socket.port` The backwards compatibility of a stable OpenTelemetry to Zipkin Transformation was broken by: - open-telemetry#3402 - open-telemetry#3713
Fixes #3199
Switches from peer and host to client and server terminology and renames:
net.peer.name
andnet.host.name
->server.address
net.peer.port
andnet.host.port
->server.port
,net.sock.peer.addr
toserver.socket.address
on client sideclient.socket.address
on server side,net.sock.peer.port
toserver.socket.port
on client sideclient.socket.port
on server side,net.sock.peer.name
->server.socket.domain
,net.sock.host.addr
->server.socket.address
,net.sock.host.port
->server.socket.port
http.client_ip
->client.address
Also adds
source.*
anddestination.*
ECS attributes to address network scenarios where client/server terminology is not applicable.Summary of benefits
These describe the same things whether observed from one side or the other, while host and peer describe opposite things depending on which side they are observed from. This makes them more generally useful on logs, where the concept of SpanKind is not inherent in the data model.
net.peer.*
may or may not be low cardinality depend on which side we are on, while things are clearer withserver.*
andclient.*
.host
andpeer
have been a source of confusion. While updating the RPC metrics spec to useclient.*
andserver.*
, we even found a bug due to our own confusion overhost
andpeer
.