# Process and process runtime resources **Status**: [Experimental](../../document-status.md) - [Process](#process) - [Process runtimes](#process-runtimes) * [Erlang Runtimes](#erlang-runtimes) * [Go Runtimes](#go-runtimes) * [Java runtimes](#java-runtimes) * [JavaScript runtimes](#javascript-runtimes) * [.NET Runtimes](#net-runtimes) * [Python Runtimes](#python-runtimes) * [Ruby Runtimes](#ruby-runtimes) ## Process **type:** `process` **Description:** An operating system process. | Attribute | Type | Description | Examples | Requirement Level | |---|---|---|---|---| | `process.pid` | int | Process identifier (PID). | `1234` | Recommended | | `process.executable.name` | string | The name of the process executable. On Linux based systems, can be set to the `Name` in `proc/[pid]/status`. On Windows, can be set to the base name of `GetProcessImageFileNameW`. | `otelcol` | Conditionally Required: See alternative attributes below. | | `process.executable.path` | string | The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`. | `/usr/bin/cmd/otelcol` | Conditionally Required: See alternative attributes below. | | `process.command` | string | 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` | Conditionally Required: See alternative attributes below. | | `process.command_line` | string | The full command used to launch the process as a single string representing the full command. On Windows, can be set to the result of `GetCommandLineW`. Do not set this if you have to assemble it just for monitoring; use `process.command_args` instead. | `C:\cmd\otecol --config="my directory\config.yaml"` | Conditionally Required: See alternative attributes below. | | `process.command_args` | string[] | All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`. | `[cmd/otecol, --config=config.yaml]` | Conditionally Required: See alternative attributes below. | | `process.owner` | string | The username of the user that owns the process. | `root` | Recommended | **Additional attribute requirements:** At least one of the following sets of attributes is required: * `process.executable.name` * `process.executable.path` * `process.command` * `process.command_line` * `process.command_args` Between `process.command_args` and `process.command_line`, usually `process.command_args` should be preferred. On Windows and other systems where the native format of process commands is a single string, `process.command_line` can additionally (or instead) be used. For backwards compatibility with older versions of this semantic convention, it is possible but deprecated to use an array as type for `process.command_line`. In that case it MUST be interpreted as if it was `process.command_args`. ## Process runtimes **type:** `process.runtime` **Description:** The single (language) runtime instance which is monitored. | Attribute | Type | Description | Examples | Requirement Level | |---|---|---|---|---| | `process.runtime.name` | string | The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of the compiler. | `OpenJDK Runtime Environment` | Recommended | | `process.runtime.version` | string | The version of the runtime of this process, as returned by the runtime without modification. | `14.0.2` | Recommended | | `process.runtime.description` | string | An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment. | `Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0` | Recommended | How to set these attributes for particular runtime kinds is described in the following subsections. In addition to these attributes, [`telemetry.sdk.language`](README.md#telemetry-sdk) can be used to determine the general kind of runtime used. ### Erlang Runtimes - `process.runtime.name` - The name of the Erlang VM being used, i.e., `erlang:system_info(machine)`. - `process.runtime.version` - The version of the runtime (ERTS - Erlang Runtime System), i.e., `erlang:system_info(version)`. - `process.runtime.description` - string | An additional description about the runtime made by combining the OTP version, i.e., `erlang:system_info(otp_release)`, and ERTS version. Example: | `process.runtime.name` | `process.runtime.version` | `process.runtime.description` | | --- | --- | --- | | BEAM | 11.1 | Erlang/OTP 23 erts-11.1 | ### Go Runtimes Go Runtimes should fill in the as follows: - `process.runtime.name` - Fill in an interpretation of Go's [`runtime.Compiler`](https://pkg.go.dev/runtime#Compiler) constant, according to the following rule: If the value is `gc`, fill in `go`. Otherwise, fill in the exact value of `runtime.Compiler`. This can be implemented with the following Go snippet: ```go import "runtime" func getRuntimeName() string { if runtime.Compiler == "gc" { return "go" } return runtime.Compiler } ``` - `process.runtime.version` - Fill in the exact value returned by `runtime.Version()`, i.e. `go1.17`. - `process.runtime.description` - Use of this field is not recommended. Examples for some Go compilers/runtimes: | `process.runtime.name` | Description | | --- | --- | | `go` | Official Go compiler. Also known as `cmd/compile`. | | `gccgo` | [gccgo](https://go.dev/doc/install/gccgo) is a Go [front end for GCC](https://gcc.gnu.org/frontends.html). | | `tinygo` | [TinyGo](https://tinygo.org/) compiler. | ### 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 values of `java.vm.vendor`, `java.vm.name`, `java.vm.version` in that order, separated by spaces. 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 OpenJDK 64-Bit Server VM 11.0.8+10 | | AdoptOpenJDK Eclipse J9 | OpenJDK Runtime Environment | 11.0.8+10 | Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0 | | AdoptOpenJDK Hotspot | OpenJDK Runtime Environment | 11.0.8+10 | AdoptOpenJDK OpenJDK 64-Bit Server VM 11.0.8+10 | | SapMachine | OpenJDK Runtime Environment | 11.0.8+10-LTS-sapmachine | SAP SE OpenJDK 64-Bit Server VM 11.0.8+10-LTS-sapmachine | | Zulu OpenJDK | OpenJDK Runtime Environment | 11.0.8+10-LTS | Azul Systems, Inc OpenJDK 64-Bit Server VM Zulu11.41+23-CA | | Oracle Hotspot 8 (32 bit) | Java(TM) SE Runtime Environment | 1.8.0_221-b11 | Oracle Corporation Java HotSpot(TM) Client VM 25.221-b11 | | IBM J9 8 | Java(TM) SE Runtime Environment | 8.0.5.25 - pwa6480sr5fp25-20181030_01(SR5 FP25) | IBM Corporation IBM J9 VM 2.9 | | Android 11 | Android Runtime | 0.9 | The Android Project Dalvik 2.1.0 | ### JavaScript runtimes JavaScript instrumentation should fill in the values by copying from built-in runtime constants. - `process.runtime.name`: - When the runtime is Node.js, fill in the constant value `nodejs`. - When the runtime is Web Browser, fill in the constant value `browser`. - `process.runtime.version`: - When the runtime is Node.js, fill in the value of `process.versions.node`. - When the runtime is Web Browser, fill in the value of `navigator.userAgent`. Examples for some JavaScript runtimes | Name | `process.runtime.name` | `process.runtime.version` | | --- | --- | --- | | Node.js | nodejs | 14.15.4 | | Web Browser | browser | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 | ### .NET Runtimes TODO(): Confirm the contents here | Value | Description | | --- | --- | | `dotnet-core` | .NET Core, .NET 5+ | | `dotnet-framework` | .NET Framework | | `mono` | Mono | ### Python Runtimes Python instrumentation should fill in the values as follows: - `process.runtime.name` - Fill in the value of [`sys.implementation.name`][py_impl] - `process.runtime.version` - Fill in the [`sys.implementation.version`][py_impl] values separated by dots. Leave out the release level and serial if the release level equals `final` and the serial equals zero (leave out either both or none). This can be implemented with the following Python snippet: ```python vinfo = sys.implementation.version result = ".".join(map( str, vinfo[:3] if vinfo.releaselevel == "final" and not vinfo.serial else vinfo )) ``` - `process.runtime.description` - Fill in the value of [`sys.version`](https://docs.python.org/3/library/sys.html#sys.version) as-is. [py_impl]: https://docs.python.org/3/library/sys.html#sys.implementation Examples for some Python runtimes: | Name | `process.runtime.name` | `process.runtime.version` | `process.runtime.description` | | --- | --- | --- | --- | | CPython 3.7.3 on Windows | cpython | 3.7.3 | 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] | | CPython 3.8.6 on Linux | cpython | 3.8.6 | 3.8.6 (default, Sep 30 2020, 04:00:38)
[GCC 10.2.0] | | PyPy 3 7.3.2 on Linux | pypy | 3.7.4 | 3.7.4 (?, Sep 27 2020, 15:12:26)
[PyPy 7.3.2-alpha0 with GCC 10.2.0] | Note that on Linux, there is an actual newline in the `sys.version` string, and the CPython string had a trailing space in the first line. Pypy provided a CPython-compatible version in `sys.implementation.version` instead of the actual implementation version which is available in `sys.version`. ### 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] |