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

创建 Azure Monitor 数据收集规则 (DCR)

有多种方法可在 Azure Monitor 中创建数据收集规则 (DCR)。 在某些情况下,Azure Monitor 会根据你在 Azure 门户中配置的设置创建和管理 DCR。 在某些情况下,你甚至可能没有意识到你正在使用 DCR。 而在其他方案中,你可能需要创建自己的 DCR,或者直接使用其 JSON 中的定义来编辑现有 DCR。 本文介绍了 DCR 的多种创建方法,并提出了有关 DCR 编辑和故障排除的建议。

注意

本文介绍如何创建和编辑 DCR。 若要创建和编辑数据收集规则关联,请参阅创建和管理数据收集规则关联

权限

你需要拥有以下权限,才能创建 DCR 和 DCR 关联

内置角色 作用域 原因
监视参与者
  • 订阅和/或
  • 资源组和/或
  • 现有 DCR
创建或编辑 DCR,将规则分配给计算机,部署关联。
虚拟机参与者
Azure Connected Machine 资源管理员
  • 虚拟机、虚拟机规模集
  • 已启用 Azure Arc 的服务器
在 VM(虚拟机)上部署代理扩展。
负责关于 Microsoft.Resources/deployments/ 操作的任何角色
  • 订阅和/或
  • 资源组和/或
  • 现有 DCR
部署 Azure 资源管理器模板。

重要

在目标 Log Analytics 工作区或 Azure Monitor 工作区所在的同一区域中创建 DCR。 你可以将 DCR 关联到租户中任何订阅或资源组中的计算机或容器。 若要跨租户发送数据,必须先启用 Azure Lighthouse

使用 Azure 门户创建或编辑 DCR

Azure 门户提供了简化体验,便于你为特定方案创建 DCR。 使用此方法时,你无需了解 DCR 的结构,尽管你可能会在配置过程中受到限制,并且可能需要在稍后编辑 DCR 定义来实现转换等高级功能。 该体验因方案而异,因此请参阅面向特定方案的文档,如下表所述。

场景 说明
启用 VM 见解 在 VM 上启用 VM 见解时,安装 Azure Monitor 代理,创建 DCR 并将其与虚拟机关联。 此 DCR 收集一组预定义的性能计数器,不应对其进行修改。 请参阅启用 VM 见解
从 VM 收集客户端数据 在 Azure 门户使用引导式界面创建 DCR,以从 VM 的客户端操作系统中选择不同数据源。 示例包括 Windows 事件、Syslog 事件和文本日志。 如有必要,请自动安装 Azure Monitor 代理,并在 DCR 与所选的每个 VM 之间建立关联。 请参阅使用 Azure Monitor 代理收集数据
指标导出 在 Azure 门户使用引导式界面创建 DCR,以选择要收集的不同资源类型的指标。 在 DCR 与所选的每个资源之间建立关联。 请参阅为指标导出创建数据收集规则 (DCR)
表创建 使用 Azure 门户在 Log Analytics 工作区中创建新表时,上传 Azure Monitor 用于创建 DCR 的示例数据,包括可用于日志引入 API的转换。 你无法在 Azure 门户中修改此 DCR,但可以使用本文中所述的任何方法对其进行修改。 请参阅创建自定义表
Kubernetes 监视 为监视 Kubernetes 群集,启用容器见解收集日志,启用 Prometheus 收集指标。 为容器见解和 Prometheus 分别创建一个 DCR,并将其与群集中的容器化 Azure Monitor 代理版本相关联。 你可能需要修改容器见解 DCR 来添加转换。 请参阅为 Kubernetes 群集启用监视容器见解中的数据转换
工作区转换 DCR 工作区转换 DCR 为尚未使用 DCR 的数据收集方案提供转换。 你可以使用 Azure 门户创建此 DCR,从而为特定表创建转换。 请参阅创建工作区转换 DCR

DCR 定义

无论 DCR 的创建方式如何,每个 DCR 都具有遵循标准 JSON 架构的定义。 若要使用 Azure 门户以外的方法创建或编辑 DCR,需要直接使用其 JSON 定义。 对于某些方案,你必须使用 JSON 定义,因为 Azure 门户没有提供根据需要配置 DCR 的方法。

