启用调试日志记录

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

警告

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

设置调试日志

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

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

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

启用调试日志记录后,会显示一条警告,指出使用诸如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 模板的调试信息,请使用具有该属性的 Microsoft.Resources/deploymentsdebugSetting

以下示例显示了一个嵌套模板,其中包含 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 文件和模块的信息,这些信息可用于排查部署问题。

如果从部署命令启用DeploymentDebugLogLevel,那么requestresponse属性将仅包含主 Bicep 文件的部署信息。

移除调试部署历史记录

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

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

Remove-AzResourceGroupDeployment -ResourceGroupName examplegroup -Name exampledeployment

命令成功后返回 True

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

后续步骤