使用 Log Analytics 代理收集 Windows 和 Linux 性能数据源

Windows 和 Linux 中的性能计数器提供对硬件组件、操作系统和应用程序性能的见解。 Azure Monitor 可以定期从 Log Analytics 代理收集性能计数器以进行准实时分析。 Azure Monitor 还可以聚合性能数据,以便进行长期分析和报告。

重要

自 2024 年 8 月 31 日起,旧版 Log Analytics 代理已弃用。 Azure 将不再为 Log Analytics 代理提供任何支持。 如果使用 Log Analytics 代理将数据引入 Azure Monitor,请立即迁移到 Azure Monitor 代理

显示性能计数器的屏幕截图。

配置性能计数器

从 Log Analytics 工作区的旧版代理程序管理菜单配置性能计数器。

首次为新的工作区配置 Windows 或 Linux 性能计数器时,可以选择快速创建几个通用的计数器。 将这些计数器在一个复选框中依次列出。 请确保已选中所有想要首先创建的计数器,并单击“添加选定的性能计数器”。

对于 Windows 性能计数器,可以为每个性能计数器选择一个特定实例。 对于 Linux 性能计数器,选择的每个计数器的实例会应用于父计数器的所有子计数器。 下表显示 Windows 和 Linux 性能计数器的可用通用实例。

实例名称 说明
_Total 所有实例的总计
* 所有实例
(/|/var) 匹配 / 或 /var 命名实例

Windows 性能计数器

显示配置 Windows 性能计数器的屏幕截图。

遵循以下步骤添加要收集的新 Windows 性能计数器。 不支持 V2 Windows 性能计数器。

  1. 选择“添加性能计数器”。

  2. 按照 object(instance)\counter 格式在文本框中输入计数器的名称。 开始键入时,会显示通用计数器的匹配列表。 可以选择列表中的计数器或者输入自己的计数器。 还可以通过指定 object\counter 返回特定计数器的所有实例。

    在从命名实例中收集 SQL Server 性能计数器时,所有命名实例计数器都以 MSSQL$ 开头,并且后接实例的名称。 例如,若要从命名 SQL 实例 INST2 的数据库性能对象收集所有数据库的“日志缓存命中率”计数器,请指定 MSSQL$INST2:Databases(*)\Log Cache Hit Ratio

  3. 添加计数器时,它使用默认的 60 秒作为其“采样率”。 如果想要降低收集的性能数据的存储要求,可以将此默认值更改为更高值,最高可达 1,800 秒(30 分钟)。

  4. 添加完计数器后,选择屏幕顶部的“应用”以保存配置。

Linux 性能计数器

显示配置 Linux 性能计数器的屏幕截图。

遵循以下步骤添加要收集的新 Linux 性能计数器。

  1. 选择“添加性能计数器”。
  2. 按照 object(instance)\counter 格式在文本框中输入计数器的名称。 开始键入时,会显示通用计数器的匹配列表。 可以选择列表中的计数器或者输入自己的计数器。
  3. 一个对象的所有计数器使用相同的“采样率”。 默认值为 60 秒。 如果想要降低收集的性能数据的存储要求,可以将此默认值更改为更高值,最高可达 1,800 秒(30 分钟)。
  4. 添加完计数器后,选择屏幕顶部的“应用”以保存配置。

在配置文件中配置 Linux 性能计数器

可以不使用 Azure 门户配置 Linux 性能计数器,而是在 Linux 代理上编辑配置文件。 要收集的性能指标由 /etc/opt/microsoft/omsagent/<workspace id>/conf/omsagent.conf 中的配置进行控制。

要收集的性能指标的每个对象或类别应在配置文件中作为单个 <source> 元素进行定义。 语法遵循下面的模式:

<source>
    type oms_omi  
    object_name "Processor"
    instance_regex ".*"
    counter_name_regex ".*"
    interval 30s
</source>

下表介绍了此元素中的参数。

parameters 说明
object_name 收集的对象名称。
instance_regex 用于定义要收集的实例的正则表达式。 值 .* 指定所有实例。 要仅收集 _Total 实例的处理器指标,可以指定 _Total。 要仅收集 crond 或 sshd 实例的进程指标,可以指定 (crond\|sshd)
counter_name_regex 用于定义要收集的对象计数器的正则表达式。 要收集对象的所有计数器,请指定 .*。 例如,要仅收集内存对象的交换空间计数器,可以指定 .+Swap.+
interval 收集对象计数器时采用的频率。

下表列出了可以在配置文件中指定的对象和计数器。 某些应用程序可以使用更多计数器。 有关详细信息,请参阅在 Azure Monitor 中收集 Linux 应用程序的性能计数器