你可以在 Azure 门户中单击“概述”菜单中的“JSON 视图”,查看 DCR 的 JSON。

屏幕截图显示在 Azure 门户中查看 DCR 的 JSON 的选项。

在“API 版本”下拉列表中验证是否选择了最新版本的 API。 否则,可能不会完整显示 JSON。

屏幕截图显示 Azure 门户中 DCR 的 JSON。

你也可以调用 DCR REST API 来检索 DCR 的 JSON。 例如,以下 PowerShell 脚本会检索 DCR 的 JSON 并将其保存到文件中。

$ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
$FilePath = "<FilePath>" # File to store DCR content
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File -FilePath $FilePath

注意

你可以在 PowerShell 中使用 Get-AzDataCollectionRule cmdlet 或在 Azure CLI 中使用 az monitor data-collection rule show 命令获取 DCR 的详细信息,但这些方法不提供格式可供编辑的 JSON。 请改用 PowerShell 或 CLI 来调用 REST API,如示例中所示。

使用 JSON 创建或编辑 DCR

除了编辑现有 DCR 之外,你还可以使用示例 DCR之一创建新的 DCR,这些示例提供 JSON,适合很多常见方案。 使用 Azure Monitor 中的数据收集规则结构中的信息针对特定环境和要求修改 JSON 文件。

定义 DCR 后,可以使用 Azure 门户、CLI、PowerShell、API 或 ARM 模板将其部署到 Azure Monitor。

使用 CLI 创建或编辑 DCR

使用 az monitor data-collection rule create 命令根据 JSON 文件创建 DCR。 还可以使用相同命令更新现有 DCR。

az monitor data-collection rule create --location 'eastus' --resource-group 'my-resource-group' --name 'my-dcr' --rule-file 'C:\MyNewDCR.json' --description 'This is my new DCR'

注意

虽然可以选择使用 PowerShell 或 CLI 命令创建和编辑 DCR,但如果出现编译错误,API 和 ARM 方法将提供更详细的错误消息。

在以下示例中,DCR 指定目标 Log Analytics 工作区中不存在的表名。 PowerShell 命令返回通用错误消息,而 API 调用则返回指明确切错误的详细错误消息。

屏幕截图显示使用 PowerShell 命令时返回的 DCR 错误消息。

屏幕截图显示使用 API 时返回的 DCR 错误消息。

DCR 编辑和测试策略

创建 DCR 或使用 DCR 的 JSON 定义编辑 DCR 时,通常需要多次更新才能实现所需的功能。 你需要一种有效的方法来更新 DCR,在没有得到预期结果时对其进行故障排除,然后继续更新其他内容。 在向 DCR 添加转换时尤其如此,因为你需要验证查询是否按预期运行。 由于无法在 Azure 门户中直接编辑 JSON,因此你可以使用以下策略。

使用本地文件作为 DCR 的源

如果使用本地 JSON 文件作为你要创建和编辑的 DCR 的源,就能确保始终访问最新版本的 DCR 定义。 如果要使用 GitHub 或 Azure DevOps 等版本控制工具来管理更改,那么这是十分理想的选择。 你也可以使用 VS Code 等编辑器更改 DCR,然后使用命令行工具更新 Azure Monitor 中的 DCR,如上文所述。

下面是 PowerShell 脚本示例,可用于将源文件中的更改推送到 DCR。 此操作会在将源文件发送到 Azure Monitor 之前,验证源文件是否为有效的 JSON。

param (
    [Parameter(Mandatory = $true)][string]$ResourceId,  # Resource ID of the DCR
    [Parameter(Mandatory = $true)][string]$FilePath  # Path to the DCR JSON file to upload
)

# Read the DCR content from the file
Write-Host "Reading new DCR content from: $FilePath" -ForegroundColor Green
$DCRContent = Get-Content $FilePath -Raw

# Ensure the DCR content is valid JSON
try {
    $ParsedDCRContent = $DCRContent | ConvertFrom-Json
} catch {
    Write-Host "Invalid JSON content in file: $FilePath" -ForegroundColor Red
    exit 1
}

# Create or update the DCR in the specified resource group
Write-Host "Deploying DCR $ResourceId ..." -ForegroundColor Green
Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method PUT -Payload $DCRContent		

