Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
在Microsoft,我们通过采用和支持存储在 Azure Monitor Workspaces(AMW)中的 OpenTelemetry 指标,采用开放标准,并在所有 AMW 指标中使用 Prometheus 查询语言(PromQl)我们的基础指标查询语言。
在阅读本文之前,建议用户首先了解 虚拟机上的主机 OS 与来宾 OS 性能计数器之间的差异。
本文讨论来宾OS性能计数器的收集,用户需要选择加入该过程。收集可以通过配有DCR的Azure Monitor代理进行,或者通过使用DCR的VM Insights,还有一种方法是用户使用OTelCollector作为OTel仪器库的一部分来进行收集。 建议用户将所有指标存储在指标优化的 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 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。 |
资源属性
OpenTelemetry 资源语义约定 仍在开发中。 我们正在积极与 OSS 社区合作,为各种方案改进和标准化此命名约定 - 请分享你的反馈,帮助我们不断改进你的体验。
通常,通过 Azure Monitor 代理 + 数据收集规则收集并发送到 Azure Monitor 工作区的 OpenTelemetry 指标会自动添加以下云资源属性作为维度,以支持资源范围的查询:
- Microsoft.resourceid
- Microsoft.subscriptionid
- Microsoft.resourcegroupname
- Microsoft.resourcetype
- Microsoft.amwresourceid
OpenTelemetry 每个进程 指标 都有自己的一组特殊的 资源属性。 该表显示 Azure Monitor 代理自动提升为维度的资源属性。
| Name | Description | 价值观 | 已启用 |
|---|---|---|---|
| 进程命令 | 用于启动进程的命令(即命令名称)。 在基于 Linux 的系统上,可以设置为第 proc/[pid]/cmdline0 个字符串。 在 Windows 上,可以将其设置为从GetCommandLineW提取的第一个参数。 |
任何字符串 | 是 |
| process.executable.name | 可执行进程文件的名称。 在基于 Linux 的系统上,可以设置为 Name in proc/[pid]/status。 在 Windows 上,可以将其设置为GetProcessImageFileNameW的基本名称。 |
任何字符串 | 是 |
| 过程负责人 | 拥有进程的用户的用户名。 | 任何字符串 | 是 |
| process.pid | 进程标识符(PID)。 | 任何整数 | 是 |
| process.cgroup | 与进程关联的 cgroup(仅限 Linux)。 | 任何字符串 | 假 |
| 进程.命令行 | 用于以单个字符串形式表示完整命令来启动进程的完整命令。 在 Windows 上,可以设置为 GetCommandLineW 的结果。 如果必须只是为了监视而组装它,则不要对其进行设置;请改用 process.command_args 。 |
任何字符串 | 假 |
| process.executable.path | 进程可执行文件的完整路径。 在基于 Linux 的系统上,可以设置为目标 proc/[pid]/exe。 在 Windows 上,可以设置为 GetProcessImageFileNameW 的结果。 |
任何字符串 | 假 |
| process.parent_pid | 父进程标识符(PPID)。 | 任何整数 | 假 |
process.command_line属性可以包含具有数千个字符的极长字符串,使其不适合用作普通指标维度。 我们可能会根据提交为产品团队反馈的客户用户方案找到不同的方法来显示此属性。
后续步骤
使用来自各种服务的自定义指标: