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

使用客户端安装程序在 Windows 客户端设备上安装 Azure Monitor 代理

使用客户端安装程序在 Windows 客户端设备上安装 Azure Monitor 代理,并将监视数据发送到 Log Analytics 工作区。 Azure Monitor 代理扩展 和安装程序会安装相同的基础代理,并使用数据收集规则配置数据收集。 本文介绍如何使用客户端安装程序在 Windows 客户端设备上安装 Azure Monitor 代理,以及如何将数据收集规则关联到 Windows 客户端设备。

注意

本文提供了在 Windows 客户端设备上安装 Azure Monitor 代理的具体指导,但存在限制。 有关代理的标准安装和管理指导,请参阅此处的代理扩展管理指导

与虚拟机扩展的比较

下面是 Azure Monitor 代理的客户端安装程序和 VM 扩展之间的比较:

功能组件 对于通过扩展实现的 VM/服务器 对于通过安装程序实现的客户端
代理安装方法 通过 VM 扩展 通过客户端安装程序
已安装代理 Azure Monitor 代理 相同
身份验证 使用托管标识 使用 Microsoft Entra 设备令牌
中央配置 通过数据收集规则 相同
将配置规则关联到代理 DCR 直接关联到单个 VM 资源 DCR 关联到受监视的对象 (MO),该对象映射到 Microsoft Entra 租户中的所有设备
数据上传到 Log Analytics 通过 Log Analytics 终结点 相同
功能支持 所有功能都记录在此处 依赖于 AMA 代理扩展的功能(不需要其他扩展)。 包括对 Sentinel Windows 事件筛选的支持
网络选项 代理支持、专用链接支持 仅限代理支持

支持的设备类型

设备类型 是否支持? 安装方法 其他信息
Windows 10、11 台式机和工作站 客户端安装程序 使用 Windows MSI 安装程序安装代理
Windows 10、11 笔记本电脑 客户端安装程序 使用 Windows MSI 安装程序安装代理。 这些安装适用于笔记本电脑,但代理尚未针对电池、网络消耗进行优化
虚拟机、规模集 虚拟机扩展 使用 Azure 扩展框架安装代理
本地服务器 虚拟机扩展(使用 Azure Arc 代理) 使用 Azure 扩展框架(通过安装 Arc 代理为本地提供)安装代理

先决条件

  1. 计算机必须运行 Windows 客户端 OS 版本 10 RS4 或更高版本。
  2. 若要下载安装程序,计算机应安装有 C++ 可再发行程序包版本 2015 或更高版本
  3. 计算机必须已与 Microsoft Entra 租户联接(已建立 AAD 联接或已建立混合 AAD 联接的计算机),这样代理就可以提取用于身份验证的 Microsoft Entra 设备令牌,并可以从 Azure 提取数据收集规则。
  4. 你可能需要对该 Microsoft Entra 租户拥有租户管理员权限。
  5. 设备必须具有以下 HTTPS 终结点的访问权限:
    • global.handler.control.monitor.azure.com
    • <virtual-machine-region-name>.handler.control.monitor.azure.com(例如:westus.handler.control.azure.com)
    • <log-analytics-workspace-id>.ods.opinsights.azure.com(示例:12345a01-b1cd-1234-e1f2-1234567g8h99.ods.opinsights.azure.com)(如果在代理上使用专用链接,还必须添加数据收集终结点
  6. 要与设备关联的数据收集规则。 如果尚不存在,请创建一条数据收集规则。 请勿将规则关联到任何资源。
  7. 在使用任何 PowerShell cmdlet 之前,请确保已安装并导入与 cmdlet 相关的 PowerShell 模块。

限制

  • 为 Windows 客户端计算机创建的数据收集规则只能针对整个 Microsoft Entra 租户范围。 也就是说,与受监视对象关联的数据收集规则适用于所有在租户中使用此客户端安装程序安装 Azure Monitor 代理的 Windows 客户端计算机。 Windows 客户端设备尚不支持使用数据收集规则进行精细定位
  • Azure Monitor 代理不支持监视通过 Azure 专用链接连接的 Windows 计算机。
  • 使用 Windows 客户端安装程序安装的代理主要用于始终连接的 Windows 桌面或工作站。 尽管可以使用安装程序在笔记本电脑上安装 Azure Monitor 代理,但该代理并未针对笔记本电脑上的电池消耗和网络限制进行优化。

安装代理

  1. 使用此链接下载代理的 Windows MSI 安装程序。 还可以从 Azure 门户上的“监视”>“数据收集规则”>“创建”体验下载它(例如以下屏幕截图所示):

    Diagram shows download agent link on Azure portal.

  2. 打开提升的管理员命令提示符窗口,并更改下载了安装程序的位置的目录。

  3. 若要使用默认设置进行安装,请运行以下命令:

    msiexec /i AzureMonitorAgentClientSetup.msi /qn
    
  4. 若要使用自定义文件路径、网络代理设置或在非公有云上进行安装,请将以下命令与下表中的值结合使用:

    msiexec /i AzureMonitorAgentClientSetup.msi /qn DATASTOREDIR="C:\example\folder"
    
    参数 说明
    INSTALLDIR 安装代理二进制文件的目录路径
    DATASTOREDIR 代理存储其操作日志和数据的目录路径
    PROXYUSE 必须设置为“true”才能使用代理
    PROXYADDRESS 设置为代理地址。 PROXYUSE 必须设置为“true”才能正确应用
    PROXYUSEAUTH 当代理需要身份验证时设置为“true”
    PROXYUSERNAME 设置为代理用户名。 PROXYUSE 和 PROXYUSEAUTH 必须设置为“true”
    PROXYPASSWORD 设置为代理密码。 PROXYUSE 和 PROXYUSEAUTH 必须设置为“true”
    CLOUDENV 设置为“云”。 “Azure 商业”、“Azure 中国”、“Azure US Gov”、“Azure USNat”或“Azure USSec”
  5. 验证是否成功安装:

    • 打开“控制面板”->“程序和功能”或“设置”->“应用”->“应用和功能”,确保已列出“Azure Monitor 代理”
    • 打开“服务”,确认“Azure Monitor 代理”已列出并显示为“正在运行”。
  6. 继续创建要将数据收集规则关联到的受监视对象,以使代理可以实际开始操作。

注意

目前,使用客户端安装程序安装的代理不支持在安装后更新本地代理设置。 要更新上面的设置,请卸载并重新安装 AMA。

创建并关联监视对象

需要创建一个监视对象 (MO),该对象表示 Azure 资源管理器 (ARM) 中的 Microsoft Entra 租户。 此 ARM 实体是数据收集规则随后将要关联到的实体。 Azure 将监视对象关联到同一 Microsoft Entra 租户中的所有 Windows 客户端计算机。

目前,此关联仅限于 Microsoft Entra 租户范围,这意味着应用于 Microsoft Entra 租户的配置将应用于属于该租户并运行代理(它通过客户端安装程序进行安装)的所有设备。 作为虚拟机扩展安装的代理不受此影响。 下图演示了其工作原理:

图表显示了监视对象的用途和关联。

然后,按照以下说明操作,使用 REST API 或 PowerShell 命令创建并将其关联到监视对象。

所需的权限

由于 MO 是租户级资源,因此权限的范围将高于订阅范围。 因此,可能需要成为 Azure 租户管理员才能执行此步骤。 按照以下步骤将 Microsoft Entra 租户管理员提升为 Azure 租户管理员。它将在根范围内向 Microsoft Entra 管理员授予“所有者”权限。 对于下一部分所述的所有方法,都需要这样做。

使用 REST API

1. 将“监视对象参与者”角色分配给操作员

此步骤授予用户或组创建和链接受监视对象的能力。

请求 URI

PUT https://management.azure.com/providers/microsoft.insights/providers/microsoft.authorization/roleassignments/{roleAssignmentGUID}?api-version=2021-04-01-preview

URI 参数

名称 类型 描述
roleAssignmentGUID path string 提供任何有效的 guid(可以使用 https://guidgenerator.com/ 生成一个)

标头

  • Authorization:ARM 持有者令牌(使用“Get-AzAccessToken”或其他方法)
  • Content-Type:Application/json

请求正文

{
    "properties":
    {
        "roleDefinitionId":"/providers/Microsoft.Authorization/roleDefinitions/56be40e24db14ccf93c37e44c597135b",
        "principalId":"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
    }
}

正文参数

名称 说明
roleDefinitionId 已修复值:监视对象参与者角色的角色定义 ID:/providers/Microsoft.Authorization/roleDefinitions/56be40e24db14ccf93c37e44c597135b
principalId 提供角色需要分配到的用户标识的 Object Id。 这可能是在步骤 1 开始时提升的用户,也可能是将要执行后续步骤的另一个用户或组。

完成此步骤后,对会话重新进行身份验证重新获取 ARM 持有者令牌。

2.创建监视对象

此步骤为 Microsoft Entra 租户范围创建监视对象。 它将用于表示使用该 Microsoft Entra 租户标识签名的客户端设备。

需要的权限:在相应范围内拥有“受监视对象参与者”的任何人都可以执行此操作,如步骤 1 中分配的那样。

请求 URI

PUT https://management.azure.com/providers/Microsoft.Insights/monitoredObjects/{AADTenantId}?api-version=2021-09-01-preview

URI 参数

名称 类型 描述
AADTenantId path string 设备所属 Microsoft Entra 租户的 ID。 MO 是使用同一 ID 创建的

标头

  • Authorization:ARM 持有者令牌
  • Content-Type:Application/json

请求正文

{
    "properties":
    {
        "location":"eastus"
    }
}

正文参数

名称 说明
location 存储 MO 对象的 Azure 区域。 它应是你创建数据收集规则的同一区域。 此区域是发生代理通信的位置。

3.将 DCR 关联到监视对象

现在,我们通过创建数据收集规则关联将数据收集规则 (DCR) 关联到监视对象。

需要的权限:在相应范围内拥有“受监视对象参与者”的任何人都可以执行此操作,如步骤 1 中分配的那样。

请求 URI

PUT https://management.azure.com/{MOResourceId}/providers/microsoft.insights/datacollectionruleassociations/{associationName}?api-version=2021-09-01-preview

示例请求 URI

PUT https://management.azure.com/providers/Microsoft.Insights/monitoredObjects/{AADTenantId}/providers/microsoft.insights/datacollectionruleassociations/{associationName}?api-version=2021-09-01-preview

URI 参数

名称 类型 说明
``MOResourceId` path string 步骤 2 中创建的 MO 的完整资源 ID。 示例:“providers/Microsoft.Insights/monitoredObjects/{AADTenantId}”

标头

  • Authorization:ARM 持有者令牌
  • Content-Type:Application/json

请求正文

{
    "properties":
    {
        "dataCollectionRuleId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/dataCollectionRules/{DCRName}"
    }
}

正文参数

名称 说明
dataCollectionRuleID 在监视对象同一区域中创建的现有数据收集规则的资源 ID。

4.列出与监视对象的关联

如果需要查看关联,则可以列出监视对象的关联。

需要的权限:在相应范围内拥有“读者”的任何人都可以执行此操作,类似于步骤 1 中分配的操作。

请求 URI

GET https://management.azure.com/{MOResourceId}/providers/microsoft.insights/datacollectionruleassociations/?api-version=2021-09-01-preview

示例请求 URI

GET https://management.azure.com/providers/Microsoft.Insights/monitoredObjects/{AADTenantId}/providers/microsoft.insights/datacollectionruleassociations/?api-version=2021-09-01-preview
{
  "value": [
    {
      "id": "/subscriptions/703362b3-f278-4e4b-9179-c76eaf41ffc2/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVm/providers/Microsoft.Insights/dataCollectionRuleAssociations/myRuleAssociation",
      "name": "myRuleAssociation",
      "type": "Microsoft.Insights/dataCollectionRuleAssociations",
      "properties": {
        "dataCollectionRuleId": "/subscriptions/703362b3-f278-4e4b-9179-c76eaf41ffc2/resourceGroups/myResourceGroup/providers/Microsoft.Insights/dataCollectionRules/myCollectionRule",
        "provisioningState": "Succeeded"
      },
      "systemData": {
        "createdBy": "user1",
        "createdByType": "User",
        "createdAt": "2021-04-01T12:34:56.1234567Z",
        "lastModifiedBy": "user2",
        "lastModifiedByType": "User",
        "lastModifiedAt": "2021-04-02T12:34:56.1234567Z"
      },
      "etag": "070057da-0000-0000-0000-5ba70d6c0000"
    }
  ],
  "nextLink": null
}

5.取消 DCR 与监视对象的关联

如果需要删除数据收集规则 (DCR) 与监视对象的关联。

需要的权限:在相应范围内拥有“受监视对象参与者”的任何人都可以执行此操作,如步骤 1 中分配的那样。

请求 URI

DELETE https://management.azure.com/{MOResourceId}/providers/microsoft.insights/datacollectionruleassociations/{associationName}?api-version=2021-09-01-preview

示例请求 URI

DELETE https://management.azure.com/providers/Microsoft.Insights/monitoredObjects/{AADTenantId}/providers/microsoft.insights/datacollectionruleassociations/{associationName}?api-version=2021-09-01-preview

URI 参数

名称 类型 描述
MOResourceId path string 步骤 2 中创建的 MO 的完整资源 ID。 示例:“providers/Microsoft.Insights/monitoredObjects/{AADTenantId}”
associationName path string 关联的名称。 此名称不区分大小写。 示例:“assoc01”

标头

  • Authorization:ARM 持有者令牌
  • Content-Type:Application/json

使用 PowerShell 进行加入

$TenantID = "xxxxxxxxx-xxxx-xxx"  #Your Tenant ID
$SubscriptionID = "xxxxxx-xxxx-xxxxx" #Your Subscription ID
$ResourceGroup = "rg-yourResourceGroup" #Your resourcegroup

#If cmdlet below produces an error stating 'Interactive authentication is not supported in this session, please run cmdlet 'Connect-AzAccount -UseDeviceAuthentication
#uncomment next to -UseDeviceAuthentication below
Connect-AzAccount -Tenant $TenantID #-UseDeviceAuthentication

#Select the subscription
Select-AzSubscription -SubscriptionId $SubscriptionID

#Grant Access to User at root scope "/"
$user = Get-AzADUser -SignedIn

New-AzRoleAssignment -Scope '/' -RoleDefinitionName 'Owner' -ObjectId $user.Id

#Create Auth Token
$auth = Get-AzAccessToken

$AuthenticationHeader = @{
    "Content-Type" = "application/json"
    "Authorization" = "Bearer " + $auth.Token
    }


#1. Assign the Monitored Object Contributor role to the operator
$newguid = (New-Guid).Guid
$UserObjectID = $user.Id

$body = @"
{
            "properties": {
                "roleDefinitionId":"/providers/Microsoft.Authorization/roleDefinitions/56be40e24db14ccf93c37e44c597135b",
                "principalId": `"$UserObjectID`"
        }
}
"@

