进程和进程运行时资源
状态: 开发中
Process
状态:
类型: process
描述: 操作系统进程。
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
process.args_count | 有条件地必需 [1] | int | 进程的 `process.command_args` 数组的长度 [2] | 4 | |
process.command | 有条件地必需 [3] | 字符串 | 用于启动进程的命令(即命令名)。在基于 Linux 的系统上,可以设置为 proc/[pid]/cmdline 中的零个字符串。在 Windows 上,可以设置为从 GetCommandLineW 提取的第一个参数。 | cmd/otelcol | |
process.command_args | 有条件地必需 [4] | string[] | 进程接收到的所有命令行参数(包括命令/可执行文件本身)。在基于 Linux 的系统(以及其他支持 procfs 的类 Unix 系统)上,可以根据从 proc/[pid]/cmdline 提取的空分隔字符串列表进行设置。对于基于 libc 的可执行文件,这将是传递给 main 的完整 argv 向量。除非进行了排除敏感数据的清理,否则默认不应收集。 | ["cmd/otecol", "--config=config.yaml"] | |
process.command_line | 有条件地必需 [5] | 字符串 | 用于启动进程的完整命令,表示为单个字符串。在 Windows 上,可以设置为 GetCommandLineW 的结果。如果您必须为监控而组装它,请不要设置此值;请改用 process.command_args。除非进行了排除敏感数据的清理,否则默认不应收集。 | C:\cmd\otecol --config="my directory\config.yaml" | |
process.executable.name | 有条件地必需 [6] | 字符串 | 进程可执行文件的名称。在基于 Linux 的系统上,应将其设置为 /proc/[pid]/exe 目标的基名称。在 Windows 上,应将其设置为 GetProcessImageFileNameW 的基名称。 | otelcol | |
process.executable.path | 有条件地必需 [7] | 字符串 | 进程可执行文件的完整路径。在基于 Linux 的系统上,可以设置为 proc/[pid]/exe 的目标。在 Windows 上,可以设置为 GetProcessImageFileNameW 的结果。 | /usr/bin/cmd/otelcol | |
process.creation.time | 推荐 | 字符串 | 进程创建的日期和时间,格式为 ISO 8601。 | 2023-11-21T09:25:34.853Z | |
process.interactive | 推荐 | 布尔值 | 进程是否连接到交互式 shell。 | ||
process.linux.cgroup | 推荐 | 字符串 | 与进程关联的控制组。 [8] | 1:name=systemd:/user.slice/user-1000.slice/session-3.scope; 0::/user.slice/user-1000.slice/user@1000.service/tmux-spawn-0267755b-4639-4a27-90ed-f19f88e53748.scope | |
process.owner | 推荐 | 字符串 | 拥有该进程的用户名称。 | root | |
process.parent_pid | 推荐 | int | 父进程标识符 (PPID)。 | 111 | |
process.pid | 推荐 | int | 进程标识符 (PID)。 | 1234 | |
process.title | 推荐 | 字符串 | 进程标题 (proctitle) [9] | cat /etc/hostname; xfce4-session; bash | |
process.working_directory | 推荐 | 字符串 | 进程的工作目录。 | /root |
[1] process.args_count: 有关详细信息,请参阅 选择进程属性。
[2] process.args_count: 此字段可用于查询或执行关于提供了多少参数来启动进程的存储桶分析。提供更多参数可能表明存在可疑活动。
[3] process.command: 有关详细信息,请参阅 选择进程属性。
[4] process.command_args: 有关详细信息,请参阅 选择进程属性。
[5] process.command_line: 有关详细信息,请参阅 选择进程属性。
[6] process.executable.name: 有关详细信息,请参阅 选择进程属性。
[7] process.executable.path: 有关详细信息,请参阅 选择进程属性。
[8] process.linux.cgroup: 控制组 (cgroups) 是一项内核功能,用于组织和管理进程资源。此属性提供与进程关联的 cgroup 的路径,该路径应与 `/proc/[PID]/cgroup` 文件的内容匹配。
[9] process.title: 在许多类 Unix 系统中,进程标题 (proctitle) 是表示正在运行进程的名称或命令行的字符串,显示在 ps、top 和 htop 等系统监视工具中。
选择进程属性
至少需要以下属性之一
process.executable.nameprocess.executable.pathprocess.commandprocess.command_lineprocess.command_args
在 `process.command_args` 和 `process.command_line` 之间,通常应优先选择 `process.command_args`。在 Windows 和其他进程命令的本机格式为单个字符串的系统上,还可以(或替代地)使用 `process.command_line`。
当不对参数进行清理时,还可以提供 `process.args_count`,或者用它替代。
进程运行时
状态:
类型: process.runtime
描述: 正在监视的单个(语言)运行时实例。
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
process.runtime.description | 推荐 | 字符串 | 关于进程运行时的附加描述,例如特定供应商的运行时环境定制。 | Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0 | |
process.runtime.name | 推荐 | 字符串 | 此进程运行时的名称。 | OpenJDK 运行时环境 | |
process.runtime.version | 推荐 | 字符串 | 此进程运行时的版本,由运行时直接返回。 | 14.0.2 |
特定运行时类型的这些属性的设置方式将在以下子节中进行描述。
除这些属性外,还可以使用 `telemetry.sdk.language` 来确定使用的运行时的大致类型。
Erlang 运行时
process.runtime.name- 使用的 Erlang VM 的名称,即 `erlang:system_info(machine)`。process.runtime.version- 运行时(ERTS - Erlang Runtime System)的版本,即 `erlang:system_info(version)`。process.runtime.description- string | 结合 OTP 版本(即 `erlang:system_info(otp_release)`)和 ERTS 版本创建的关于运行时的附加描述。
示例
process.runtime.name | process.runtime.version | process.runtime.description |
|---|---|---|
| BEAM | 11.1 | Erlang/OTP 23 erts-11.1 |
Go 运行时
Go 运行时应按照如下方式填充:
process.runtime.name- 根据以下规则填充 Go 的 `runtime.Compiler` 常量的解释:如果值为 `gc`,则填充 `go`。否则,填充 `runtime.Compiler` 的确切值。可以使用以下 Go 代码片段实现此目的
import "runtime" func getRuntimeName() string { if runtime.Compiler == "gc" { return "go" } return runtime.Compiler }process.runtime.version- 填充 `runtime.Version()` 返回的确切值,即 `go1.17`。process.runtime.description- 不建议使用此字段。
一些 Go 编译器/运行时的示例
process.runtime.name | 描述 |
|---|---|
go | 官方 Go 编译器。也称为 `cmd/compile`。 |
gccgo | gccgo 是 GCC 的 Go 前端。 |
tinygo | TinyGo 编译器。 |
Java 运行时
Java 仪器应通过从系统属性复制值来填充。
process.runtime.name- 按原样填充 `java.runtime.name` 的值process.runtime.version- 按原样填充 `java.runtime.version` 的值process.runtime.description- 按顺序填充 `java.vm.vendor`、`java.vm.name`、`java.vm.version` 的值,并用空格分隔。
一些 Java 运行时的示例
| 名称 | process.runtime.name | process.runtime.version | process.runtime.description |
|---|---|---|---|
| OpenJDK | OpenJDK 运行时环境 | 11.0.8+10 | Oracle Corporation OpenJDK 64-Bit Server VM 11.0.8+10 |
| AdoptOpenJDK Eclipse J9 | OpenJDK 运行时环境 | 11.0.8+10 | Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0 |
| AdoptOpenJDK Hotspot | OpenJDK 运行时环境 | 11.0.8+10 | AdoptOpenJDK OpenJDK 64-Bit Server VM 11.0.8+10 |
| SapMachine | OpenJDK 运行时环境 | 11.0.8+10-LTS-sapmachine | SAP SE OpenJDK 64-Bit Server VM 11.0.8+10-LTS-sapmachine |
| Zulu OpenJDK | OpenJDK 运行时环境 | 11.0.8+10-LTS | Azul Systems, Inc OpenJDK 64-Bit Server VM Zulu11.41+23-CA |
| Oracle Hotspot 8 (32 位) | 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 运行时
JavaScript 仪器应通过从内置运行时常量复制值来填充。
process.runtime.name:- 当运行时为 Node.js 时,填充常量值 `nodejs`。
- 当运行时为 Web 浏览器时,填充常量值 `browser`。
process.runtime.version:- 当运行时为 Node.js 时,填充 `process.versions.node` 的值。
- 当运行时为 Web 浏览器时,填充 `navigator.userAgent` 的值。
一些 JavaScript 运行时的示例
| 名称 | process.runtime.name | process.runtime.version |
|---|---|---|
| Node.js | nodejs | 14.15.4 |
| Web 浏览器 | 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 运行时
.NET 仪器应按照以下值填充:
process.runtime.name- 根据运行时的名称填充值。process.runtime.version- 对于 .NET,填充 `System.Environment.Version` 的值;对于 .NET Framework,根据 注册表值 确定版本。process.runtime.description- 填充 `System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription` 的值。
process.runtime.name 具有以下已知值列表。如果其中一个适用,则应使用相应的值,否则应使用自定义值。
- .NET Framework
- .NET
- .NET Core
- .NET Native
一些 .NET 运行时的示例
| 名称 | process.runtime.name | process.runtime.version | process.runtime.description |
|---|---|---|---|
| .NET Framework | .NET Framework | 4.8 | .NET Framework 4.8.9195.0 |
| .NET | .NET | 7.0.14 | .NET 7.0.14 |
Python 运行时
Python 仪器应按如下方式填充值:
process.runtime.name- 填充 `sys.implementation.name` 的值。process.runtime.version- 用点号分隔 `sys.implementation.version` 的值。如果发布级别等于 `final` 且序列等于零,则省略发布级别和序列(两者都省略或都不省略)。可以使用以下 Python 代码片段实现此目的
vinfo = sys.implementation.version result = ".".join(map( str, vinfo[:3] if vinfo.releaselevel == "final" and not vinfo.serial else vinfo ))process.runtime.description- 按原样填充 `sys.version` 的值。
一些 Python 运行时的示例
| 名称 | 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.13.1 on Linux | cpython | 3.13.1 | 3.13.1 (main, Dec 6 2024, 18:40:43) [Clang 18.1.8 ] |
| PyPy 3 7.3.17 on Linux | pypy | 7.3.17 | 3.10.14 (39dc8d3c85a7, Aug 27 2024, 14:32:27) [PyPy 7.3.17 with GCC 10.2.1 20210130 (Red Hat 10.2.1-11)] |
请注意,在 CPython GCC/Clang Linux 版本(包括 3.9 及更早版本)和 PyPy 上,`sys.version` 字符串中有一个实际的换行符。
Ruby 运行时
Ruby 仪器应通过从内置运行时常量复制值来填充。
process.runtime.name- 按原样填充 `RUBY_ENGINE` 的值。process.runtime.version- 按原样填充 `RUBY_VERSION` 的值。process.runtime.description- 按原样填充 `RUBY_DESCRIPTION` 的值。
一些 Ruby 运行时的示例
| 名称 | 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] |