对象名称 计数器名称
逻辑磁盘 可用 Inode 百分比
逻辑磁盘 可用空间百分比
逻辑磁盘 已用 Inode 百分比
逻辑磁盘 已用空间百分比
逻辑磁盘 磁盘读取字节数/秒
逻辑磁盘 磁盘读取数/秒
逻辑磁盘 磁盘传输数/秒
逻辑磁盘 磁盘写入字节数/秒
逻辑磁盘 磁盘写入数/秒
逻辑磁盘 可用 MB 数
逻辑磁盘 逻辑磁盘字节数/秒
内存 可用内存百分比
内存 可用交换空间百分比
内存 已用内存百分比
内存 已用交换空间百分比
内存 可用内存 MB 数
内存 可用交换空间 MB 数
内存 页面读取数/秒
内存 页面写入数/秒
内存 页面数/秒
内存 已用交换空间 MB 数
内存 已用内存 MB 数
网络 已传输的字节数总计
网络 已接收的字节数总计
网络 字节数总计
网络 已传输的包数总计
网络 已接收的包数总计
网络 Rx 错误数总计
网络 Tx 错误数总计
网络 冲突数总计
物理磁盘 平均值磁盘秒数/读取
物理磁盘 平均值磁盘秒数/传输
物理磁盘 平均值磁盘秒数/写入
物理磁盘 物理磁盘字节数/秒
过程 特权时间百分比
过程 用户时间百分比
过程 已用内存 KB 数
过程 虚拟共享内存
处理器 DPC 时间百分比
处理器 空闲时间百分比
处理器 中断时间百分比
处理器 IO 等待时间百分比
处理器 良好时间百分比
处理器 特权时间百分比
处理器 处理器时间百分比
处理器 用户时间百分比
系统 可用物理内存
系统 分页文件中的可用空间
系统 可用虚拟内存
系统 进程
系统 分页文件中存储的大小
系统 运行时间
系统 用户

下面的配置是性能指标的默认配置:

<source>
    type oms_omi
	object_name "Physical Disk"
	instance_regex ".*"
	counter_name_regex ".*"
	interval 5m
</source>

<source>
	type oms_omi
	object_name "Logical Disk"
	instance_regex ".*"
	counter_name_regex ".*"
	interval 5m
</source>

<source>
    type oms_omi
	object_name "Processor"
	instance_regex ".*"
	counter_name_regex ".*"
	interval 30s
</source>

<source>
	type oms_omi
	object_name "Memory"
	instance_regex ".*"
	counter_name_regex ".*"
	interval 30s
</source>

数据收集

Azure Monitor 以指定的采样间隔在已安装相应计数器的所有代理上收集所有指定的性能计数器。 未聚合数据。 可在 Log Analytics 工作区指定的持续时间内,在所有日志查询视图中获取原始数据。

性能记录属性

性能记录具有 Perf 类型,并且具有下表中列出的属性。

属性 说明
Computer 从中收集事件的计算机。
CounterName 性能计数器的名称。
CounterPath 计数器的完整路径 \\<Computer>\object(instance)\counter。
CounterValue 计数器的数值。
InstanceName 事件实例的名称。 无实例时为空。
ObjectName 性能对象的名称。
SourceSystem 从中收集数据的代理类型:

OpsManager - Windows 代理,直接连接或通过 SCOM 连接
Linux - 所有 Linux 代理
AzureStorage - Azure 诊断
TimeGenerated 对数据进行采样的日期和时间。

大小估计值

以 10 秒间隔收集特定计数器的粗略估计值约为每个实例每天 1 MB。 可以使用以下公式估计特定计数器的存储要求:

1 MB x(计数器数)x(代理数)x(实例数)

使用性能记录的日志查询

下表提供了检索性能记录的不同日志查询的示例。

查询 说明
性能 所有性能数据
Perf | where Computer == "MyComputer" 特定计算机中的所有性能数据
Perf | where CounterName == "Current Disk Queue Length" 特定计数器的所有性能数据
Perf | where ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AVGCPU = avg(CounterValue) by Computer 所有计算机的平均 CPU 使用率
Perf | where CounterName == "% Processor Time" | summarize AggregatedValue = max(CounterValue) by Computer 所有计算机的最大 CPU 使用率
Perf | where ObjectName == "LogicalDisk" and CounterName == "Current Disk Queue Length" and Computer == "MyComputerName" | summarize AggregatedValue = avg(CounterValue) by InstanceName 指定计算机的所有实例上的当前磁盘队列平均长度
Perf | where CounterName == "Disk Transfers/sec" | summarize AggregatedValue = percentile(CounterValue, 95) by Computer 所有计算机上每秒磁盘传输的第 95 百分位数
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" | summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 1h), Computer 每小时所有计算机 CPU 使用率的平均值
Perf | where Computer == "MyComputer" and CounterName startswith_cs "%" and InstanceName == "_Total" | summarize AggregatedValue = percentile(CounterValue, 70) by bin(TimeGenerated, 1h), CounterName 特定计算机上每个百分比计数器的每小时第 70 百分位数
Perf | where CounterName == "% Processor Time" and InstanceName == "_Total" and Computer == "MyComputer" | summarize ["min(CounterValue)"] = min(CounterValue), ["avg(CounterValue)"] = avg(CounterValue), ["percentile75(CounterValue)"] = percentile(CounterValue, 75), ["max(CounterValue)"] = max(CounterValue) by bin(TimeGenerated, 1h), Computer 每小时特定计算机的 CPU 使用率的平均值、最小值、最大值和第 75 百分位数
Perf | where ObjectName == "MSSQL$INST2:Databases" and InstanceName == "master" 来自命名 SQL Server 实例 INST2 中 master 数据库的数据库性能对象的所有性能数据

后续步骤