$requestURL = "https://management.azure.com/providers/microsoft.insights/providers/microsoft.authorization/roleassignments/$newguid`?api-version=2021-04-01-preview"


Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method PUT -Body $body


##########################

#2. Create a monitored object

# "location" property value under the "body" section should be the Azure region where the MO object would be stored. It should be the "same region" where you created the Data Collection Rule. This is the location of the region from where agent communications would happen.
$Location = "eastus" #Use your own location
$requestURL = "https://management.azure.com/providers/Microsoft.Insights/monitoredObjects/$TenantID`?api-version=2021-09-01-preview"
$body = @"
{
    "properties":{
        "location":`"$Location`"
    }
}
"@

$Respond = Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method PUT -Body $body -Verbose
$RespondID = $Respond.id

##########################

#3. Associate DCR to monitored object
#See reference documentation https://learn.microsoft.com/en-us/rest/api/monitor/data-collection-rule-associations/create?tabs=HTTP
$associationName = "assoc01" #You can define your custom associationname, must change the association name to a unique name, if you want to associate multiple DCR to monitored object
$DCRName = "dcr-WindowsClientOS" #Your Data collection rule name

$requestURL = "https://management.azure.com$RespondId/providers/microsoft.insights/datacollectionruleassociations/$associationName`?api-version=2021-09-01-preview"
$body = @"
        {
            "properties": {
                "dataCollectionRuleId": "/subscriptions/$SubscriptionID/resourceGroups/$ResourceGroup/providers/Microsoft.Insights/dataCollectionRules/$DCRName"
            }
        }

