Enviar métricas do SO convidado para o repositório de métricas do Azure Monitor usando um modelo ARM para uma VM do Windows

Os dados de desempenho do SO convidado das máquinas virtuais (VMs) do Azure não são recolhidos automaticamente como outras métricas da plataforma. Instale a extensão Azure Monitor Diagnostics para coletar métricas do SO convidado no banco de dados de métricas para que ele possa ser usado com todos os recursos do Azure Monitor Metrics. Esses recursos incluem alertas, gráficos, roteamento e acesso quase em tempo real a partir de uma API REST. Este artigo descreve o processo de envio de métricas de desempenho do SO convidado para uma VM do Windows para o banco de dados de métricas usando um modelo do Azure Resource Manager (modelo ARM).

Nota

Para obter detalhes sobre como configurar a extensão de diagnóstico para coletar métricas do SO convidado usando o portal do Azure, consulte Instalar e configurar a extensão WAD (Diagnóstico do Windows Azure).

Se você é novo em modelos ARM, saiba mais sobre implantações de modelos e sua estrutura e sintaxe.

Pré-requisitos

Configurar o Azure Monitor como um coletor de dados

A extensão do Diagnóstico do Azure usa um recurso chamado coletores de dados para rotear métricas e logs para locais diferentes. As etapas a seguir mostram como usar um modelo ARM e o PowerShell para implantar uma VM usando o novo coletor de dados do Azure Monitor.

Modelo ARM

Para este exemplo, você pode usar um modelo de exemplo disponível publicamente. Os modelos iniciais estão no GitHub.

  • Azuredeploy.json: Um modelo ARM pré-configurado para a implantação de uma VM.
  • Azuredeploy.parameters.json: um arquivo de parâmetros que armazena informações como qual nome de usuário e senha você deseja definir para sua VM. Durante a implantação, o modelo ARM usa os parâmetros definidos nesse arquivo.

Transfira e guarde ambos os ficheiros localmente.

Modificar azuredeploy.parameters.json

  1. Abra o arquivo azuredeploy.parameters.json .

  2. Insira valores para e adminPassword para adminUsername a VM. Esses parâmetros são usados para acesso remoto à VM. Para evitar que sua VM seja sequestrada, não use os valores neste modelo. Os bots verificam a internet em busca de nomes de usuário e senhas em repositórios públicos do GitHub. É provável que eles estejam testando VMs com esses padrões.

  3. Crie um exclusivo dnsname para a VM.

Modificar azuredeploy.json

  1. Abra o arquivo azuredeploy.json .

  2. Adicione um ID de conta de armazenamento à variables seção do modelo após a entrada para storageAccountName.

    // Find these lines.
    "variables": {
        "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'sawinvm')]",
    
    // Add this line directly below.
        "accountid": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
    
  3. Adicione esta extensão MSI (Managed Service Identity) ao modelo na parte superior da resources seção. A extensão garante que o Azure Monitor aceite as métricas que estão sendo emitidas.

    //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
                }
            }
        },
    
  4. Adicione a identity configuração ao recurso VM para garantir que o Azure atribua uma identidade do sistema à extensão MSI. Esta etapa garante que a VM possa emitir métricas de convidado sobre si mesma para o 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": {
        ...
    
  5. Adicione a seguinte configuração para habilitar a extensão de diagnóstico em uma VM do Windows. Para uma VM simples baseada no Gerenciador de Recursos, você pode adicionar a configuração de extensão à matriz de recursos para a VM. A linha "sinks": "AzMonSink", e a correspondente "SinksConfig" mais adiante na seção, permitem que a extensão emita métricas diretamente para o Azure Monitor. Sinta-se à vontade para adicionar ou remover contadores de desempenho conforme necessário.

            "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
    
  6. Salve e feche ambos os arquivos.

Implementar o modelo do Resource Manager

Nota

Você deve estar executando a extensão de Diagnóstico do Azure versão 1.5 ou superior e ter a autoUpgradeMinorVersion: propriedade definida como true em seu modelo ARM. Em seguida, o Azure carrega a extensão adequada quando inicia a VM. Se você não tiver essas configurações em seu modelo, altere-as e reimplante o modelo.

Para implantar o modelo ARM, usamos o Azure PowerShell.

  1. Inicie o PowerShell.

  2. Entre no Azure usando Login-AzAccounto .

  3. Obtenha a sua lista de subscrições utilizando Get-AzSubscriptiono .

  4. Defina a assinatura que você está usando para criar/atualizar a VM em:

    Select-AzSubscription -SubscriptionName "<Name of the subscription>"
    
  5. Para criar um novo grupo de recursos para a VM que está sendo implantada, execute o seguinte comando:

     New-AzResourceGroup -Name "<Name of Resource Group>" -Location "<Azure Region>"
    
  6. Execute os comandos a seguir para implantar a VM usando o modelo ARM.

    Nota

    Se desejar atualizar uma VM existente, adicione -Mode Incremental ao final do comando a seguir.

    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. Depois que sua implantação for bem-sucedida, a VM deve estar no portal do Azure, emitindo métricas para o Azure Monitor.

    Nota

    Você pode encontrar erros ao redor do arquivo vmSkuSize. Se esse erro acontecer, volte para o arquivo azuredeploy.json e atualize o vmSkuSize valor padrão do parâmetro. Neste caso, recomendamos que tente "Standard_DS1_v2").

Crie um gráfico das suas métricas

  1. Inicie sessão no portal do Azure.

  2. No menu à esquerda, selecione Monitor.

  3. Na página Monitor, selecione Métricas.

    Screenshot that shows the Metrics page.

  4. Altere o período de agregação para Últimos 30 minutos.

  5. No menu suspenso de recursos, selecione a VM que você criou. Se você não alterou o nome no modelo, ele deve ser SimpleWinVM2.

  6. Na lista suspensa namespaces, selecione azure.vm.windows.guestmetrics.

  7. Na lista suspensa métricas, selecione Memória%Bytes confirmados em uso.

Próximos passos

Saiba mais sobre métricas personalizadas.