-
Notifications
You must be signed in to change notification settings - Fork 889
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
Add process.runtime.name / version describing executing runtime #882
Changes from all commits
49592a3
2a3feba
9f441cd
ce631d5
0826034
0b19aa9
a0482e0
84f3423
c201764
10df2c7
afedfac
31e2ffe
e5596f2
faf5381
7906c26
9eec3e5
6a3aca1
090e92e
25fe6d2
9544066
054fc9e
accbb0a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,5 +12,104 @@ | |
| process.command | The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`. | `cmd/otelcol` | See below | | ||
| process.command_line | The full command used to launch the process. The value can be either a list of strings representing the ordered list of arguments, or a single string representing the full command. On Linux based systems, can be set to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. On Windows, can be set to the result of `GetCommandLineW`. | Linux: `[ cmd/otecol, --config=config.yaml ]`, Windows: `cmd/otecol --config=config.yaml` | See below | | ||
| process.owner | The username of the user that owns the process. | `root` | No | | ||
| process.runtime.name | The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of the compiler. | `OpenJDK Runtime Environment` | No | | ||
| process.runtime.version | The version of the runtime of this process, as returned by the runtime without modification. | `14.0.2` | No | | ||
| process.runtime.description | An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment. | `Eclipse OpenJ9 openj9-0.21.0` | No | | ||
|
||
At least one of `process.executable.name`, `process.executable.path`, `process.command`, or `process.command_line` is required. | ||
|
||
`process.runtime.name` SHOULD be set to one of the values listed below, unless more detailed instructions are provided. | ||
If none of the listed values apply, a custom value best describing the runtime CAN be used. | ||
|
||
***Erlang Runtimes:*** | ||
|
||
TODO(<https://github.com/open-telemetry/opentelemetry-erlang/issues/96>): Confirm the contents here | ||
|
||
- `process.runtime.name` - The name of the Erlang runtime being used. Usually will be BEAM. | ||
- `process.runtime.version` - The ERTS (Erlang Runtime System) version. For BEAM this is found with `application:get_key(erts, vsn)`. | ||
- `process.runtime.description` - The OTP version `erlang:system_info(otp_release)` and ERTS version combined. | ||
|
||
Example: | ||
|
||
| Name | `process.runtime.name` | `process.runtime.version` | `process.runtime.description` | | ||
| --- | --- | --- | --- | | ||
| beam | BEAM | 11.0.3 | Erlang/OTP 24 erts-11.0.3 | | ||
|
||
***Go Runtimes:*** | ||
|
||
TODO(<https://github.com/open-telemetry/opentelemetry-go/issues/1181>): Confirm the contents here | ||
|
||
| Value | Description | | ||
| --- | --- | | ||
| `gc` | Go compiler | | ||
| `gccgo` | GCC Go frontend | | ||
|
||
***Java runtimes:*** | ||
|
||
Java instrumentation should fill in the values by copying from system properties. | ||
|
||
- `process.runtime.name` - Fill in the value of `java.runtime.name` as is | ||
- `process.runtime.version` - Fill in the value of `java.runtime.version` as is | ||
- `process.runtime.description` - Fill in the value of `java.vm.vendor`, followed by a space, followed by `java.vm.version` | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What about There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Based on what I see in https://gist.github.com/anuraaga/c79219a7e4401515c3de998f9d077be0 it doesn't seem to add much, only special value is OpenJ9 but that's captured by java.vm.vendor too. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Indeed seems like it. Maybe we can add another special resource convention for JVMs or Java system properties, should it be needed. The only other interesting value that I could find in my system properties would be |
||
|
||
Examples for some Java runtimes | ||
|
||
| Name | `process.runtime.name` | `process.runtime.version` | `process.runtime.description` | | ||
| --- | --- | --- | --- | | ||
| OpenJDK | OpenJDK Runtime Environment | 11.0.8+10 | Oracle Corporation 11.0.8+10 | | ||
| AdoptOpenJDK Eclipse J9 | OpenJDK Runtime Environment | 11.0.8+10 | Eclipse OpenJ9 openj9-0.21.0 | | ||
| AdoptOpenJDK Hotspot | OpenJDK Runtime Environment | 11.0.8+10 | AdoptOpenJDK 11.0.8+10 | | ||
| SapMachine | OpenJDK Runtime Environment | 11.0.8+10-LTS-sapmachine | SAP SE 11.0.8+10-LTS-sapmachine | | ||
| Zulu OpenJDK | OpenJDK Runtime Environment | 11.0.8+10-LTS | Azul Systems, Inc Zulu11.41+23-CA | | ||
| Android 11 | Android Runtime | 0.9 | The Android Project 2.1.0 | | ||
|
||
***JavaScript runtimes:*** | ||
|
||
TODO(<https://github.com/open-telemetry/opentelemetry-js/issues/1544>): Confirm the contents here | ||
|
||
| Value | Description | | ||
| --- | --- | | ||
| `nodejs` | NodeJS | | ||
| `browser` | Web Browser | | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should the user agent string be reported in this case? Or some other browser name/version identification? Or would that name be part of the version? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. User agent parsing is very hairy, so my instinct is to not make the SDK fill in anything smarter here than There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think explicitly saying that in case of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks, let me know if it's clear, I don't know how well the new API is supported right now so I'm leaving it out for now but if it seems worth mentioning let me know. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry had forgotten to git push >< Now it has my new line about browser. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we should not use the "user-agent" in the version. The runtime:
Or maybe completely exclude I don't have big experience with browsers so I may be wrong. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As browser is a drastically different runtime (even the opentelemetry-js distribution is different for server vs browser) I definitely want to include it somewhere. I feel as if the current recommendation provides good information to backends, and is There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That should be good, or maybe just leave TODOs instead of providing things for all the other languages. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've added TODOs with linked issues. I hope what's here can be helpful for the language owners, though might not be but lean towards not clearing it out since it's at least something I think. |
||
| `iojs` | io.js | | ||
| `graalvm` | GraalVM | | ||
|
||
When the value is `browser`, `process.runtime.version` SHOULD be set to the User-Agent header. | ||
|
||
***.NET Runtimes:*** | ||
|
||
TODO(<https://github.com/open-telemetry/opentelemetry-dotnet/issues/1281>): Confirm the contents here | ||
|
||
| Value | Description | | ||
| --- | --- | | ||
| `dotnet-core` | .NET Core, .NET 5+ | | ||
| `dotnet-framework` | .NET Framework | | ||
| `mono` | Mono | | ||
|
||
***Python Runtimes:*** | ||
|
||
TODO(<https://github.com/open-telemetry/opentelemetry-python/issues/1127>): Confirm the contents here | ||
|
||
| Value | Description | | ||
| --- | --- | | ||
| `cpython` | CPython | | ||
| `graalvm` | GraalVM | | ||
| `ironpython` | IronPython | | ||
| `jython` | Jython | | ||
| `pypy` | PyPy| | ||
| `pythonnet` | PythonNet | | ||
|
||
***Ruby Runtimes:*** | ||
|
||
Ruby instrumentation should fill in the values by copying from built-in runtime constants. | ||
|
||
- `process.runtime.name` - Fill in the value of `RUBY_ENGINE` as is | ||
- `process.runtime.version` - Fill in the value of `RUBY_VERSION` as is | ||
- `process.runtime.description` - Fill in the value of `RUBY_DESCRIPTION` as is | ||
|
||
Examples for some Ruby runtimes | ||
|
||
| Name | `process.runtime.name` | `process.runtime.version` | `process.runtime.description` | | ||
| --- | --- | --- | --- | | ||
| MRI | ruby | 2.7.1 | ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19] | | ||
| TruffleRuby | truffleruby | 2.6.2 | truffleruby (Shopify) 20.0.0-dev-92ed3059, like ruby 2.6.2, GraalVM CE Native [x86_64-darwin] | |
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.
These seem to cover the Go language implementations that I'm aware of. I'm not sure we've ever tested with
gccgo
, but as an example it is fine.Version information can be obtained from the
runtime.Version()
function and should indicate either a semver identifier or a commit hash and date in the case of a non-release build of the toolchain.