将 DCR 内容保存到临时文件

如果本地文件中没有 DCR 定义,可以从 Azure Monitor 检索定义并将其保存到临时文件中。 使用 VS Code 等编辑器编辑此文件,然后再将更新推送到 Azure Monitor。

下面是 PowerShell 脚本示例,可用于编辑 Azure Monitor 中现有的 DCR。 该脚本将检索 DCR 定义,将其保存到临时文件,然后再启动 VS Code。 向脚本指示你已保存更改后,系统就会使用新内容更新 DCR 并删除临时文件。

param ([Parameter(Mandatory=$true)] $ResourceId)

# Get DCR content and save it to a local file
$FilePath = "temp.dcr"
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File $FilePath

# Open DCR in code editor
code $FilePath | Wait-Process

{ 
	#write DCR content back from the file
	$DCRContent = Get-Content $FilePath -Raw
	Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method PUT -Payload $DCRContent		
}

#Delete temporary file
Remove-Item $FilePath

使用 ARM 模板就地编辑 DCR

如果想要完全在 Azure 门户中编辑 DCR,可以使用导出模板功能来检索适用于 DCR 的 ARM 模板。 然后在 JSON 中修改定义,并在 Azure 门户中重新部署。

  1. 选择要在 Azure 门户中修改的 DCR,然后选择“导出模板”。 单击“部署”,重新部署同一模板。

    屏幕截图显示 Azure 门户中数据收集规则的“导出模板”选项。

  2. 单击“编辑模板”,打开 DCR 可编辑的 JSON 版本。 请勿更改参数值。

    屏幕截图显示 Azure 门户中数据收集规则的“编辑模板”选项。

  3. 对 DCR 进行任何所需更改,然后单击“保存”。

    屏幕截图显示 Azure 门户中数据收集规则的可编辑 JSON。

  4. 如果要创建新的 DCR,则请更改名称参数。 否则,请将参数保留不变。 单击“查看 + 创建”以部署修改后的模板,然后单击“创建”以创建新的 DCR。

    屏幕截图显示 Azure 门户中数据收集规则的“查看 + 创建”选项。

  5. 如果 DCR 有效且系统没有显示任何错误,则部署成功,DCR 将更新并使用新的配置。 单击“转到资源”以打开修改后的 DCR。

    屏幕截图显示 Azure 门户中数据收集规则部署成功。

  6. 如果 DCR 存在编译错误,你会收到部署失败的消息。 单击“错误详细信息”和“操作详细信息”,查看错误的详细信息。 单击“重新部署”,并再次单击“编辑模板”,对 DCR 进行必要的更改,然后再次保存并部署它。

    屏幕截图显示 Azure 门户中数据收集规则部署失败。

验证数据收集并对其进行故障排除

安装 DCR 后,可能需要几个小时更改才能生效并使用更新后的 DCR 收集数据。 如果未看到任何正在收集的数据,则很难确定问题的根本原因。 使用 DCR 监视功能,其包括有助于故障排除的指标和日志。

它会为所有 DCR 自动收集 DCR 指标,你可使用指标资源管理器分析这些指标,如其他 Azure 资源的平台指标。 启用 DCR 错误日志,以在数据处理失败时获取详细的错误信息。

如果未看到任何正在收集的数据,请按照以下基本步骤排除问题。

  1. 检查 Logs Ingestion Bytes per MinLogs Rows Received per Min 等指标,以确保数据到达 Azure Monitor。 如果未到达,检查数据源以确保其按预期发送数据。
  2. 检查 Logs Rows Dropped per Min 以确定是否删除了任何行。 这有可能不会显示错误,因为转换确实可能会删除这些行。 但如果删除的行与 Logs Rows Dropped per Min 相同,则不会在工作区中引入任何数据。 检查 Logs Transformation Errors per Min 以确认是否有任何转换错误。
  3. 检查 Logs Transformation Errors per Min 以确定应用于传入数据的转换是否有任何错误。 这可能因数据结构或转换本身发生更改所致。
  4. 查看 DCRLogErrors 表,检查是否可能记录了任何数据引入错误。 这可以在确定问题的根本原因时提供更多详细信息。

后续步骤