你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

OpenTelemetry 来宾操作系统指标(预览版)

在Microsoft,我们通过采用和支持存储在 Azure Monitor Workspaces(AMW)中的 OpenTelemetry 指标,采用开放标准,并在所有 AMW 指标中使用 Prometheus 查询语言(PromQl)我们的基础指标查询语言。

在阅读本文之前,建议用户首先了解 虚拟机上的主机 OS 与来宾 OS 性能计数器之间的差异。

本文介绍用户必须选择加入才能收集的来宾操作系统性能计数器,收集方式包括通过使用 DCR 的 Azure Monitor 代理、使用 DCR 的 VM Insights,或者作为 OTel 检测库的一部分,由用户使用 OTelCollector 收集。 建议用户将所有指标存储在指标优化的 Azure Monitor 工作区中,这些指标比 Log Analytics 工作区中的查询更便宜、更快。

本文为用户提供以下信息:

OpenTelemetry 客户操作系统性能计数器目前正在公开预览。

性能计数器

Windows 和 Linux 都为用户提供与 CPU 使用率、内存消耗、磁盘 I/O、网络等相关的 OS 级指标,以帮助诊断性能问题。 现在,可以使用 Windows 上的 性能监视器(perfmon) 或使用 Linux 上的 perf 命令 ,轻松查看本地计算机上的示例。

可用 OS 性能计数器的总数是动态的,Windows 默认提供 约 1846 个 OS 性能计数器 ,并基于本地计算机可用的硬件、软件和跟踪点事件提供更多可用计数器。

OpenTelemetry 指标的子集称为 系统指标。 系统指标本质上是性能计数器的另一个名称;它们是一个开放源代码标准,用于对性能计数器进行一致的命名和格式设置,并且不添加任何全新的 OS 性能计数器。

OpenTelemetry 的优点

跨 OS 可观测性 适用于系统指标的 OpenTelemetry 语义约定通过将 Windows 和 Linux 性能计数器聚合为一致的命名约定和指标数据模型,简化了跨 OS 最终用户体验。 这样,用户可以使用一组用于 Windows 或 Linux 操作系统映像的查询,更轻松地管理其舰队中的虚拟机/节点。 使用相同 PromQl 查询的相同配置即代码(ARM/Bicep 模板、Terraform 等)可用于采用 OpenTelemetry 系统指标的任何托管资源。

更多性能计数器:“OpenTelemetry 收集器主机指标接收器”收集的性能计数器数量,比 Azure Monitor 目前通过带有 DCR 且以 Log Analytics 工作区为目标的方式所能收集的数量更多。 例如,用户现在可以监视每个进程 CPU 利用率、磁盘 I/O、内存使用情况等。

性能计数器更少 在许多情况下,现有性能计数器已简化为单个 OTel 系统指标,其中指标维度 (资源属性) 简化了用户体验。

例如,处于不同状态的 CPU 时间可以在 Windows 中显示为以下三个性能计数器:

  • \Processor Information(_Total)% Processor Time
  • \处理器信息(_总计)% 受保护时间
  • \Processor Information(_Total)% User Time 或 Linux 中的下述 7 个性能计数器:
  • CPU/用户使用率
  • Cpu/usage_system
  • Cpu/usage_idle
  • Cpu/usage_active
  • Cpu/usage_nice
  • Cpu/usage_iowait
  • Cpu/usage_irq

在 OpenTelemetry 中,所有这些计数器都将成为单个性能计数器:system.cpu.time,现在只需筛选维度 状态即可找到每个状态(例如用户、系统、空闲)的时间。

Azure Monitor 工作区的优点

由于支持这些不同数据存储的数据模型不同,存储在 Azure Monitor 工作区中的指标相比存储在 Log Analytics 工作区中的指标,查询时更便宜且更快。

除了这些常规优势之外,用户不再在 Perf 和 Insights 表之间的架构中遇到不匹配的情况。 发送到 AMW 的 VM Insights (v2) 使用我们提供给用户的部分 OpenTelemetry 系统指标,跨用户队列提供无缝兼容性。 如果大型企业拥有应用程序团队且同时使用 VM Insights 和非 VM Insights 来宾操作系统性能计数器监视,这些企业可以为相同的 OTel 指标使用相同的 PromQl 查询、仪表板和警报。