"@

Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method PUT -Body $body

#(Optional example). Associate another DCR to monitored object. Remove comments around text below to use.
#See reference documentation https://learn.microsoft.com/en-us/rest/api/monitor/data-collection-rule-associations/create?tabs=HTTP
<#
$associationName = "assoc02" #You must change the association name to a unique name, if you want to associate multiple DCR to monitored object
$DCRName = "dcr-PAW-WindowsClientOS" #Your Data collection rule name

$requestURL = "https://management.azure.com$RespondId/providers/microsoft.insights/datacollectionruleassociations/$associationName`?api-version=2021-09-01-preview"
$body = @"
        {
            "properties": {
                "dataCollectionRuleId": "/subscriptions/$SubscriptionID/resourceGroups/$ResourceGroup/providers/Microsoft.Insights/dataCollectionRules/$DCRName"
            }
        }

"@

Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method PUT -Body $body

#4. (Optional) Get all the associatation.
$requestURL = "https://management.azure.com$RespondId/providers/microsoft.insights/datacollectionruleassociations?api-version=2021-09-01-preview"
(Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method get).value
#>

验证安装是否成功

检查已在数据收集规则中指定为目标的 Log Analytics 工作区中的“检测信号”表(以及已在规则中配置的其他表)。 SourceComputerIdComputerComputerIP 列均应分别反映客户端设备信息,Category 列应显示“Azure Monitor Agent”。 请参阅以下示例:

