Enviar métricas do SO convidado para o repositório de métricas do Azure Monitor usando um modelo do Azure Resource Manager para um conjunto de dimensionamento de máquina virtual do Windows

Nota

O Azure Monitor Agent (AMA) coleta dados de monitoramento do sistema operacional convidado do Azure e de máquinas virtuais híbridas e Conjuntos de Dimensionamento de Máquina Virtual e os entrega ao Azure Monitor para uso por recursos, insights e outros serviços, como o Microsoft Sentinel e o Microsoft Defender for Cloud.

Recomendamos usar o Agente do Azure Monitor para coletar logs e métricas de Conjuntos de Dimensionamento de Máquina Virtual. Para obter mais informações, consulte Visão geral do Azure Monitor Agent.

Usando a extensão Azure Monitor Azure Diagnostics for Windows (WAD), você pode coletar métricas e logs do sistema operacional convidado (SO convidado) que é executado como parte de uma máquina virtual, serviço de nuvem ou cluster do Azure Service Fabric. A extensão pode enviar telemetria para muitos locais diferentes listados no artigo vinculado anteriormente.

Este artigo descreve o processo para enviar métricas de desempenho do SO convidado para uma escala de máquina virtual do Windows definida para o armazenamento de dados do Azure Monitor. A partir do Diagnóstico do Microsoft Azure versão 1.11, você pode escrever métricas diretamente no repositório de métricas do Azure Monitor, onde as métricas padrão da plataforma já são coletadas. Ao armazená-los nesse local, você pode acessar as mesmas ações que estão disponíveis para métricas da plataforma. As ações incluem alertas quase em tempo real, criação de gráficos, roteamento, acesso da API REST e muito mais. No passado, a extensão de Diagnóstico do Microsoft Azure gravava no Armazenamento do Azure, mas não no armazenamento de dados do Azure Monitor.

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

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

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 do Gerenciador de Recursos e o PowerShell para implantar uma VM usando o novo coletor de dados do Azure Monitor.

Criar um modelo do Resource Manager

Para este exemplo, você pode usar um modelo de exemplo disponível publicamente:

  • Azuredeploy.json é um modelo pré-configurado do Gerenciador de Recursos para implantação de um conjunto de dimensionamento de máquina virtual.

  • 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 do Gerenciador de Recursos usa os parâmetros definidos neste arquivo.

Transfira e guarde ambos os ficheiros localmente.

Modificar azuredeploy.parameters.json

Abra o arquivo azuredeploy.parameters.json :

  • Forneça um vmSKU que você deseja implantar. Recomendamos Standard_D2_v3.
  • Especifique um windowsOSVersion desejado para seu conjunto de dimensionamento de máquina virtual. Recomendamos 2016-Datacenter.
  • Nomeie o recurso do conjunto de escala da máquina virtual a ser implantado usando uma propriedade vmssName . Um exemplo é VMSS-WAD-TEST.
  • Especifique o número de VMs que você deseja executar na escala da máquina virtual definida usando a propriedade instanceCount .
  • Insira valores para adminUsername e adminPassword para o conjunto de escala da máquina virtual. Esses parâmetros são usados para acesso remoto às VMs no conjunto de escala. Para evitar que sua VM seja sequestrada, não use as deste 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.

Modificar azuredeploy.json

Abra o arquivo azuredeploy.json .

Adicione uma variável para armazenar as informações da conta de armazenamento no modelo do Resource Manager. Todos os logs ou contadores de desempenho especificados no arquivo de configuração de diagnóstico são gravados no repositório de métricas do Azure Monitor e na conta de armazenamento especificada aqui:

"variables": {
  //add this line
  "storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]",
  ...
}

Encontre a definição do conjunto de escala da máquina virtual na seção de recursos e adicione a seção de identidade à configuração. Essa adição garante que o Azure atribua uma identidade do sistema. Esta etapa também garante que as VMs no conjunto de escala possam emitir métricas de convidado sobre si mesmas para o Azure Monitor:

{ 
  "type": "Microsoft.Compute/virtualMachineScaleSets", 
  "name": "[variables('namingInfix')]", 
  "location": "[resourceGroup().location]", 
  "apiVersion": "2017-03-30", 
  //add these lines below
  "identity": { 
       "type": "systemAssigned" 
   }, 
   //end of lines to add
   ...
}

No recurso de conjunto de escala de máquina virtual, localize a seção virtualMachineProfile . Adicione um novo perfil chamado extensionsProfile para gerenciar extensões.

No extensionProfile, adicione uma nova extensão ao modelo, conforme mostrado na seção VMSS-WAD-extension. Esta seção é as identidades gerenciadas para a extensão de recursos do Azure que garante que as métricas que estão sendo emitidas sejam aceitas pelo Azure Monitor. O campo de nome pode conter qualquer nome.

