启用调试日志记录

若要排查部署错误,可以启用调试日志记录以获取详细信息。 调试日志记录适用于使用 Bicep 文件或 Azure 资源管理器模板(ARM 模板)进行部署。 可以获取有关部署请求和响应的数据,以了解问题的原因。

警告

调试日志记录可能会公开密码等机密或 listKeys 操作。 仅当需要排查部署错误时才启用调试日志记录。 调试完成后,应删除调试部署历史记录

设置调试日志记录

使用 Azure PowerShell 启用调试日志记录,以使用部署信息填充 requestresponse 属性来进行故障排除。 无法使用 Azure CLI 启用调试日志记录。

只能为主 ARM 模板或 Bicep 文件启用调试日志记录。 如果使用的是嵌套 ARM 模板或 Bicep 模块,请参阅调试嵌套模板

对于资源组部署,请使用 New-AzResourceGroupDeployment 并将 DeploymentDebugLogLevel 参数设置为 AllResponseContentRequestContent

启用调试日志记录时,会显示一条警告,指出在使用 Get-AzResourceGroupDeploymentOperation 等命令获取有关部署操作的信息时,可能会记录和显示密码等机密或 listKeys 操作。

New-AzResourceGroupDeployment `
  -Name exampledeployment `
  -ResourceGroupName examplegroup `
  -TemplateFile main.bicep `
  -DeploymentDebugLogLevel All

部署的输出显示调试日志记录级别。

DeploymentDebugLogLevel : RequestContent, ResponseContent

DeploymentDebugLogLevel 参数可用于其他部署范围:订阅、管理组和租户。

获取调试信息

启用调试日志记录后,可以获取有关部署操作的详细信息。 针对部署操作的 Azure PowerShell cmdlet 不会输出 requestresponse 属性。 需要使用 Azure CLI 从这些属性获取信息。

如果不通过部署命令启用调试日志记录,仍可以获取部署操作信息。 使用 Azure PowerShell 或 Azure CLI 获取状态代码、状态消息和预配状态。

对于资源组部署,请使用 Get-AzResourceGroupDeploymentOperation 获取部署操作。

Get-AzResourceGroupDeploymentOperation `
  -DeploymentName exampledeployment `
  -ResourceGroupName examplegroup

可以指定属性(如 StatusCodeStatusMessageProvisioningState)来筛选输出。

(Get-AzResourceGroupDeploymentOperation `
  -DeploymentName exampledeployment `
  -ResourceGroupName examplegroup).StatusCode

有关详细信息,请参阅部署操作范围的文档:订阅、管理组和租户。

调试嵌套模板

主 ARM 模板和嵌套模板有自己的部署名称和部署历史记录。 主 Bicep 文件和模块也使用单独的部署名称和部署历史记录。

ARM 模板

若要记录嵌套 ARM 模板的调试信息,请使用包含 debugSetting 属性的 Microsoft.Resources/deployments

以下示例演示一个嵌套模板,其中包含用于记录部署请求和响应的 debugSetting

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2021-04-01",
    "name": "nestedTemplateDebug",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2022-05-01",
            "name": "[variables('storageAccountName')]",
            "location": "[parameters('location')]",
            "sku": {
              "name": "[parameters('storageAccountType')]"
            },
            "kind": "StorageV2"
          }
        ]
      },
      "debugSetting": {
        "detailLevel": "requestContent, responseContent"
      }
    }
  }
],

主 ARM 模板和嵌套模板有自己的部署名称和部署历史记录。 如果你希望 requestresponse 属性包含故障排除信息,请注意以下部署方案:

  • 未使用部署命令启用 DeploymentDebugLogLevel 时,requestresponse 属性包含主模板和嵌套模板的 null 值。
  • 当部署命令启用 DeploymentDebugLogLevel 时,requestresponse 属性仅包含主模板的信息。 嵌套模板的属性包含 null 值。
  • 当嵌套模板使用 debugSetting 且部署命令不包含 DeploymentDebugLogLevel 时,只有嵌套模板部署具有 requestresponse 属性的值。 主模板的属性包含 null 值。
  • 若要获取主模板和嵌套模板的 requestresponse,请在部署命令中指定 DeploymentDebugLogLevel,并在嵌套模板中使用 debugSetting

Bicep 文件

对于 Bicep 文件,建议在 Microsoft.Resources/deployments 中使用模块而不是嵌套模板。 状态消息、状态代码和预配状态将包含可用于排查部署问题的主 Bicep 文件和模块的信息。

如果从部署命令启用 DeploymentDebugLogLevelrequestresponse 属性仅包含主 Bicep 文件部署的信息。

移除调试部署历史记录

完成调试后,应删除部署历史记录,以防止任何有访问权限的人员看到可能已记录的敏感信息。 有关在调试时使用的每个部署名称,请运行该命令删除部署历史记录。

若要移除资源组部署的部署历史记录,请使用 Remove-AzResourceGroupDeployment

Remove-AzResourceGroupDeployment -ResourceGroupName examplegroup -Name exampledeployment

该命令在成功后返回 True

有关部署历史记录的详细信息,请参阅部署范围的文档:订阅、管理组和租户。

后续步骤