Windows 虚拟机和规模集上的 Azure Monitor 代理的排查指南
Azure Monitor 代理概述
进一步阅读前,必须先了解 Azure Monitor 代理和数据收集规则。
术语
名称 | 首字母缩写词 | 说明 |
---|---|---|
Azure Monitor 代理 | AMA | 新的 Azure Monitor 代理 |
数据收集规则 | DCR | 按代理划分的数据收集的配置规则,即收集内容、接收对象等 |
Azure Monitor 配置服务 | AMCS | Azure 中托管的区域服务,用于控制此代理和 Azure Monitor 其他部分的数据收集。 代理调用此服务以获取 DCR。 |
日志终结点 | -- | 用于将数据发送到 Log Analytics 工作区的终结点 |
指标终结点 | -- | 用于将数据发送到 Azure Monitor 指标数据库的终结点。 |
实例元数据服务和混合 | IMDS 和 HIMDS | Azure 中托管的服务,分别提供有关当前运行的虚拟机、规模集(通过 IMDS)和启用了 Arc 的服务器(通过 HIMDS)的信息 |
Log Analytics 工作区 | LAW | Azure Monitor 中可将代理所收集的日志发送到的目标 |
自定义指标 | -- | Azure Monitor 中可将代理所收集的来宾指标发送到的目标 |
基本故障排除步骤(安装、代理未运行、配置问题)
按照以下步骤对 Windows 虚拟机上运行的最新版 Azure Monitor 代理进行排查:
在此处细致了解 先决条件。
验证是否已成功安装和预配扩展,如果成功则会在计算机上安装代理二进制文件:
- 打开 Azure 门户 > 选择你的虚拟机 > 从左侧窗格打开“设置: 扩展 + 应用程序”> 应显示“AzureMonitorWindowsAgent”,并显示“状态: 预配成功”
- 如果没有,请检查计算机是否可以访问 Azure 并使用以下命令查找要安装的扩展:
az vm extension image list-versions --location <machine-region> --name AzureMonitorWindowsAgent --publisher Microsoft.Azure.Monitor
- 等待 10-15 分钟,因为扩展可能处于正在转换状态。 如果仍未显示,请再次卸载并安装扩展,然后重复验证并查看扩展是否显示。
- 如果未显示,请检查计算机上位于
C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Monitor.AzureMonitorWindowsAgent
的扩展日志是否存在任何错误
验证代理是否正在运行:
- 使用以下查询检查代理是否正在将检测信号日志发送到 Log Analytics 工作区。 如果“自定义指标”是 DCR 中的唯一目标,则跳过:
Heartbeat | where Category == "Azure Monitor Agent" and 'Computer' == "<computer-name>" | take 10
- 如果不是,打开任务管理器并检查“MonAgentCore.exe”进程是否正在运行。 如果是,请等待 5 分钟才能显示检测信号。
- 如果未显示,请检查计算机上位于
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\Configuration
的内核代理日志是否存在任何错误
- 使用以下查询检查代理是否正在将检测信号日志发送到 Log Analytics 工作区。 如果“自定义指标”是 DCR 中的唯一目标,则跳过:
验证 DCR 是否存在且是否与虚拟机关联:
- 如果使用 Log Analytics 工作区作为目标,请验证 DCR 是否位于 Log Analytics 工作区所在的物理区域。
- 在虚拟机上,验证文件
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\mcs\mcsconfig.latest.xml
是否存在。 如果此文件不存在,请:- 虚拟机可能未与 DCR 相关联。 见步骤 3
- 虚拟机可能未启用托管标识。 请参阅此处,了解如何启用。
- IMDS 服务无法从虚拟机运行/访问。 检查是否可以从计算机访问 IMDS。
- AMA 无法访问 IMDS。 检查
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\Tables\MAEventTable.tsf
文件中是否有 IMDS 错误。
- 打开 Azure 门户 > 选择你的数据收集规则 > 打开左侧窗格中的“配置: 资源”> 此处应显示虚拟机
- 如果未显示,请单击“添加”并从资源选取器中选择虚拟机。 对所有 DCR 重复操作。
验证代理是否能够从 AMCS 服务下载相关的 DCR:
- 检查是否显示在此位置
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\mcs\configchunks
下载的最新 DCR
- 检查是否显示在此位置
收集性能计数器时出现问题
- 检查 DCR JSON 是否包含“performanceCounters”部分。 如果不包含,请修复 DCR。 请参阅如何创建 DCR 或示例 DCR。
- 检查文件
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\mcs\mcsconfig.lkg.xml
是否存在。 - 打开该文件并检查它是否包含
CounterSet
节点,如以下示例所示:<CounterSet storeType="Local" duration="PT1M" eventName="c9302257006473204344_16355538690556228697" sampleRateInSeconds="15" format="Factored"> <Counter>\Processor(_Total)\% Processor Time</Counter> <Counter>\Memory\Committed Bytes</Counter> <Counter>\LogicalDisk(_Total)\Free Megabytes</Counter> <Counter>\PhysicalDisk(_Total)\Avg. Disk Queue Length</Counter> </CounterSet>
使用“自定义指标”作为目标时出现问题
- 仔细查看此处的先决条件。
- 确保正确创建关联的 DCR 以收集性能计数器并发送到 Azure Monitor 指标。 DCR 中应会显示此部分:
"destinations": { "azureMonitorMetrics": { "name":"myAmMetricsDest" } }
- 运行 PowerShell 命令:
验证输出中的 CommandLine 参数是否包含参数“-TokenSource MSI”Get-WmiObject Win32_Process -Filter "name = 'MetricsExtension.Native.exe'" | select Name,ExecutablePath,CommandLine | Format-List
- 验证
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\mcs\AuthToken-MSI.json
文件是否存在。 - 验证
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\mcs\CUSTOMMETRIC_<subscription>_<region>_MonitoringAccount_Configuration.json
文件是否存在。 - 运行命令
C:\Packages\Plugins\Microsoft.Azure.Monitor.AzureMonitorWindowsAgent\<version-number>\Monitoring\Agent\table2csv.exe C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\Tables\MaMetricsExtensionEtw.tsf
以收集日志- 该命令将生成文件“MaMetricsExtensionEtw.csv”
- 打开该文件,查找所有 2 级错误并修复。
收集 Windows 事件日志时出现问题
- 检查 DCR JSON 是否包含“windowsEventLogs”部分。 如果不包含,请修复 DCR。 请参阅如何创建 DCR 或示例 DCR。
- 检查文件
C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\mcs\mcsconfig.lkg.xml
是否存在。 - 打开该文件并检查它是否包含
Subscription
节点,如以下示例所示:<Subscription eventName="c9302257006473204344_14882095577508259570" query="System!*[System[(Level = 1 or Level = 2 or Level = 3)]]"> <Column name="ProviderGuid" type="mt:wstr" defaultAssignment="00000000-0000-0000-0000-000000000000"> <Value>/Event/System/Provider/@Guid</Value> </Column> ... </Column> </Subscription>