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

Os dados de desempenho do sistema operacional convidado das VMs (máquinas virtuais) do Azure não são coletados automaticamente, como ocorre com outras métricas de plataforma. Instale a extensão de diagnóstico do Azure Monitor para coletar as métricas do sistema operacional convidado no banco de dados de métricas a fim de usá-las com todos os recursos das Métricas do Azure Monitor. Esses recursos incluem a criação de gráficos, o roteamento, o acesso e a geração de alertas praticamente em tempo real por meio de uma API REST. Este artigo descreve o processo de envio das métricas de desempenho do sistema operacional convidado relativas a uma VM do Windows para o banco de dados de métricas por meio de um modelo do ARM (Azure Resource Manager).

Observação

Para saber como configurar a extensão de diagnóstico a fim de coletar métricas do sistema operacional convidado usando o portal do Azure, confira Instalar e configurar a extensão do WAD (diagnóstico do Windows Azure).

Se você não está familiarizado com os modelos do ARM, saiba mais sobre as implantações de modelos e a estrutura e a sintaxe associadas.

Pré-requisitos

Configurar o Azure Monitor como um coletor de dados

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

Modelo de 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 do ARM pré-configurado para a implantação de uma VM.
  • Azuredeploy.parameters.json: um arquivo de parâmetros que armazena informações como o nome de usuário e a senha que você deseja definir para a VM. Durante a implementação, o modelo do ARM usa os parâmetros configurados nesse arquivo.

Baixe e salve os dois arquivos localmente.

Modificar azuredeploy.parameters.json

  1. Abra o arquivo azuredeploy.parameters.json.

  2. Insira valores de adminUsername e adminPassword para a VM. Esses parâmetros são usados para acesso remoto à VM. Para evitar que a VM seja invadida, não use os valores nesse modelo. Os bots examinam a Internet em busca de nomes de usuário e senhas em repositórios GitHub públicos. Eles provavelmente testarão VMs com esses padrões.

  3. Crie um dnsname exclusivo para a VM.

Modificar azuredeploy.json

  1. Abra o azuredeploy. JSON arquivo.

  2. Adicione uma ID de conta de armazenamento à seção variables 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 essa extensão de MSI (Identidade de Serviço Gerenciada) ao modelo na parte superior da seção resources. 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 configuração de identity ao recurso da VM para garantir que o Azure atribua uma identidade do sistema à extensão de MSI. Essa 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 configuração a seguir para habilitar a extensão de diagnóstico em uma VM do Windows. No caso de uma VM simples baseada no Resource Manager, é possível adicionar a configuração de extensão à matriz de recursos da VM. A linha "sinks": "AzMonSink" e o "SinksConfig" correspondente que aparece posteriormente na seção permitem que a extensão emita métricas diretamente no Azure Monitor. Fique à vontade adicionar ou remover os 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.

Implantar o modelo do ARM

Observação

É necessário executar a extensão do diagnóstico do Azure 1.5 ou superior e ter a propriedade autoUpgradeMinorVersion: definida como true no modelo do ARM. Então, o Azure carregará a extensão apropriada ao iniciar a VM. Se você não tiver essas configurações no seu modelo, altere-as e reimplemente o modelo.

Para implantar o modelo do ARM, use o Azure PowerShell.

  1. Inicie o PowerShell.

  2. Entrar no Azure usando Login-AzAccount.

  3. Obtenha a lista de assinaturas usando Get-AzSubscription.

  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 sendo implantada, execute o comando a seguir:

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

    Observação

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

    Observação

    Você pode encontrar erros ao redor selecionado vmSkuSize. Se esse erro ocorrer, volte ao arquivo azuredeploy.json e atualize o valor padrão do parâmetro vmSkuSize. (Neste caso, é recomendado testar "Standard_DS1_v2").

Fazer um gráfico das métricas

  1. Entre no portal do Azure.

  2. No menu esquerdo, selecione Monitorar.

  3. Sobre o Monitor página, 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 criada. Se você não alterou o nome do modelo, ele deve ser SimpleWinVM2.

  6. Na lista de seleção de namespaces, selecione azure.vm.windows.guestmetrics.

  7. Na lista suspensa de métricas, selecione Memory%Committed Bytes usados.

Próximas etapas

Saiba mais sobre métricas personalizadas.