-
Notifications
You must be signed in to change notification settings - Fork 242
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
How can we encourage consistent terminology across the OpenTelemetry project? #2165
Comments
Yes, please. So many names for the same thing, it makes it super hard, specially for people who are trying to understand or learn about this project. |
Based on an ask by @trask during the GC meeting here is a list of things and sentences we (@open-telemetry/docs-approvers) try to describe. I will focus on "Automatic Instrumentation" in this first run down (and it's probably making up 80% to 90% of the problem):
There are probably more examples, but those are the ones available to my late night brain right now. Note: There are also a lot of sentences that contain "automatic" in a different meaning, which are fine but can be confusing, examples:
|
Following up on this based on my comment for the OTel Collector Distro discussion and after I had some time to think about the input provided by @open-telemetry/governance-committee during a meeting yesterday: This issue is about the need of having a process to define key terms in as clear and as precise ways as possible. Those key terms have validity within the OpenTelemetry project and because of that they should be easily available to every contributor and known to (and encouraged/enforced by) maintainers in their subprojects. Here is a proposal:
Note that I specifically say key term: the goal of this is not to define the heck out of every word that we use, but to make sure that certain (few) words mean the same thing no matter which piece of the OpenTelemetry project an user is looking at. |
I would love to see this capture citations of concrete instances, as that allows folks like me to help contribute to this discussion without the tacit knowledge about this accumulated over the years
Ack this could make the comment count high, but I believe it is a great way to make things transparent especially those in inconvenient timezones. |
@codefromthecrypt that's a valid request and @trask asked for something similar that's why #2165 (comment) exists. A very recent example is this PR for our documentation: open-telemetry/opentelemetry.io#4727 I am less worried about "instrumentation package" and "instrumentation module" since they are easily to understand as a synonym for "instrumentation library", however there are many cases of "auto(matic) instrumentation library/package/module", which gets even more common when we move outside docs but stay within the project:
Note, that I am not saying that those sentences are wrong and all those instances should be replaced with something different. If we look at the current definition of automatic instrumentation many of them are valid: the definition talks about methods and lists monkey patching and code manipulation as examples, and many of the instrumentation libraries above use those methods to instrument libraries. However we push(ed) for "Automatic Instrumentation" to be equivalent with language-level solutions to instrument an application without touching (or barely touching) the code. A few quotes from the ecosystem:
Again, based on the current definition there is nothing wrong with that. But it makes writing documentation and especially structuring documentation really hard. That's why we replaced "Automatic" with "Zero-Code Instrumentation" in our Information Architecture, because we needed to distinguish between "automatically instrumenting libraries" and "Automatic Instrumentation for Applications" |
Thanks for the notes and feel free to tell me to fork this to a different issue. I've heard customer asks in the past (sorry no quotes at the moment, but I'm sure we can find some) to "enable tracing", and sometimes they are surprised if "zero code" means recompiling and packaging, or re-linking. That or they have no idea which spring boot modules to depend on in order to get the "zero code" result, as that first requires them to know the inventory of what is in the app. So, I suggest we strengthen the terminology about agent (no code or packaging change) vs no code/quasi automatic (possibly a significant amount of work including understanding what's in the app and choosing dependencies) If driven by requesting user, it is more about black box vs grey box. If they only know about the app in terms of a black box, somethings called "automatic" will not help them, and possibly cause more confusion as automatic implies you don't need to do (and possibly know) anything my 2p |
thanks @codefromthecrypt, you bring up some good points and also helped me to re-think a few points. You are absolutely right that this is about the end-user and not confusing them, that's why I think we need some process to find good terminology as a community, because with whatever term we come up, if it is then not used or used differently by different parts of the project we can throw them out once again and begin again. To get back to @trask's and your request that you'd like to understand what I want to describe instead of talking about the words, let me try a different perspective with the risk of yet another lengthy comment: If we focus on the language-specific implementation SIGs we have the following "order" of things:
To emphasize this, we need a good name for layer 3, where I wrote (insert name here), so that when someones speaks about that it is clear what they mean, e.g. in a presentation, but especially in our documentation. That term needs to fulfill the following criteria:
Here is what we have today:
So none of these checks criteria 1.-3. (and does good with 4-6), so any ideas what to use? Footnotes |
Thanks for the evaluation of the layers. In tracing, I used to think and discuss only the following: tracers - layer 0 ps I think tools or operators that install agents are a subtopic of agents and not really fit in these categories as peers with them. So, basically I discussed auto-configuration as an alternative to, not a layer below agent. Possibly there is nuance where they are stacked, but I think people more often are thinking the right direction first on this, as APM agents have been around for a very very long time. So ramble aside, I think we very much should keep terminology for instrumentation and agents, and focus on trying not to use the word agent for pipeline stuff like collectors. This leaves things that are called "zero code" here, but I think it is misrepresentative and feels too buzzy as well. Basically autoconfiguration/bootstrap tactics which have a side effect on your binary. Spring boot as an example, is not zero code most of the time, as often people add annotations or other things at the bootstrap side. Certainly you have dependency issues that can affect your app functionality. Plus configuration is sometimes needed. Other languages have tactics that require changing how an application starts or its library dependencies. Compile or runtime solutions already exist in auto-configuration (e.g. spring boot and graalvm, spring vs dagger etc), so I would try to focus less on if something is compile or runtime and explain nuance after someone is at a more advanced level to the point they care. So, subtyping is really more the advanced explanation not the start of how we use the bucketed term. the bucketed terms shoud be few and mostly correct. So, I think we should drop the "zero code" and stick with "automatic instrumentation", even if warts remain. Basically that automatic typically requires a change to how your application starts and may require adding new depednencies or configuration. Application service code requires no code changes, but automation instrumentation frameworks typically configure tracers etc such that you can opt-into using them. I think this indeed leaves some "other" section, and that's possibly a more honest way to put it than try to make a term that matches everything. Possibly there are some link time things that aren't quite agents or automatic things that are post-compilation toolchain which aren't quite automatic instrumentation, but have a similar affect. I think most new people won't run into these first, so the main thing is to categorize the things that fit and focus on those, while having an advanced, appendix, FAQ for the things harder to pin down. My 2p |
Thanks for engaging in this conversation with me @codefromthecrypt! You made a few really good points, I appreciate that! Note, that the purpose of this issue was to request a process, and less about the specifics of the terminology. Per discussion with the @open-telemetry/technical-committee and @open-telemetry/governance-committee these terms should live in the Spec Glossary and we (@open-telemetry/docs-approvers) will raise issues/PRs against the spec to discuss them. I will close this issue for now, but I will raise follow up issues (soon!) to discuss this further, I will tag you (@codefromthecrypt) accordingly. Thanks! |
thanks for clarifying, I did indeed lose track of this being focused on process not specific outcomes. |
me too 😆 ... it's hard to distinguish the two! |
Hi @svrnm, I know I'm late to the party and you closed this issue, but I had a quick thought about the process of encouraging the use of the consistent terminology. You said:
As a new approver, may I suggest that each SIG adds a step to its onboarding process for new approvers to review and become familiar with the spec and community glossaries? We can act as a first line of defense against unsanctioned terminology in PRs and hopefully cut down on the enforcement burden for maintainers. |
This is an issue as old as the project and I get back to it again and again, to capture it at a central place I am creating this issue:
While writing documentation for different sub-projects of the OpenTelemetry project I ran into inconsistencies in terminology again and again. Sometimes because 2 SIGs created the same thing independently outside the specification and gave it different names, sometimes names are used slightly different because definitions are not precise and sometimes terminology is used that has a different definition in the spec. A few examples:
telemetry collection methods that do not require the end-user to modify application’s source code
, and it is used as a synonym for a bundle of instrumentation libraries, "zero-code solutions"1 (.NET, Go), in a sentence "the process of executing an automatically instrumented logs", or as a synom for a single instrumentation libraryopentelemetry-instrumentation-<framework>
, it is used to name automatic instrumentation (see the repository names for opentelemetry-java-instrumentation, opentelemetry-go-instrumentation, opentelemetry-dotnet-instrumentation), to name tools to auto instrument (python has a CLI tool calledopentelemetry-instrument
. In docs we now use it as top level title for what previously was called "manual instrumentation", e.g. "Language APIs & SDKs > PHP > Instrumentation"There are probably more examples of this, but the purpose of this issue is not to discuss those terms once again. We tried this before, but rarely found consensus,
So this issue is about
Since the text above already highlighted the problem, let me dive into the other points
Impact
I think that the biggest issue is that we confuse end users and contributors alike. It gets really hard to talk with people about certain OpenTelemetry concepts without misunderstandings due to those words meaning different things to different people.
Beyond that we have already created a lot of (almost) irreversible instances, as some of the examples above highlight.
Finally, we have a documentation issue (and this is mostly where I am coming from): We (SIG Comms) have a hard time to document certain elements of the project because the terminology is unclear, and if we ask for feedback on terminology our discussions mostly remains between us (open-telemetry/opentelemetry.io#3808, open-telemetry/opentelemetry.io#3809), so either we make a judgement call on our own OR we are stuck with moving certain changes forward.
Process for consistent terminology
This process implicitly exists already: the spec provides a glossary that lists terms and their meaning. Some of the terms above are listed there already, some are not, some have a definition that is not clear enough and then there is also a separate docs glossary.
What is missing is making that process explicit. There should be key requirements, likely
and most importantly how such a term is finalized without the community getting lost in bikeshedding, e.g. a term is proposed, there is a fixed time window to discuss it, then there is voting and then the "candidate" with the most votes is elected, maybe TC has a "veto".
If we could get to this point, this would be a huge help for writing better documentation, since we (SIG Comms) can come to the spec, ask for a term and can expect it to be available in a certain time.
Process for encouriging consistent terminology
This is where things get much more complicated. "Enforcement" is probably too strong and as mentioned above, there may be some irreversible decisions where we have to live with ambiguity, especially when packages, repos, etc. have been named already.
However, there are a few things we can do nevertheless:
Final Words
I know that this is not an easy issue to resolve, but I just wanted to start by capturing it and maybe we can make incremental progress.
Footnotes
A "zero code solution" is what I try to refer to when I speak about the Java agent or the .NET Automatic Instrumentation provide: a solution that can not only automatically instrument an application, but also handles configuration, exporting, etc. ↩
The text was updated successfully, but these errors were encountered: