进程和进程运行时资源

状态: 开发中

Process

状态: 开发中

类型: process

描述: 操作系统进程。

Attributes

Stability需求级别Value Type描述Example Values
process.args_countDevelopment有条件地必需 [1]int进程的 `process.command_args` 数组的长度 [2]4
process.commandDevelopment有条件地必需 [3]字符串用于启动进程的命令(即命令名)。在基于 Linux 的系统上,可以设置为 proc/[pid]/cmdline 中的零个字符串。在 Windows 上,可以设置为从 GetCommandLineW 提取的第一个参数。cmd/otelcol
process.command_argsDevelopment有条件地必需 [4]string[]进程接收到的所有命令行参数(包括命令/可执行文件本身)。在基于 Linux 的系统(以及其他支持 procfs 的类 Unix 系统)上,可以根据从 proc/[pid]/cmdline 提取的空分隔字符串列表进行设置。对于基于 libc 的可执行文件,这将是传递给 main 的完整 argv 向量。除非进行了排除敏感数据的清理,否则默认不应收集。["cmd/otecol", "--config=config.yaml"]
process.command_lineDevelopment有条件地必需 [5]字符串用于启动进程的完整命令,表示为单个字符串。在 Windows 上,可以设置为 GetCommandLineW 的结果。如果您必须为监控而组装它,请不要设置此值;请改用 process.command_args。除非进行了排除敏感数据的清理,否则默认不应收集。C:\cmd\otecol --config="my directory\config.yaml"
process.executable.nameDevelopment有条件地必需 [6]字符串进程可执行文件的名称。在基于 Linux 的系统上,应将其设置为 /proc/[pid]/exe 目标的基名称。在 Windows 上,应将其设置为 GetProcessImageFileNameW 的基名称。otelcol
process.executable.pathDevelopment有条件地必需 [7]字符串进程可执行文件的完整路径。在基于 Linux 的系统上,可以设置为 proc/[pid]/exe 的目标。在 Windows 上,可以设置为 GetProcessImageFileNameW 的结果。/usr/bin/cmd/otelcol
process.creation.timeDevelopment推荐字符串进程创建的日期和时间,格式为 ISO 8601。2023-11-21T09:25:34.853Z
process.interactiveDevelopment推荐布尔值进程是否连接到交互式 shell。
process.linux.cgroupDevelopment推荐字符串与进程关联的控制组。 [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.ownerDevelopment推荐字符串拥有该进程的用户名称。root
process.parent_pidDevelopment推荐int父进程标识符 (PPID)。111
process.pidDevelopment推荐int进程标识符 (PID)。1234
process.titleDevelopment推荐字符串进程标题 (proctitle) [9]cat /etc/hostname; xfce4-session; bash
process.working_directoryDevelopment推荐字符串进程的工作目录。/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.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.descriptionDevelopment推荐字符串关于进程运行时的附加描述,例如特定供应商的运行时环境定制。Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0
process.runtime.nameDevelopment推荐字符串此进程运行时的名称。OpenJDK 运行时环境
process.runtime.versionDevelopment推荐字符串此进程运行时的版本,由运行时直接返回。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.nameprocess.runtime.versionprocess.runtime.description
BEAM11.1Erlang/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`。
gccgogccgo 是 GCC 的 Go 前端
tinygoTinyGo 编译器。

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.nameprocess.runtime.versionprocess.runtime.description
OpenJDKOpenJDK 运行时环境11.0.8+10Oracle Corporation OpenJDK 64-Bit Server VM 11.0.8+10
AdoptOpenJDK Eclipse J9OpenJDK 运行时环境11.0.8+10Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0
AdoptOpenJDK HotspotOpenJDK 运行时环境11.0.8+10AdoptOpenJDK OpenJDK 64-Bit Server VM 11.0.8+10
SapMachineOpenJDK 运行时环境11.0.8+10-LTS-sapmachineSAP SE OpenJDK 64-Bit Server VM 11.0.8+10-LTS-sapmachine
Zulu OpenJDKOpenJDK 运行时环境11.0.8+10-LTSAzul Systems, Inc OpenJDK 64-Bit Server VM Zulu11.41+23-CA
Oracle Hotspot 8 (32 位)Java(TM) SE Runtime Environment1.8.0_221-b11Oracle Corporation Java HotSpot(TM) Client VM 25.221-b11
IBM J9 8Java(TM) SE Runtime Environment8.0.5.25 - pwa6480sr5fp25-20181030_01(SR5 FP25)IBM Corporation IBM J9 VM 2.9
Android 11Android Runtime0.9The 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.nameprocess.runtime.version
Node.jsnodejs14.15.4
Web 浏览器browserMozilla/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.nameprocess.runtime.versionprocess.runtime.description
.NET Framework.NET Framework4.8.NET Framework 4.8.9195.0
.NET.NET7.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.nameprocess.runtime.versionprocess.runtime.description
CPython 3.7.3 on Windowscpython3.7.33.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]
CPython 3.13.1 on Linuxcpython3.13.13.13.1 (main, Dec 6 2024, 18:40:43) [Clang 18.1.8 ]
PyPy 3 7.3.17 on Linuxpypy7.3.173.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.nameprocess.runtime.versionprocess.runtime.description
MRIruby2.7.1ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
TruffleRubytruffleruby2.6.2truffleruby (Shopify) 20.0.0-dev-92ed3059, like ruby 2.6.2, GraalVM CE Native [x86_64-darwin]