-
Notifications
You must be signed in to change notification settings - Fork 299
Introduce service.peer.name and service.peer.namespace; deprecate peer.service #3097
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
base: main
Are you sure you want to change the base?
Conversation
14b1a2b to
6b843a7
Compare
thompson-tomo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR should be Blocked due to old attributes not actually being deprecated but rather only a single usage of the attribute being deprecated. Also there is 2 change logs when there should only be 1.
If we think about the use of the attributes for me it makes more sense to put these new attributes under the server namespace given that they are being set based on the server address/port.
It would also enable the server namespace to be the sole namespace containing attributes describing the server side of a connection and the service namespace to be describing the service being used.
I am trying to figure out how to make this work the right way. Pointers appreciated :-)
IMO, it is really not a given that these are set on server address/port. It is difficult to generalize on something like this, and it is going to be very implementation-dependent, but more than one implementation of peer.service I have seen happened at a pretty high level, e.g., embedded in client libraries automatically generated from OpenAPI specs. |
Move the deprecated block from common.yaml into the registry.yaml file and then regenerate the docs. The generation process will propagate the deprecation info onto the attributes on the signals.
This is functionality which is defined via declarative config.
That would also be fine and still fit having it under server as server would be describing the remote side of the connection. |
|
hi @mmanciop! thanks for taking this on. we discussed this in yesterday's Service and Deployment Semconv SIG meeting (https://zoom.us/rec/share/W7L9lhkmwN6GGzh1ykMxcF-dr2B0frjOAaO52BSe-8VP-Zag6n15gQObv_sFtqM.OCG1dIwmHpD2D2rP starting around 34:00 minute marker). I believe we're onboard with renaming We'd like a bit more understanding of whether For We still need to decide whether we want to recommend Can you investigate the existing usages of Once we decide on the migration and stabilization plan, we want to communicate it via a short blog post, to hopefully avoid the surprises that folks had with the |
Very nice!
The identity of a service is the combination of its
The canonical example in my head is the
Sure, I had already done the research before coming up with the proposal, and I just spent some more time with GitHuib search to make sure I did not miss anything. To my knowledge, the list is as follow, going through SDKs and contribs in alphabetical order:
Others:
Sounds good to me. I also think that adding one more fallback case for |
6b843a7 to
985629b
Compare
|
This PR contains changes to area(s) that do not have an active SIG/project and will be auto-closed:
Such changes may be rejected or put on hold until a new SIG/project is established. Please refer to the Semantic Convention Areas |
7a07a6e to
4964e08
Compare
96f0954 to
51b0ef2
Compare
| component: peer | ||
|
|
||
| # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). | ||
| note: The `peer.service` attribute has been deprecated in favor of `service.peer.name`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SemConv SIG discussion:
Please update PR description to make a case for service.peer.namespace and some data points on usage (outside of otel org). It does not have to be the same attribute, just the scenario.
For stabilization, we might want to see more real-life usage (of service.peer.namespace in otel or outside of otel org).
oh, span-to-metrics is a great use case for capturing these attributes 👍
@mapno, @JaredTan95, @open-telemetry/collector-contrib-approvers we're trying to make a case for |
It would be good to get confirmation from @mapno and/or @JaredTan95, but from my read: By default, the connector will create a virtual node in the service graph representing a peer service, based on the presence of one or more of these attributes in a client or server span: It should be easy enough to add (FWIW I like the name change. Besides making room for |
|
This PR has been labeled as stale due to lack of activity. It will be automatically closed if there is no further activity over the next 7 days. |
Sorry for the delay (🎄). Agree, that should be the way forward for the servicegraph processor. No concerns from my side 👍 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR introduces service.peer.name and service.peer.namespace attributes to replace the deprecated peer.service attribute, enabling full service identity representation that includes both name and namespace.
Key changes:
- Introduces
service.peer.nameandservice.peer.namespaceas development-stability attributes - Deprecates
peer.servicewith a rename toservice.peer.name - Removes
area:peerfrom GitHub issue templates as the peer namespace is being phased out
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| model/service/registry.yaml | Adds registry definitions for service.peer.name and service.peer.namespace attributes |
| model/service/common.yaml | Creates new attribute group for service peer attributes with recommended requirement level |
| model/peer/registry.yaml | Marks peer.service as deprecated with rename to service.peer.name |
| model/peer/common.yaml | Removes requirement_level from deprecated peer.service attribute reference |
| docs/registry/attributes/service.md | Auto-generated documentation for new service peer attributes |
| docs/registry/attributes/peer.md | Updates documentation to show deprecation status of peer.service |
| docs/general/attributes.md | Adds new "Service Peer" section and reorganizes to include deprecated "Peer namespace" section |
| .github/ISSUE_TEMPLATE/new-conventions.yaml | Removes area:peer label option |
| .github/ISSUE_TEMPLATE/change_proposal.yaml | Removes area:peer label option |
| .github/ISSUE_TEMPLATE/bug_report.yaml | Removes area:peer label option |
| .chloggen/service-peer.yaml | Changelog entry documenting the enhancement |
| .chloggen/peer-service-deprecation.yaml | Changelog entry documenting the deprecation |
Co-authored-by: Trask Stalnaker <[email protected]>
Co-authored-by: Trask Stalnaker <[email protected]>
trask
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mmanciop thanks for staying with this!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this file can be deleted now, I think it was only used by docs/general/attributes.md
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rename to deprecated.yaml (just convention)
| type: string | ||
| stability: development | ||
| brief: > | ||
| A namespace for `service.peer.name`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(just to align with service.peer.name definition above)
| A namespace for `service.peer.name`. | |
| Logical namespace of the service on the other side of the connection. |
| - ref: service.peer.name | ||
| requirement_level: recommended | ||
| - ref: service.peer.namespace | ||
| requirement_level: recommended |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure it makes a difference here, but I think this would be more accurate (@lmolkova?)
| - ref: service.peer.name | |
| requirement_level: recommended | |
| - ref: service.peer.namespace | |
| requirement_level: recommended | |
| - ref: service.peer.name | |
| requirement_level: opt_in | |
| - ref: service.peer.namespace | |
| requirement_level: opt_in |
Fixes #2945
Changes
The goals of this PR are twofold.
Goal 1: Stabilization
Renaming
peer.serviceis necessary for stabilization: the same way the SIG renameddeployment.environmenttodeployment.environment.name, the lack of extensibility ofpeer.serviceprevents its stabilization.The extensibility of
service.peer.*is itself important because of the next goal.Goal 2: Provide means of fully describing service identity
Today's
peer.serviceis meant to contain the same value of theservice.nameattribute of the service on the other end of communication. However,service.nameby itself does not actually suffice to identify every service, because of the existence and adoption ofservice.namespace:(From https://opentelemetry.io/docs/specs/semconv/resource/#service)
That is, in order to allow "references" to a service, we need to be able to also add
service.peer.namespace.The importance of
service.peer.namespaceis directly related with the adoption ofservice.namespace. I pulled statistics across the entirety of the use-base of Dash0, and almost exactly 1/3 of organizations (which equate to a "user site") setservice.namespaceto one or more of their services. (I admit this came to me as a surprise, I had guess-stimated the adoption to be around 10%). This high adoption, in my eyes, justifies making an exception to the rule about existing implementations.For the record, about implementations: we intend in Dash0 to automatically add
service.peer.nameandservice.peer.namespaceto metrics generated for span pairs connecting services. Which means 1/3 of Dash0 users will automatically adopt these attributes.Merge requirement checklist
[chore]