Windows 가상 머신에 대해 Azure Resource Manager 템플릿을 사용하여 Azure Monitor 메트릭 저장소에 게스트 OS 메트릭 보내기

Azure Virtual Machine의 게스트 OS 성능 데이터는 다른 플랫폼 메트릭과 마찬가지로 자동으로 수집되지 않습니다. Azure Monitor 진단 확장을 설치하여 게스트 OS 메트릭을 메트릭 데이터베이스로 수집합니다. 이러한 메트릭은 근실시간 경고, 차트, 라우팅 및 REST API에서의 액세스를 비롯한 Azure Monitor 메트릭의 모든 기능에서 사용할 수 있습니다. 이 문서에서는 Resource Manager 템플릿을 사용하여 Windows 가상 머신에 대한 게스트 OS 성능 메트릭을 메트릭 데이터베이스로 보내는 프로세스에 대해 설명합니다.

참고

Azure Portal을 사용하여 게스트 OS 메트릭을 수집하도록 진단 확장을 구성하는 방법에 대한 자세한 내용은 WAD(Windows Azure 진단) 확장 설치 및 구성을 참조하세요.

Resource Manager 템플릿을 처음 사용하는 경우 템플릿 배포와 해당 구조 및 구문에 대해 알아보세요.

사전 요구 사항

Azure Monitor를 데이터 싱크로 설정

Azure Diagnostics 확장은 "데이터 싱크"라는 기능을 사용하여 메트릭과 로그를 다른 위치로 라우팅합니다. 다음 단계에서는 Resource Manager 템플릿과 PowerShell을 사용하여 새 "Azure Monitor" 데이터 싱크를 통해 VM을 배포하는 방법을 보여줍니다.

Resource Manager 템플릿 작성

이 예제에서는 공개적으로 사용할 수 있는 템플릿 샘플을 사용할 수 있습니다. 시작 템플릿은 https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.compute/vm-simple-windows 에 있습니다.

  • Azuredeploy.json은 가상 머신을 배포하도록 미리 구성된 Resource Manager 템플릿입니다.

  • Azuredeploy.parameters.json은 VM에 대해 설정하려는 사용자 이름 및 암호와 같은 정보를 저장하는 매개 변수 파일입니다. 배포하는 동안 Resource Manager 템플릿에서는 이 파일에 설정된 매개 변수를 사용합니다.

두 파일을 다운로드하고 로컬로 저장합니다.

azuredeploy.parameters.json을 수정합니다.

azuredeploy.parameters.json 파일을 엽니다.

  1. VM에 대해 adminUsernameadminPassword에 대한 값을 입력합니다. 이러한 매개 변수는 VM에 원격으로 액세스하는 데 사용됩니다. VM이 하이재킹되지 않도록 방지하려면 이 템플릿에서 해당 값을 사용하지 마세요. 봇은 공용 GitHub 리포지토리에서 사용자 이름 및 암호를 인터넷으로 검색합니다. 이러한 기본값을 사용하여 VM을 테스트할 수 있습니다.

  2. VM에 대한 고유한 dnsname을 만듭니다.

Azuredeploy.json을 수정합니다.

azuredeploy.json 파일을 엽니다.

템플릿의 variables 섹션에 있는 storageAccountName 항목 뒤에 스토리지 계정 ID를 추가합니다.