性能计数器名称

适用于 Windows 和 Linux 虚拟机的 Azure Monitor 代理收集以下性能计数器。 默认采样频率为 60 秒,但在创建或更新数据收集规则时,可以更改此频率。

OTel 性能计数器 类型 单位 集合体 单调 尺寸 Description
系统.cpu.利用率 仪表 1 N/A FALSE cpu:从 0 开始的逻辑 CPU 编号(值:任何 Str)
状态:按类型细分 CPU 使用率(值:idle、interrupt、nice、softirq、steal、system、user、wait)
每个逻辑 CPU 自上次测量以来的 system.cpu.time 差值,再除以经过的时间 (0-1)。
system.cpu.time 总和 s 累积 TRUE cpu:从 0 开始的逻辑 CPU 编号(值:任何 Str)
状态:按类型细分 CPU 使用率(值:idle、interrupt、nice、softirq、steal、system、user、wait)
每个模式上花费的每个逻辑 CPU 的总秒数。
system.cpu.physical.count 总和 {中央处理器} 累积 FALSE (无) 可用物理 CPU 数。
system.cpu.logical.count 总和 {中央处理器} 累积 FALSE cpu:从 0 开始的逻辑 CPU 编号(值:任何 Str) 可用逻辑 CPU 数。
系统CPU负载平均值.5分钟 仪表 {thread} N/A FALSE (无) 平均 CPU 负载超过 5 分钟。
system.cpu.load_average.1m 仪表 {thread} N/A FALSE (无) 平均 CPU 负载超过 1 分钟。
系统.CPU.负载平均值.15分钟 仪表 {thread} N/A FALSE (无) 平均 CPU 负载超过 15 分钟。
系统.中央处理器.频率 仪表 赫兹 N/A FALSE (无) CPU核心当前频率为Hz。
进程运行时间 (process.uptime) 仪表 s N/A FALSE (无) 进程运行的时间。
process.threads 总和 {线程} 累积 FALSE (无) 进程的线程数量。
process.signals_pending 总和 {信号} 累积 FALSE (无) 进程的挂起信号数(仅限 Linux)。
进程分页错误 总和 故障 累积 TRUE 类型:错误类型(值:主要、次要) 进程产生的页错误数(Linux 限制)。
process.open_file_descriptors 总和 {count} 累积 FALSE (无) 进程正在使用的文件描述符数。
进程.内存.虚拟 总和 通过 累积 FALSE (无) 虚拟内存大小。
进程内存利用率 仪表 1 N/A FALSE (无) 进程使用的总物理内存百分比。
进程.内存.使用 总和 通过 累积 FALSE (无) 正在使用的物理内存量。
system.disk.weighted_io_time 总和 s 累积 FALSE 设备:磁盘的名称(值:任何 Str) 磁盘激活后所消耗的时间乘以队列长度。
system.disk.待处理操作 (system.disk.pending_operations) 总和 {操作} 累积 FALSE 设备:磁盘的名称(值:任何 Str) 挂起的 I/O 操作的队列大小。
系统.磁盘.操作 总和 {操作} 累积 TRUE 设备:磁盘的名称(值:任何 Str)
方向:流方向(值:读取、写入)
磁盘操作计数。
系统.磁盘.操作时间 总和 s 累积 TRUE 设备:磁盘的名称(值:任何 Str)
方向:流方向(值:读取、写入)
在磁盘操作中花费的时间。
system.disk.merged 总和 {操作} 累积 TRUE 设备:磁盘的名称(值:任何 Str)
方向:流方向(值:读取、写入)
合并为单个物理操作的磁盘读/写数。
system.disk.io_time 总和 s 累积 TRUE 设备:磁盘的名称(值:任何 Str) 磁盘处于激活状态的时间。
system.disk.io 总和 通过 累积 TRUE 设备:磁盘的名称(值:任何 Str)
方向:流方向(值:读取、写入)
传输的磁盘字节数。
process.handles 总和 {count} 累积 FALSE (无) 打开的句柄数(仅限 Windows)。
process.disk.operations 总和 {操作} 累积 TRUE 方向:流方向(值:读取、写入) 进程执行的磁盘操作。
process.disk.io 总和 通过 累积 TRUE 方向:流方向(值:读取、写入) 传输的磁盘字节数。
process.cpu.utilization 仪表 1 N/A FALSE 状态:CPU 使用率细分(值:系统、用户、等待) 处理自上次抓取以来使用的总 CPU 时间百分比 (0-1)。
process.cpu.time 总和 s 累积 TRUE 状态:CPU 使用率细分(值:系统、用户、等待) 按状态细分的总 CPU 秒数。
进程上下文切换 总和 {count} 累积 TRUE 类型:上下文开关的类型(值:任何 Str) 进程被上下文切换的次数(仅限 Linux)。
系统内存利用率 仪表 1 N/A FALSE 状态:内存使用情况细分(值:缓冲、缓存、非活动、可用、slab_reclaimable、slab_unreclaimable、已用) 使用的内存字节百分比。
系统内存使用情况 总和 通过 累积 FALSE 状态:内存使用情况细分(值:缓冲、缓存、非活动、可用、slab_reclaimable、slab_unreclaimable、已用) 正在使用的内存字节数。
system.memory.页面大小 仪表 通过 N/A FALSE (无) 系统配置的页大小。
system.memory.limit 总和 通过 累积 FALSE (无) 可用内存的总字节数。
system.linux.memory.dirty (系统.Linux.内存.dirty) 总和 通过 累积 FALSE (无) 内存中的脏数据量(/proc/meminfo)。
system.linux.memory.available 总和 通过 累积 FALSE (无) 估计可用内存(仅限 Linux)。
system.network.packets 总和 {packets} 累积 TRUE 设备:网络接口名称(值:任何 Str)
方向:流方向(值:接收、传输)
传输的数据包数。
system.network.io 总和 通过 累积 TRUE (无) 传输和接收的字节数。
系统.网络.错误 总和 {errors} 累积 FALSE 设备:网络接口名称(值:任何 Str)
方向:流方向(值:接收、传输)
遇到的错误数。
system.network.dropped 总和 {packets} 累积 TRUE 设备:网络接口名称(值:任何 Str)
方向:流方向(值:接收、传输)
丢弃的数据包数。
system.network.conntrack.max 总和 {entries} 累积 FALSE (无) conntrack 表中条目数量的限制。
system.network.conntrack.count 总和 {entries} 累积 FALSE (无) conntrack 表中的条目计数。
系统.网络.连接 总和 {连接} 累积 FALSE 协议:网络协议(值:tcp)
状态:连接状态(值:任何 Str)
连接数。
系统运行时间 仪表 s N/A FALSE (无) 系统运行时间。
system.processes.created 总和 {进程} 累积 TRUE (无) 已创建的进程总数。
system.processes.count 总和 {进程} 累积 FALSE 状态:进程状态(值:blocked、daemon、detached、idle、locked、orphan、paging、running、sleeping、stopped、system、unknown、zombies) 每个状态中的进程总数。
系统分页利用率 仪表 1 N/A FALSE device:页面文件名称(值:任意字符串)
state:分页使用类型(值:缓存,空闲,已使用)
交换 (Unix) 或页面文件 (Windows) 利用率。
system.paging.usage 总和 通过 累积 FALSE device:页面文件名称(值:任意字符串)
state:分页使用类型(值:缓存,空闲,已使用)
交换 (Unix) 或页面文件 (Windows) 使用率。
system.paging.operations 总和 {操作} 累积 TRUE 方向:页面流(值:page_in,page_out)
类型:故障类型(值:主要,次要)
分页操作。
系统分页错误 总和 故障 (无) TRUE 类型:故障类型(值:主要,次要) 页面错误数。
系统文件系统利用率 (system.filesystem.utilization) 仪表 1 N/A FALSE 设备:文件系统标识符
mode:挂载模式(值:ro, rw)
mountpoint:路径
类型:文件系统类型(取值:ext4,tmpfs,等)
文件系统字节使用比例。
system.filesystem.usage 总和 通过 累积 FALSE 设备:文件系统标识符
模式:装载模式
mountpoint:路径
类型:文件系统类型
state:使用类型(值:免费,保留,已用)
使用的文件系统字节数。
system.filesystem.inodes.usage 总和 {inodes} 累积 FALSE 设备:文件系统标识符
模式:装载模式
mountpoint:路径
类型:文件系统类型
state:使用类型(值:免费,保留,已用)
使用的文件系统 inode 数。