Partilhar via


Utilizar o PowerShell para ativar Diagnóstico do Azure numa máquina virtual com o Windows

Diagnóstico do Azure é a capacidade no Azure que permite a recolha de dados de diagnóstico numa aplicação implementada. Pode utilizar a extensão de diagnóstico para recolher dados de diagnóstico, como registos de aplicações ou contadores de desempenho de uma máquina virtual (VM) do Azure com o Windows.

Ative a extensão de diagnóstico se utilizar o modelo de implementação Resource Manager

Pode ativar a extensão de diagnóstico enquanto cria uma VM do Windows através do modelo de implementação do Azure Resource Manager ao adicionar a configuração da extensão ao modelo de Resource Manager. Veja Create a Windows virtual machine with monitoring and diagnostics by using the Azure Resource Manager template (Criar uma máquina virtual do Windows com monitorização e diagnósticos com o modelo do Azure Resource Manager).

Para ativar a extensão de diagnóstico numa VM existente criada através do modelo de implementação Resource Manager, pode utilizar o cmdlet Set-AzVMDiagnosticsExtension do PowerShell, conforme mostrado abaixo.

$vm_resourcegroup = "myvmresourcegroup"
$vm_name = "myvm"
$diagnosticsconfig_path = "DiagnosticsPubConfig.xml"

Set-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name -DiagnosticsConfigurationPath $diagnosticsconfig_path

$diagnosticsconfig_path é o caminho para o ficheiro que contém a configuração de diagnóstico no XML, conforme descrito no exemplo abaixo.

Se o ficheiro de configuração de diagnóstico especificar um elemento StorageAccount com um nome de conta de armazenamento, o script Set-AzVMDiagnosticsExtension irá definir automaticamente a extensão de diagnóstico para enviar dados de diagnóstico para essa conta de armazenamento. Para que isto funcione, a conta de armazenamento tem de estar na mesma subscrição que a VM.

Se não tiver sido especificado nenhum StorageAccount na configuração de diagnóstico, terá de transmitir o parâmetro StorageAccountName para o cmdlet . Se o parâmetro StorageAccountName for especificado, o cmdlet utilizará sempre a conta de armazenamento especificada no parâmetro e não a especificada no ficheiro de configuração de diagnóstico.

Se a conta de armazenamento de diagnósticos estiver numa subscrição diferente da VM, terá de transmitir explicitamente os parâmetros StorageAccountName e StorageAccountKey para o cmdlet . O parâmetro StorageAccountKey não é necessário quando a conta de armazenamento de diagnósticos está na mesma subscrição, uma vez que o cmdlet pode consultar e definir automaticamente o valor da chave ao ativar a extensão de diagnóstico. No entanto, se a conta de armazenamento de diagnóstico estiver numa subscrição diferente, o cmdlet poderá não conseguir obter a chave automaticamente e terá de especificar explicitamente a chave através do parâmetro StorageAccountKey .

Set-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name -DiagnosticsConfigurationPath $diagnosticsconfig_path -StorageAccountName $diagnosticsstorage_name -StorageAccountKey $diagnosticsstorage_key

Assim que a extensão de diagnóstico estiver ativada numa VM, pode obter as definições atuais com o cmdlet Get-AzVmDiagnosticsExtension .

Get-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name

O cmdlet devolve PublicSettings, que contém a configuração de diagnóstico. Existem dois tipos de configuração suportados, WadCfg e xmlCfg. WadCfg é uma configuração JSON e xmlCfg é uma configuração XML num formato codificado em Base64. Para ler o XML, tem de o descodificar.

$publicsettings = (Get-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name).PublicSettings
$encodedconfig = (ConvertFrom-Json -InputObject $publicsettings).xmlCfg
$xmlconfig = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encodedconfig))
Write-Host $xmlconfig

O cmdlet Remove-AzVmDiagnosticsExtension pode ser utilizado para remover a extensão de diagnóstico da VM.

Ativar a extensão de diagnóstico se utilizar o modelo de implementação clássica