// Find these lines.
"variables": {
    "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'sawinvm')]",

// Add this line directly below.
    "accountid": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",

템플릿의 resources 섹션 위쪽에 MSI(관리 서비스 ID) 확장을 추가합니다. 이 확장을 통해 Azure Monitor에서 내보내는 메트릭을 허용합니다.

//Find this code.
"resources": [
// Add this code directly below.
    {
        "type": "Microsoft.Compute/virtualMachines/extensions",
        "name": "[concat(variables('vmName'), '/', 'WADExtensionSetup')]",
        "apiVersion": "2017-12-01",
        "location": "[resourceGroup().location]",
        "dependsOn": [
            "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]" ],
        "properties": {
            "publisher": "Microsoft.ManagedIdentity",
            "type": "ManagedIdentityExtensionForWindows",
            "typeHandlerVersion": "1.0",
            "autoUpgradeMinorVersion": true,
            "settings": {
                "port": 50342
            }
        }
    },

Azure에서 MSI 확장에 시스템 ID를 할당하도록 VM 리소스에 identity 구성을 추가합니다. 이 단계는 VM에서 자체에 대한 게스트 메트릭을 Azure Monitor로 내보낼 수 있도록 합니다.

// Find this section
                "subnet": {
            "id": "[variables('subnetRef')]"
            }
        }
        }
    ]
    }
},
{
    "apiVersion": "2017-03-30",
    "type": "Microsoft.Compute/virtualMachines",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    // add these 3 lines below
    "identity": {
    "type": "SystemAssigned"
    },
    //end of added lines
    "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
    "hardwareProfile": {
    ...

다음 구성을 추가하여 Windows 가상 머신에서 진단 확장을 사용하도록 설정합니다. 간단한 Resource Manager 기반 가상 머신의 경우 가상 머신에 대한 리소스 배열에 확장 구성을 추가할 수 있습니다. "sinks"— "AzMonSink" 줄 및 해당 섹션의 뒷부분에 있는 해당 "SinksConfig"를 사용하면 확장에서 Azure Monitor에 메트릭을 직접 내보낼 수 있습니다. 필요에 따라 성능 카운터를 자유롭게 추가 또는 제거합니다.

        "networkProfile": {
            "networkInterfaces": [
            {
                "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
            }
            ]
        },
"diagnosticsProfile": {
    "bootDiagnostics": {
    "enabled": true,
    "storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob]"
    }
}
},
//Start of section to add
"resources": [
{
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "name": "[concat(variables('vmName'), '/', 'Microsoft.Insights.VMDiagnosticsSettings')]",
            "apiVersion": "2017-12-01",
            "location": "[resourceGroup().location]",
            "dependsOn": [
            "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
            ],
            "properties": {
            "publisher": "Microsoft.Azure.Diagnostics",
            "type": "IaaSDiagnostics",
            "typeHandlerVersion": "1.12",
            "autoUpgradeMinorVersion": true,
            "settings": {
                "WadCfg": {
                "DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "DiagnosticInfrastructureLogs": {
                    "scheduledTransferLogLevelFilter": "Error"
        },
                    "Directories": {
                    "scheduledTransferPeriod": "PT1M",
    "IISLogs": {
                        "containerName": "wad-iis-logfiles"
                    },
                    "FailedRequestLogs": {
                        "containerName": "wad-failedrequestlogs"
                    }
                    },
                    "PerformanceCounters": {
                    "scheduledTransferPeriod": "PT1M",
                    "sinks": "AzMonSink",
                    "PerformanceCounterConfiguration": [
                        {
                        "counterSpecifier": "\\Memory\\Available Bytes",
                        "sampleRate": "PT15S"
                        },
                        {
                        "counterSpecifier": "\\Memory\\% Committed Bytes In Use",
                        "sampleRate": "PT15S"
                        },
                        {
                        "counterSpecifier": "\\Memory\\Committed Bytes",
                        "sampleRate": "PT15S"
                        }
                    ]
                    },
                    "WindowsEventLog": {
                    "scheduledTransferPeriod": "PT1M",
                    "DataSource": [
                        {
                        "name": "Application!*"
                        }
                    ]
                    },
                    "Logs": {
                    "scheduledTransferPeriod": "PT1M",
                    "scheduledTransferLogLevelFilter": "Error"
                    }
                },
                "SinksConfig": {
                    "Sink": [
                    {
                        "name" : "AzMonSink",
                        "AzureMonitor" : {}
                    }
                    ]
                }
                },
                "StorageAccount": "[variables('storageAccountName')]"
            },
            "protectedSettings": {
                "storageAccountName": "[variables('storageAccountName')]",
                "storageAccountKey": "[listKeys(variables('accountid'),'2015-06-15').key1]",
                "storageAccountEndPoint": "https://core.windows.net/"
            }
            }
        }
        ]
//End of section to add

두 파일을 모두 저장하고 닫습니다.

Resource Manager 템플릿 배포

참고

Azure Diagnostics 확장 버전 1.5 이상을 실행하고 Resource Manager 템플릿에서 autoUpgradeMinorVersion: 속성을 ‘true’로 설정해야 합니다. 그러면 Azure에서 VM을 시작할 때 적절한 확장을 로드합니다. 템플릿에 이러한 설정이 없는 경우 해당 설정을 변경하고 템플릿을 다시 배포합니다.

Resource Manager 템플릿을 배포하기 위해 Azure PowerShell을 활용합니다.

  1. PowerShell을 시작합니다.

  2. Login-AzAccount를 사용하여 Azure에 로그인합니다.

  3. Get-AzSubscription을 사용하여 구독 목록을 가져옵니다.

  4. 다음에 가상 머신을 만들고/업데이트하는 데 사용하는 구독을 설정합니다.

    Select-AzSubscription -SubscriptionName "<Name of the subscription>"
    
  5. 배포되는 VM에 대한 새 리소스 그룹을 만들려면 다음 명령을 실행합니다.

     New-AzResourceGroup -Name "<Name of Resource Group>" -Location "<Azure Region>"
    
  6. Resource Manager 템플릿을 사용하여 VM을 배포하려면 다음 명령을 실행합니다.

    참고

    기존 VM을 업데이트하려면 다음 명령의 끝에 -Mode Incremental을 추가하기만 하면 됩니다.

    New-AzResourceGroupDeployment -Name "<NameThisDeployment>" -ResourceGroupName "<Name of the Resource Group>" -TemplateFile "<File path of your Resource Manager template>" -TemplateParameterFile "<File path of your parameters file>"
    
  7. 배포에 성공한 후 VM은 Azure Monitor에 메트릭을 내보내는 Azure Portal에 있어야 합니다.

    참고

    선택한 vmSkuSize 관련 오류가 발생할 수 있습니다. 그렇다면 azuredeploy.json 파일로 돌아가서 vmSkuSize 매개 변수의 기본값을 업데이트하세요. 이 경우에 "Standard_DS1_v2"를 사용하는 것이 좋습니다.

메트릭 차트 작성

  1. Azure 포털에 로그인합니다.

  2. 왼쪽 메뉴에서 모니터를 선택합니다.

  3. 모니터 페이지에서 메트릭을 선택합니다.

    Metrics page

  4. 집계 기간을 지난 30분으로 변경합니다.

  5. 리소스 드롭다운 메뉴에서 만든 VM을 선택합니다. 템플릿의 이름을 변경하지 않은 경우 SimpleWinVM2여야 합니다.

  6. 네임스페이스 드롭다운 메뉴에서 azure.vm.windows.guest를 선택합니다.

  7. 메트릭 드롭다운 메뉴에서 Memory\Committed Bytes in Use를 선택합니다.

다음 단계