디버그 로깅 활성화

배포 오류 문제를 해결하려면 디버그 로깅을 사용하도록 설정하여 자세한 정보를 가져올 수 있습니다. 디버그 로깅은 Bicep 파일 또는 Azure Resource Manager 템플릿(ARM 템플릿)을 사용한 배포에 대해 작동합니다. 배포 요청 및 응답에 관한 데이터를 가져와서 문제의 원인을 알아볼 수 있습니다.

Warning

디버그 로깅은 암호 또는 listKeys 작업과 같은 비밀을 노출할 수 있습니다. 배포 오류를 해결해야 하는 경우에만 디버그 로깅을 사용합니다. 디버깅이 완료되면 디버그 배포 기록을 제거해야 합니다.

디버그 로깅 설정

Azure PowerShell을 사용하여 문제 해결을 위한 배포 정보로 requestresponse 속성을 채우는 디버그 로깅을 사용하도록 설정합니다. Azure CLI를 사용하여 디버그 로깅을 사용하도록 설정할 수 없습니다.

디버그 로깅은 기본 ARM 템플릿 또는 Bicep 파일에 대해서만 사용하도록 설정됩니다. 중첩된 ARM 템플릿 또는 Bicep 모듈을 사용하는 경우 중첩된 템플릿 디버그를 참조하세요.

리소스 그룹 배포의 경우 New-AzResourceGroupDeployment를 사용하고 DeploymentDebugLogLevel 매개 변수를 All, ResponseContent 또는 RequestContent로 설정합니다.

디버그 로깅이 사용하도록 설정되면 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

StatusCode, StatusMessage 또는 ProvisioningState와 같은 속성을 지정하여 출력을 필터링할 수 있습니다.

(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 속성에 문제 해결 정보를 포함하려면 다음 배포 시나리오에 유의하세요.

  • requestresponse 속성에는 DeploymentDebugLogLevel이 배포 명령으로 사용하도록 설정되지 않은 경우 기본 템플릿과 중첩된 템플릿에 대한 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를 반환합니다.

배포 기록에 대한 자세한 내용은 배포 범위에 대한 설명서(구독, 관리 그룹 및 테넌트)를 참조하세요.

다음 단계