图表显示了 Azure 门户上的代理程序检测信号日志。

使用 PowerShell 进行登出

#This will remove the monitor object
$TenantID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  #Your Tenant ID

Connect-AzAccount -Tenant $TenantID

#Create Auth Token
$auth = Get-AzAccessToken

$AuthenticationHeader = @{
    "Content-Type" = "application/json"
    "Authorization" = "Bearer " + $auth.Token
}

#Get monitored object
$requestURL = "https://management.azure.com/providers/Microsoft.Insights/monitoredObjects/$TenantID`?api-version=2021-09-01-preview"
$MonitoredObject =  Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method Get

#Get data collection rule associations to monitored object 
$requestURL = "https://management.azure.com$($MonitoredObject.id)/providers/microsoft.insights/datacollectionruleassociations?api-version=2021-09-01-preview"
$MonitoredObjectAssociations = Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method Get

#Disassociate from all Data Collection Rule
foreach ($Association in $MonitoredObjectAssociations.value){
    $requestURL = "https://management.azure.com$($Association.id)?api-version=2022-06-01"
    Invoke-RestMethod -Uri $requestURL -Headers $AuthenticationHeader -Method Delete
}

#Delete monitored object
$requestURL = "https://management.azure.com/providers/Microsoft.Insights/monitoredObjects/$TenantID`?api-version=2021-09-01-preview"
Invoke-AzRestMethod -Uri $requestURL -Method Delete