Importante

As VMs criadas através do modelo de implementação clássica serão descontinuadas a 1 de setembro de 2023.

Se utilizar recursos IaaS da Gestão de Serviços do Azure, conclua a migração até 1 de setembro de 2023. Recomendamos que faça a mudança mais cedo para tirar partido dos vários melhoramentos de funcionalidades no Azure Resource Manager.

Para obter mais informações, veja Migrar os seus recursos IaaS para o Azure Resource Manager até 1 de setembro de 2023.

Pode utilizar o cmdlet Set-AzureVMDiagnosticsExtension para ativar uma extensão de diagnóstico numa VM que cria através do modelo de implementação clássica. O exemplo seguinte mostra como criar uma nova VM através do modelo de implementação clássica com a extensão de diagnóstico ativada.

$VM = New-AzureVMConfig -Name $VM -InstanceSize Small -ImageName $VMImage
$VM = Add-AzureProvisioningConfig -VM $VM -AdminUsername $Username -Password $Password -Windows
$VM = Set-AzureVMDiagnosticsExtension -DiagnosticsConfigurationPath $Config_Path -VM $VM -StorageContext $Storage_Context
New-AzVM -Location $Location -ServiceName $Service_Name -VM $VM

Para ativar a extensão de diagnóstico numa VM existente criada através do modelo de implementação clássica, utilize primeiro o cmdlet Get-AzureVM para obter a configuração da VM. Em seguida, atualize a configuração da VM para incluir a extensão de diagnóstico com o cmdlet Set-AzureVMDiagnosticsExtension . Por fim, aplique a configuração atualizada à VM com Update-AzureVM.

$VM = Get-AzureVM -ServiceName $Service_Name -Name $VM_Name
$VM_Update = Set-AzureVMDiagnosticsExtension  -DiagnosticsConfigurationPath $Config_Path -VM $VM -StorageContext $Storage_Context
Update-AzureVM -ServiceName $Service_Name -Name $VM_Name -VM $VM_Update.VM

Configuração de diagnóstico de exemplo

O XML seguinte pode ser utilizado para a configuração pública de diagnósticos com os scripts acima. Esta configuração de exemplo irá transferir vários contadores de desempenho para a conta de armazenamento de diagnósticos, juntamente com erros da aplicação, segurança e canais de sistema nos registos de eventos do Windows e quaisquer erros dos registos de infraestrutura de diagnóstico.

