Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
在Microsoft,我们通过采用和支持存储在 Azure Monitor Workspaces(AMW)中的 OpenTelemetry 指标,采用开放标准,并在所有 AMW 指标中使用 Prometheus 查询语言(PromQl)我们的基础指标查询语言。
在阅读本文之前,建议用户首先了解 虚拟机上的主机 OS 与来宾 OS 性能计数器之间的差异。
本文讨论来宾OS性能计数器的收集,用户需要选择加入该过程。收集可以通过配有DCR的Azure Monitor代理进行,或者通过使用DCR的VM Insights,还有一种方法是用户使用OTelCollector作为OTel仪器库的一部分来进行收集。 建议用户将所有指标存储在指标优化的 Azure Monitor 工作区中,这些指标比 Log Analytics 工作区中的查询更便宜、更快。
本文为用户提供以下信息:
- 性能计数器概述[#performance 计数器]
- 使用 OpenTelemetry 系统指标的好处[#benefits-of-opentelemetry]
- 将 Azure Monitor 工作区用于指标的好处[#benefits-of-azure-monitor-workspace]
- OpenTelemetry 命名约定与传统性能计数器的比较[#performance-counter-names]
- 资源属性[#resource-attributes]
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 OS 映像的查询,更轻松地管理其机群中的虚拟机/节点。 使用相同 PromQl 查询的相同配置即代码(ARM/Bicep 模板、Terraform 等)可用于采用 OpenTelemetry 系统指标的任何托管资源。
更多性能计数器 OpenTelemetry Collector 主机指标接收器收集的性能计数器比 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/用量_system
- Cpu/usage_idle
- Cpu/使用_活跃
- Cpu/使用_良好 (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 Guest OS 性能计数器的应用程序团队的大型企业,可以为相同的 OTel 指标使用相同的 PromQl 查询、仪表板和警报。
性能计数器名称
适用于 Windows 和 Linux 虚拟机的 Azure Monitor 代理收集以下性能计数器。 默认采样频率为 60 秒,但在创建或更新数据收集规则时,可以更改此频率。
| OTel 性能计数器 | 类型 | 单位 | 集合体 | 单调 | 尺寸 | Description |
|---|---|---|---|---|---|---|
| 系统.cpu.利用率 | 仪表 | 1 | N/A | 假 |
cpu:从 0 开始的逻辑 CPU 编号(值:任何 Str) 状态:按类型细分 CPU 使用率(值:idle、interrupt、nice、softirq、steal、system、user、wait) |
每个逻辑 CPU 的 system.cpu.time 自上次测量以来的变化,用经过的时间除以(0-1)。 |
| system.cpu.time | 总和 | s | 累积 | 正确 |
cpu:从 0 开始的逻辑 CPU 编号(值:任何 Str) 状态:按类型细分 CPU 使用率(值:idle、interrupt、nice、softirq、steal、system、user、wait) |
每个模式上花费的每个逻辑 CPU 的总秒数。 |
| 系统 (system).CPU.物理 (physical).总数 (count) | 总和 | {中央处理器} | 累积 | 假 | (无) | 可用物理 CPU 数。 |
| 系统.处理器.逻辑.数量 | 总和 | {中央处理器} | 累积 | 假 | cpu:从 0 开始的逻辑 CPU 编号(值:任何 Str) | 可用逻辑 CPU 数。 |
| 系统CPU负载平均值.5分钟 | 仪表 | {thread} | N/A | 假 | (无) | 平均 CPU 负载超过 5 分钟。 |
| 系统.cpu.负载平均.1m | 仪表 | {thread} | N/A | 假 | (无) | 平均 CPU 负载超过 1 分钟。 |
| 系统.CPU.负载平均值.15分钟 | 仪表 | {thread} | N/A | 假 | (无) | 平均 CPU 负载超过 15 分钟。 |
| 系统.中央处理器.频率 | 仪表 | 赫兹 | N/A | 假 | (无) | CPU核心当前频率为Hz。 |
| 进程运行时间 (process.uptime) | 仪表 | s | N/A | 假 | (无) | 进程运行的时间。 |
| process.threads | 总和 | {线程} | 累积 | 假 | (无) | 进程的线程数量。 |
| process.signals_pending | 总和 | {信号} | 累积 | 假 | (无) | 进程的挂起信号数(仅限 Linux)。 |
| 进程分页错误 | 总和 | 故障 | 累积 | 正确 | 类型:错误类型(值:主要、次要) | 进程产生的页错误数(Linux 限制)。 |
| 进程.open_file_descriptors | 总和 | {count} | 累积 | 假 | (无) | 进程正在使用的文件描述符数。 |
| 进程.内存.虚拟 | 总和 | 由 | 累积 | 假 | (无) | 虚拟内存大小。 |
| 进程内存利用率 | 仪表 | 1 | N/A | 假 | (无) | 进程使用的总物理内存百分比。 |
| 进程.内存.使用 | 总和 | 由 | 累积 | 假 | (无) | 正在使用的物理内存量。 |
| system.disk.weighted_io_time | 总和 | s | 累积 | 假 | 设备:磁盘的名称(值:任何 Str) | 磁盘激活后所消耗的时间乘以队列长度。 |
| system.disk.待处理操作 (system.disk.pending_operations) | 总和 | {操作} | 累积 | 假 | 设备:磁盘的名称(值:任何 Str) | 挂起的I/O操作的队列大小。 |
| 系统.磁盘.操作 | 总和 | {操作} | 累积 | 正确 |
设备:磁盘的名称(值:任何 Str) 方向:流方向(值:读取、写入) |
磁盘操作计数。 |
| 系统.磁盘.操作时间 | 总和 | s | 累积 | 正确 |
设备:磁盘的名称(值:任何 Str) 方向:流方向(值:读取、写入) |
在磁盘操作中花费的时间。 |
| system.disk.merged | 总和 | {操作} | 累积 | 正确 |
设备:磁盘的名称(值:任何 Str) 方向:流方向(值:读取、写入) |
被合并为单个物理操作的磁盘读/写。 |
| system.disk.io_time | 总和 | s | 累积 | 正确 | 设备:磁盘的名称(值:任何 Str) | 磁盘处于激活状态的时间。 |
| system.disk.io | 总和 | 由 | 累积 | 正确 |
设备:磁盘的名称(值:任何 Str) 方向:流方向(值:读取、写入) |
传输的磁盘字节数。 |
| process.handles | 总和 | {count} | 累积 | 假 | (无) | 打开的句柄数量(仅限 Windows)。 |
| 进程.磁盘.操作 | 总和 | {操作} | 累积 | 正确 | 方向:流方向(值:读取、写入) | 进程执行的磁盘操作。 |
| process.disk.io | 总和 | 由 | 累积 | 正确 | 方向:流方向(值:读取、写入) | 传输的磁盘字节数。 |
| 进程.cpu.利用率 | 仪表 | 1 | N/A | 假 | 状态:CPU 使用率细分(值:系统、用户、等待) | 自上次采集以来,进程使用的总 CPU 使用时间的百分比(0-1)。 |
| 进程.中央处理器.时间 | 总和 | s | 累积 | 正确 | 状态:CPU 使用率细分(值:系统、用户、等待) | 按状态细分的总 CPU 秒数。 |
| 进程上下文切换 | 总和 | {count} | 累积 | 正确 | 类型:上下文开关的类型(值:任何 Str) | 进程被上下文切换的次数(仅限 Linux)。 |
| 系统内存利用率 | 仪表 | 1 | N/A | 假 | 状态:内存使用情况细分(值:缓冲、缓存、非活动、可用、slab_reclaimable、slab_unreclaimable、已用) | 使用的内存字节百分比。 |
| 系统内存使用情况 | 总和 | 由 | 累积 | 假 | 状态:内存使用情况细分(值:缓冲、缓存、非活动、可用、slab_reclaimable、slab_unreclaimable、已用) | 正在使用的内存字节数。 |
| system.memory.页面大小 | 仪表 | 由 | N/A | 假 | (无) | 系统配置的页大小。 |
| system.memory.limit | 总和 | 由 | 累积 | 假 | (无) | 可用内存的总字节数。 |
| system.linux.memory.dirty (系统.Linux.内存.dirty) | 总和 | 由 | 累积 | 假 | (无) | 内存中的脏数据量(/proc/meminfo)。 |
| system.linux.memory.available | 总和 | 由 | 累积 | 假 | (无) | 估计可用内存(仅限 Linux)。 |
| system.network.packets | 总和 | {packets} | 累积 | 正确 |
设备:网络接口名称(值:任何 Str) 方向:流方向(值:接收、传输) |
传输的数据包数。 |
| system.network.io | 总和 | 由 | 累积 | 正确 | (无) | 传输和接收的字节数。 |
| 系统.网络.错误 | 总和 | {errors} | 累积 | 假 |
设备:网络接口名称(值:任何 Str) 方向:流方向(值:接收、传输) |
遇到的错误数。 |
| system.network.dropped | 总和 | {packets} | 累积 | 正确 |
设备:网络接口名称(值:任何 Str) 方向:流方向(值:接收、传输) |
丢弃的数据包数。 |
| system.network.conntrack.max | 总和 | {entries} | 累积 | 假 | (无) | conntrack 表中条目数量的限制。 |
| system.network.conntrack.count | 总和 | {entries} | 累积 | 假 | (无) | conntrack 表中的条目计数。 |
| 系统.网络.连接 | 总和 | {连接} | 累积 | 假 |
协议:网络协议(值:tcp) 状态:连接状态(值:任何 Str) |
连接数。 |
| 系统运行时间 | 仪表 | s | N/A | 假 | (无) | 系统运行时间。 |
| system.processes.created | 总和 | {进程} | 累积 | 正确 | (无) | 已创建的进程总数。 |
| system.processes.count | 总和 | {进程} | 累积 | 假 | 状态:进程状态(值:已阻止、守护程序、分离、空闲、锁定、孤立、分页、正在运行、睡眠、停止、系统、未知、僵尸) | 每个状态中的进程总数。 |
| 系统分页利用率 | 仪表 | 1 | N/A | 假 |
device:页面文件名称(值:任意字符串) state:分页使用类型(值:缓存,空闲,已使用) |
交换 (Unix) 或页面文件 (Windows) 利用率。 |
| 系统.分页.使用情况 | 总和 | 由 | 累积 | 假 |
device:页面文件名称(值:任意字符串) state:分页使用类型(值:缓存,空闲,已使用) |
交换(Unix)或页面文件(Windows)使用情况。 |
| 系统.分页.操作 | 总和 | {操作} | 累积 | 正确 |
方向:页面流(值:page_in,page_out) 类型:故障类型(值:主要,次要) |
分页操作。 |
| 系统分页错误 | 总和 | 故障 | (无) | 正确 | 类型:故障类型(值:主要,次要) | 页错误数。 |
| 系统文件系统利用率 (system.filesystem.utilization) | 仪表 | 1 | N/A | 假 |
设备:文件系统标识符 mode:挂载模式(值:ro, rw) mountpoint:路径 类型:文件系统类型(取值:ext4,tmpfs,等) |
文件系统字节使用比例。 |
| system.filesystem.usage | 总和 | 由 | 累积 | 假 |
设备:文件系统标识符 模式:装载模式 mountpoint:路径 类型:文件系统类型 state:使用类型(值:免费,保留,已用) |
使用的文件系统字节数。 |
| system.filesystem.inodes.usage | 总和 | {inodes} | 累积 | 假 |
设备:文件系统标识符 模式:装载模式 mountpoint:路径 类型:文件系统类型 state:使用类型(值:免费,保留,已用) |
使用的文件系统 inode。 |