管理代理

检查代理版本

可以使用以下任一选项来检查已安装的代理版本:

  • 打开“控制面板”>“程序和功能”>“Azure Monitor 代理”,并查看列出的“版本”
  • 打开“设置”>“应用”>“应用和功能”>“Azure Monitor 代理”,并查看列出的“版本”

卸载代理

可以使用以下任一选项来检查已安装的代理版本:

  • 打开“控制面板”>“程序和功能”>“Azure Monitor 代理”,并单击“卸载”
  • 打开“设置”>“应用”>“应用和功能”>“Azure Monitor 代理”,并单击“卸载”

如果在“卸载”期间遇到问题,请参阅故障排除指南

更新代理

若要更新版本,请安装要更新到的新版本。

疑难解答

查看代理诊断日志

  1. 在启用日志记录的情况下重新运行安装,并指定日志文件名称:Msiexec /I AzureMonitorAgentClientSetup.msi /L*V <log file name>
  2. 运行时日志会自动收集到默认位置 C:\Resources\Azure Monitor Agent\ 或在安装过程中提到的文件路径。
    • 如果你找不到该路径,可以在注册表上找到确切的位置(作为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AzureMonitorAgent 上的 AMADataRootDirPath)。
  3. “ServiceLogs”文件夹包含 AMA Windows 服务的日志,该服务启动和管理 AMA 进程
  4. “AzureMonitorAgent.MonitoringDataStore”包含 AMA 进程的数据/日志。

常见安装问题

缺少 DLL

  • 错误消息:“此 Windows Installer 包存在问题。 无法运行完成此安装程序所需的 DLL。 …"
  • 在安装 AMA 之前,请确保已安装 C++ 可再发行程序包 (>2015)

未建立 Microsoft Entra 联接

错误消息:“租户和设备 ID 检索失败”

  1. 运行命令 dsregcmd /status。 这应该在“设备状态”部分生成输出“AzureAdJoined : YES”。 否则请将设备联接到 Microsoft Entra 租户并再次尝试进行安装。

命令提示符下的无提示安装失败

请确保在管理员命令提示符下启动安装程序。 只能从管理员命令提示符下启动无提示安装。

卸载失败,因为卸载程序无法停止该服务

  • 如果可以选择重试,请重试
  • 如果从卸载程序中进行重试不起作用,请取消卸载并从“服务”(桌面应用程序)停止 Azure Monitor 代理服务
  • 重试卸载

卸载程序不起作用时手动强制卸载

  • 停止 Azure Monitor 代理服务。 然后再次尝试卸载。 如果失败,请继续执行以下步骤
  • 从管理员命令提示符下使用“sc delete AzureMonitorAgent”删除 AMA 服务
  • 下载此工具并卸载 AMA
  • 删除 AMA 二进制文件。 默认情况下,它们存储在 Program Files\Azure Monitor Agent
  • 删除 AMA 数据/日志。 默认情况下,它们存储在 C:\Resources\Azure Monitor Agent
  • 打开注册表。 检查 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Azure Monitor Agent。 如果它存在,则删除该键。

安装后/操作问题

成功安装代理后(即看到代理服务正在运行但没有看到预期的数据),就可以按照此处列出的分别针对 Windows VM已启用 Windows Arc 的服务器的标准故障排除步骤进行操作。

常见问题

本部分提供常见问题的解答。

已加入 Microsoft Entra 的计算机是否需要 Azure Arc?

不是。 运行 Windows 10 或 11(客户端 OS)的已加入 Microsoft Entra(或已加入混合 Microsoft Entra)的计算机不需要安装 Azure Arc。 相反,可以使用适用于 Azure Monitor Agent 的 Windows MSI 安装程序,该程序目前提供预览版

问题和反馈

完成此快速调查或共享有关客户端安装程序的反馈/问题。