A configuração tem de ser atualizada para incluir o seguinte:

  • O atributo resourceID do elemento Métricas tem de ser atualizado com o ID de recurso da VM.

    • O ID do recurso pode ser construído com o seguinte padrão: "/subscriptions/{subscription ID da subscrição com a VM}/resourceGroups/{O nome do grupo de recursos para a VM}/providers/Microsoft.Compute/virtualMachines/{O Nome da VM}".

    • Por exemplo, se o ID da subscrição onde a VM está em execução for 11111111-1111-1111-1111-11111111111, o nome do grupo de recursos é MyResourceGroup e o Nome da VM é MyWindowsVM, então o valor para resourceID seria:

      <Metrics resourceId="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyWindowsVM" >
      
    • Para obter mais informações sobre como as métricas são geradas com base nos contadores de desempenho e na configuração de métricas, veja Diagnóstico do Azure tabela de métricas no armazenamento.

  • O elemento StorageAccount tem de ser atualizado com o nome da conta de armazenamento de diagnósticos.

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        <WadCfg>
          <DiagnosticMonitorConfiguration overallQuotaInMB="4096">
            <DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Error"/>
            <PerformanceCounters scheduledTransferPeriod="PT1M">
          <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT15S" unit="Percent">
            <annotation displayName="CPU utilization" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Privileged Time" sampleRate="PT15S" unit="Percent">
            <annotation displayName="CPU privileged time" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% User Time" sampleRate="PT15S" unit="Percent">
            <annotation displayName="CPU user time" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Processor Information(_Total)\Processor Frequency" sampleRate="PT15S" unit="Count">
            <annotation displayName="CPU frequency" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\System\Processes" sampleRate="PT15S" unit="Count">
            <annotation displayName="Processes" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Process(_Total)\Thread Count" sampleRate="PT15S" unit="Count">
            <annotation displayName="Threads" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Process(_Total)\Handle Count" sampleRate="PT15S" unit="Count">
            <annotation displayName="Handles" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Memory\% Committed Bytes In Use" sampleRate="PT15S" unit="Percent">
            <annotation displayName="Memory usage" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Available Bytes" sampleRate="PT15S" unit="Bytes">
            <annotation displayName="Memory available" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Committed Bytes" sampleRate="PT15S" unit="Bytes">
            <annotation displayName="Memory committed" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Commit Limit" sampleRate="PT15S" unit="Bytes">
            <annotation displayName="Memory commit limit" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Pool Paged Bytes" sampleRate="PT15S" unit="Bytes">
            <annotation displayName="Memory paged pool" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Pool Nonpaged Bytes" sampleRate="PT15S" unit="Bytes">
            <annotation displayName="Memory non-paged pool" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\% Disk Time" sampleRate="PT15S" unit="Percent">
            <annotation displayName="Disk active time" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\% Disk Read Time" sampleRate="PT15S" unit="Percent">
            <annotation displayName="Disk active read time" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\% Disk Write Time" sampleRate="PT15S" unit="Percent">
            <annotation displayName="Disk active write time" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Disk Transfers/sec" sampleRate="PT15S" unit="CountPerSecond">
            <annotation displayName="Disk operations" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Disk Reads/sec" sampleRate="PT15S" unit="CountPerSecond">
            <annotation displayName="Disk read operations" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Disk Writes/sec" sampleRate="PT15S" unit="CountPerSecond">
            <annotation displayName="Disk write operations" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Disk Bytes/sec" sampleRate="PT15S" unit="BytesPerSecond">
            <annotation displayName="Disk speed" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Disk Read Bytes/sec" sampleRate="PT15S" unit="BytesPerSecond">
            <annotation displayName="Disk read speed" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Disk Write Bytes/sec" sampleRate="PT15S" unit="BytesPerSecond">
            <annotation displayName="Disk write speed" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Avg. Disk Queue Length" sampleRate="PT15S" unit="Count">
            <annotation displayName="Disk average queue length" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Avg. Disk Read Queue Length" sampleRate="PT15S" unit="Count">
            <annotation displayName="Disk average read queue length" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\PhysicalDisk(_Total)\Avg. Disk Write Queue Length" sampleRate="PT15S" unit="Count">
            <annotation displayName="Disk average write queue length" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\LogicalDisk(_Total)\% Free Space" sampleRate="PT15S" unit="Percent">
            <annotation displayName="Disk free space (percentage)" locale="en-us"/>
          </PerformanceCounterConfiguration>
          <PerformanceCounterConfiguration counterSpecifier="\LogicalDisk(_Total)\Free Megabytes" sampleRate="PT15S" unit="Count">
            <annotation displayName="Disk free space (MB)" locale="en-us"/>
          </PerformanceCounterConfiguration>
        </PerformanceCounters>
        <Metrics resourceId="(Update with resource ID for the VM)" >
            <MetricAggregation scheduledTransferPeriod="PT1H"/>
            <MetricAggregation scheduledTransferPeriod="PT1M"/>
        </Metrics>
        <WindowsEventLog scheduledTransferPeriod="PT1M">
          <DataSource name="Application!*[System[(Level = 1 or Level = 2)]]"/>
          <DataSource name="Security!*[System[(Level = 1 or Level = 2)]"/>
          <DataSource name="System!*[System[(Level = 1 or Level = 2)]]"/>
        </WindowsEventLog>
          </DiagnosticMonitorConfiguration>
        </WadCfg>
        <StorageAccount>(Update with diagnostics storage account name)</StorageAccount>
    </PublicConfig>
    

Passos seguintes