Partager via

使用 JSON 创建数据收集规则(DCR)

有多种方法可用于在 Azure Monitor 中创建 data 集合规则 (DCR)。 对于许多方案,可以使用 Azure 门户 创建 DCR,而无需了解 DCR 定义的结构。 而在其他方案中,你可能需要创建自己的 DCR,或者直接使用其 JSON 中的定义来编辑现有 DCR。 这可能用于使用 转换 等高级功能,或者使用命令行工具创建和管理 DCR。

警告

如果您在 Azure 门户 中编辑现有的数据收集规则 (DCR),则将覆盖通过直接编辑 DCR 的 JSON 所做的任何更改(如果这些功能在门户中不受支持)。 例如,如果为不允许在门户中创建转换的数据源向 DCR 添加转换,那么如果后续在门户中编辑该 DCR,该转换将被删除。 在这种情况下,必须通过直接编辑 JSON 来继续对 DCR 进行任何更改。

权限

需要以下权限才能创建 DCR:

内置角色 范围 原因
监视参与者
  • 订阅和/或
  • 资源组和/或
  • 现有 DCR
创建或编辑 DCR,将规则分配给计算机,部署关联。
包含Microsoft.Resources/deployments/ 操作的任何角色*
  • 订阅和/或
  • 资源组和/或
  • 现有 DCR
部署Azure Resource Manager模板。

重要

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

DCR 定义

而不是从头开始创建 DCR 定义,从在 Azure 门户中创建的 DCR 开始,并下载其 JSON 定义进行修改。 或者,您可以使用 示例 DCR之一,这些 DCR 提供了多个常见场景的 JSON。 使用 Azure Monitor 中数据收集规则的结构里的信息,根据特定环境和要求来修改 JSON 文件。

若要查看 DCR 的 JSON 定义,请参阅 “查看 DCR 定义”。

创建或编辑 DCR

获得 DCR 的定义后,可以使用以下任一方法将其部署到 Azure Monitor。 创建一个新的 DCR 或编辑现有 DCR 是相同的方法。

使用 CLI 创建或编辑 DCR

使用 az monitor data-collection rule create 命令根据 JSON 文件创建 DCR。

az monitor data-collection rule create --location 'chinaeast2' --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 的 ARM 模板。 然后,可以在 JSON 中修改定义,并在Azure门户中重新部署它。

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

    Screenshot 显示 Azure portal.

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

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

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

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

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

    显示 Azure portal 中数据收集规则的“审阅 + 创建”选项的截图。

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

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

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

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

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

安装 DCR 后,可能需要几个小时更改才能生效并使用更新后的 DCR 收集数据。 如果未看到正在收集数据,请使用 DCR 监视 功能(包括指标和日志),以帮助进行故障排除。

为所有 DCR 自动收集 DCR 指标,您可以像对其他 Azure 资源的平台指标一样,使用指标资源管理器对其进行分析。 启用 DCR 错误日志 ,以便在数据处理未成功时获取详细的错误信息。

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

后续步骤