使用 Azure 策略和计划大规模创建诊断设置

要监视 Azure 资源,需要为每个资源创建诊断设置。 如果具有多个资源,则可能难以管理此资源。 要简化大规模创建和应用诊断设置的过程,请使用 Azure Policy 为新资源和现有资源自动生成诊断设置。

每种 Azure 资源类型都会在诊断设置中列出一组唯一的类别。 因此,每种资源类型都需要单独的策略定义。 某些资源类型具有无需修改便可分配的内置策略定义。 对于其他资源类型,可以创建自定义定义。

日志类别组

日志类别组,将类似类型的日志组合在一起。 使用类别组,可以轻松地在单个命令中引用多个日志。 存在包含所有日志的 allLogs 类别组。 还有一个包含所有审核日志的审核类别组。 通过使用类别组,可以定义会在将新日志类别添加到组时动态更新的策略。

Azure Monitor 的内置策略定义

每种资源类型通常具有三个内置策略定义,对应于要将诊断发送到的三个目标:

  • Log Analytics 工作区
  • Azure 存储帐户
  • 事件中心

根据所需的目标为资源类型分配策略。

存在一组基于审核日志类别组的内置策略和计划,可帮助你仅通过几个步骤就能应用诊断设置。

有关 Azure Monitor 内置策略的完整列表,请参阅Azure Monitor 的 Azure Policy 内置定义

自定义策略定义

对于没有内置策略的资源类型,你需要创建自定义策略定义。 可以在 Azure 门户中手动创建新策略,其方法是复制某个现有的内置策略,然后针对资源类型进行修改。 也可以使用 PowerShell 库中的脚本以编程方式创建策略。

脚本 Create-AzDiagPolicy 为可使用 PowerShell 或 Azure CLI 安装的特定资源类型创建策略文件。 使用以下过程可为诊断设置创建自定义策略定义:

  1. 请确保已安装 Azure PowerShell

  2. 使用以下命令安装脚本:

    Install-Script -Name Create-AzDiagPolicy
    
  3. 通过使用参数指定要将日志发送到何处来运行该脚本。 在提示符下指定订阅和资源类型。

    例如,若要创建将日志发送到 Log Analytics 工作区和事件中心的策略定义,请使用以下命令:

    Create-AzDiagPolicy.ps1 -ExportLA -ExportEH -ExportDir ".\PolicyFiles"  
    

    另外,还可以在命令中指定订阅和资源类型。 例如,若要为 SQL Server 数据库创建将日志发送到 Log Analytics 工作区和事件中心的策略定义,请使用以下命令:

    Create-AzDiagPolicy.ps1 -SubscriptionID <subscription id> -ResourceType Microsoft.Sql/servers/databases  -ExportLA -ExportEH -ExportDir ".\PolicyFiles"  
    
  4. 此脚本为每个策略定义创建单独的文件夹。 每个文件夹包含名为 azurepolicy.json、azurepolicy.rules.json 和 azurepolicy.parameters.json 的三个文件 。 若要在 Azure 门户中手动创建策略,可以复制并粘贴 azurepolicy.json 的内容,因为它包括整个策略定义。 通过 PowerShell 或 Azure CLI 从命令行使用其他两个文件创建策略定义。

    以下示例演示了如何通过 PowerShell 和 Azure CLI 安装策略定义。 每个示例包括元数据,用于指定一个“监视”类别,以便将新策略定义与内置策略定义分组到一起。

    New-AzPolicyDefinition -name "Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace" -policy .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json -parameter .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json -mode All -Metadata '{"category":"Monitoring"}'
    
    az policy definition create --name 'deploy-diag-setting-sql-database--workspace' --display-name 'Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace'  --rules 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json' --params 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json' --subscription 'AzureMonitor_Docs' --mode All
    

计划

与为每个策略定义创建分配不同,一种常见的策略是创建一个计划,在其中包括策略定义,以便为每个 Azure 服务创建诊断设置。 根据你管理环境的方式,在计划与管理组、订阅或资源组之间创建分配。 此策略具有以下优势:

  • 为计划创建单个分配,而不是为每个资源类型创建多个分配。 对多个监视组、订阅或资源组使用同一计划。
  • 当需要添加新的资源类型或目标时,只需修改计划即可。 例如,你最初的要求可能是仅将数据发送到 Log Analytics 工作区,但之后想要添加事件中心。 请修改计划,而不要创建新分配。

有关创建计划的详细信息,请参阅创建和分配计划定义。 请考虑以下建议:

  • 将“类别”设置为“监视”,以将其与相关的内置和自定义策略定义分组到一起 。
  • 使用一个通用的计划参数,而不是为计划中包含的策略定义指定 Log Analytics 工作区和事件中心的详细信息。 此参数使你可以轻松地为所有策略定义指定一个通用值,并根据需要更改该值。

显示计划定义设置的屏幕截图。

分配

根据要监视的资源的范围,将计划分配给 Azure 管理组、订阅或资源组。 管理组可用于限定策略范围,尤其是当你的组织有多个订阅时。

该屏幕截图显示 Azure 门户中 Log Analytics 工作区诊断设置的“分配计划”部分中的“基本信息”选项卡设置。

通过使用计划参数,你可以同时为计划中的所有策略定义指定工作区或任何其他详细信息。

显示“参数”选项卡上的计划参数的屏幕截图。

修正

该计划会在创建时应用于每台虚拟机。 修正任务将该计划中的策略定义部署到现有资源,因此,你可以为已创建的任何资源创建诊断设置。

使用 Azure 门户创建分配时,可以选择同时创建修正任务。 有关修正的详细信息,请参阅使用 Azure Policy 修正不合规资源

显示 Log Analytics 工作区计划修正的屏幕截图。

疑难解答

指标类别不受支持

部署诊断设置时,你会收到一条错误消息,类似于“指标类别‘xxxx’不受支持”。 即使以前的部署成功,也可能会收到此错误。

在使用资源管理器模板、REST API、Azure CLI 或 Azure PowerShell 时,会出现此问题。 通过 Azure 门户创建的诊断设置将不受影响,因为只会显示受支持的类别名称。

除了少数 Azure 服务外,不支持除 AllMetrics 之外的指标类别。 以前在部署诊断设置时,其他类别名称会被忽略,并被重定向到 AllMetrics。 截至 2021 年 2 月,所提供的指标类别已经过验证。 此更改导致一些部署出现失败。

要解决此问题,请更新部署以删除除 AllMetrics 之外的所有指标类别名称。 如果部署添加多个类别,则只使用一个 AllMetrics 类别。 如果仍出现此问题,请通过 Azure 门户联系 Azure 支持。

由于 resourceID 中包含非 ASCII 字符,设置消失

诊断设置不支持包含非 ASCII 字符的 resourceID(例如,Preproduccón)。 由于无法重命名 Azure 中的资源,因此必须创建不包含非 ASCII 字符的新资源。 如果字符位于资源组中,可以将资源移动到新组。

后续步骤