O código a seguir da extensão MSI também adiciona a extensão de diagnóstico e a configuração como um recurso de extensão ao recurso do conjunto de escala da máquina virtual. Sinta-se à vontade para adicionar ou remover contadores de desempenho, conforme necessário:

  "extensionProfile": {
    "extensions": [
      // BEGINNING of added code
      // Managed identities for Azure resources
      {
        "name": "VMSS-WAD-extension",
        "properties": {
          "publisher": "Microsoft.ManagedIdentity",
          "type": "ManagedIdentityExtensionForWindows",
          "typeHandlerVersion": "1.0",
          "autoUpgradeMinorVersion": true,
          "settings": {
            "port": 50342
          },
          "protectedSettings": {}
        }
      },
      // add diagnostic extension. (Remove this comment after pasting.)
      { 
        "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]", 
        "properties": { 
          "type": "IaaSDiagnostics",
          "autoUpgradeMinorVersion": true,
          "protectedSettings": {
            "storageAccountName": "[variables('storageAccountName')]",
            "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1]",
            "storageAccountEndPoint": "https://core.windows.net/"
          },
          "publisher": "Microsoft.Azure.Diagnostics", 
          "settings": { 
            "WadCfg": { 
              "DiagnosticMonitorConfiguration": { 
                "overallQuotaInMB": "50000", 
                "PerformanceCounters": { 
                  "scheduledTransferPeriod": "PT1M", 
                  "sinks": "AzMonSink", 
                  "PerformanceCounterConfiguration": [
                    { 
                      "counterSpecifier": "\\Memory\\% Committed Bytes In Use", 
                      "sampleRate": "PT15S" 
                    },
                    { 
                      "counterSpecifier": "\\Memory\\Available Bytes", 
                      "sampleRate": "PT15S" 
                    }, 
                    { 
                      "counterSpecifier": "\\Memory\\Committed Bytes", 
                      "sampleRate": "PT15S" 
                    }
                  ]
                },
                "EtwProviders": {
                  "EtwEventSourceProviderConfiguration": [
                    { 
                      "provider": "Microsoft-ServiceFabric-Actors", 
                      "scheduledTransferKeywordFilter": "1", 
                      "scheduledTransferPeriod": "PT5M", 
                      "DefaultEvents": { 
                        "eventDestination": "ServiceFabricReliableActorEventTable" 
                      } 
                    }, 
                    { 
                      "provider": "Microsoft-ServiceFabric-Services", 
                      "scheduledTransferPeriod": "PT5M", 
                      "DefaultEvents": { 
                        "eventDestination": "ServiceFabricReliableServiceEventTable" 
                      } 
                    } 
                  ], 
                  "EtwManifestProviderConfiguration": [
                    {
                       "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8", 
                       "scheduledTransferLogLevelFilter": "Information", 
                       "scheduledTransferKeywordFilter": "4611686018427387904", 
                       "scheduledTransferPeriod": "PT5M", 
                       "DefaultEvents": { 
                         "eventDestination": "ServiceFabricSystemEventTable" 
                       } 
                    } 
                  ]
                }
              },
              "SinksConfig": { 
                 "Sink": [ 
                    { 
                    "name": "AzMonSink", 
                    "AzureMonitor": {} 
                    } 
                 ]
              }
            },
            "StorageAccount": "[variables('storageAccountName')]" 
          },
          "typeHandlerVersion": "1.11" 
        }
      }
    ]
  },
  // end of added code. Be sure that the number and type of brackets match properly when done. 
  {
  "type": "Microsoft.Insights/autoscaleSettings",
  ...
  }

Adicione um dependsOn para a conta de armazenamento para garantir que ela seja criada na ordem correta:

"dependsOn": [
  "[concat('Microsoft.Network/loadBalancers/', variables('loadBalancerName'))]",
  "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]",
  //add this line below
  "[concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]"
]

Crie uma conta de armazenamento se ainda não tiver sido criada no modelo:

"resources": [
  // add this code
  {
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[variables('storageAccountName')]",
    "apiVersion": "2015-05-01-preview",
    "location": "[resourceGroup().location]",
    "properties": {
      "accountType": "Standard_LRS"
    }
  },
  // end added code
  {
    "type": "Microsoft.Network/virtualNetworks",
    "name": "[variables('virtualNetworkName')]",
    ...
  }
]

Salve e feche ambos os arquivos.

Implantar o modelo do Gerenciador de Recursos

Nota

Você deve estar executando a extensão de Diagnóstico do Azure versão 1.5 ou superior e ter a propriedade autoUpgradeMinorVersion: definida como true em seu modelo do Gerenciador de Recursos. 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 do Gerenciador de Recursos, use o Azure PowerShell:

  1. Inicie o PowerShell.

  2. Entre no Azure usando o Login-AzAccount.

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

  4. Defina a assinatura que você criará ou atualize a máquina virtual:

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

     New-AzResourceGroup -Name "VMSSWADtestGrp" -Location "<Azure Region>"
    
  6. Execute os seguintes comandos para implantar a VM:

    Nota

    Se desejar atualizar um conjunto de escala existente, adicione -Mode Incremental ao final do comando.

    New-AzResourceGroupDeployment -Name "VMSSWADTest" -ResourceGroupName "VMSSWADtestGrp" -TemplateFile "<File path of your azuredeploy.JSON file>" -TemplateParameterFile "<File path of your azuredeploy.parameters.JSON file>"
    
  7. Depois que a implantação for bem-sucedida, você deverá encontrar o conjunto de dimensionamento de máquina virtual no portal do Azure. Ele deve emitir métricas para o Azure Monitor.

    Nota

    Você pode encontrar erros em torno do vmSkuSize, selecionado. Nesse caso, volte ao seu arquivo de azuredeploy.json e atualize o valor padrão do parâmetro vmSkuSize . 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 do lado esquerdo, selecione Monitorizar.

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

    Uma captura de tela mostrando o item de menu de métricas na página de menu do Azure Monitor.

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

  5. No menu suspenso de recursos, selecione o conjunto de escala da máquina virtual que você criou.

  6. No menu suspenso namespaces, selecione Convidado da Máquina Virtual.

  7. No menu suspenso de métricas, selecione Memória%Bytes confirmados em uso.

    Uma captura de tela mostrando a seleção de métrica de namespace e agregação para um gráfico de métricas.

Em seguida, você também pode optar por usar as dimensões nessa métrica para representá-la em um gráfico para uma VM específica ou plotar cada VM no conjunto de escalas.

Próximos passos