PowerShell gebruiken om Azure Diagnostics in te schakelen op een virtuele machine met Windows

Azure Diagnostics is de mogelijkheid in Azure waarmee diagnostische gegevens kunnen worden verzameld voor een geïmplementeerde toepassing. U kunt de diagnostische extensie gebruiken om diagnostische gegevens te verzamelen, zoals toepassingslogboeken of prestatiemeteritems van een virtuele Azure-machine (VM) waarop Windows wordt uitgevoerd.

Schakel de diagnostische extensie in als u het Resource Manager-implementatiemodel gebruikt

U kunt de extensie voor diagnostische gegevens inschakelen terwijl u een Windows-VM maakt via het Azure Resource Manager-implementatiemodel door de extensieconfiguratie toe te voegen aan de sjabloon Resource Manager. Zie Een virtuele Windows-machine maken met bewaking en diagnostische gegevens met behulp van de sjabloon Azure Resource Manager.

Als u de diagnostische extensie wilt inschakelen op een bestaande VM die is gemaakt via het Resource Manager-implementatiemodel, kunt u de PowerShell-cmdlet Set-AzVMDiagnosticsExtension gebruiken, zoals hieronder wordt weergegeven.

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

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

$diagnosticsconfig_path is het pad naar het bestand dat de diagnostische configuratie in XML bevat, zoals beschreven in het onderstaande voorbeeld .

Als het configuratiebestand voor diagnostische gegevens een StorageAccount-element met een opslagaccountnaam opgeeft, stelt het script Set-AzVMDiagnosticsExtension automatisch de diagnostische extensie in om diagnostische gegevens naar dat opslagaccount te verzenden. Dit werkt alleen als het opslagaccount zich in hetzelfde abonnement bevindt als de VM.

Als er geen StorageAccount is opgegeven in de diagnostische configuratie, moet u de parameter StorageAccountName doorgeven aan de cmdlet. Als de parameter StorageAccountName is opgegeven, gebruikt de cmdlet altijd het opslagaccount dat is opgegeven in de parameter en niet het account dat is opgegeven in het configuratiebestand voor diagnostische gegevens.

Als het opslagaccount voor diagnostische gegevens zich in een ander abonnement dan de VM bevindt, moet u de parameters StorageAccountName en StorageAccountKey expliciet doorgeven aan de cmdlet. De parameter StorageAccountKey is niet nodig wanneer het opslagaccount voor diagnostische gegevens zich in hetzelfde abonnement bevindt, omdat de cmdlet automatisch een query kan uitvoeren en de sleutelwaarde kan instellen bij het inschakelen van de diagnostische extensie. Als het opslagaccount voor diagnostische gegevens zich echter in een ander abonnement bevindt, kan de cmdlet de sleutel mogelijk niet automatisch ophalen en moet u de sleutel expliciet opgeven via de parameter StorageAccountKey .

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

Zodra de extensie voor diagnostische gegevens is ingeschakeld op een VM, kunt u de huidige instellingen ophalen met behulp van de cmdlet Get-AzVmDiagnosticsExtension .

Get-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name

De cmdlet retourneert PublicSettings, die de diagnostische configuratie bevat. Er worden twee soorten configuraties ondersteund: WadCfg en xmlCfg. WadCfg is een JSON-configuratie en xmlCfg is een XML-configuratie in een base64-gecodeerde indeling. Als u de XML wilt lezen, moet u deze decoderen.

$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

De cmdlet Remove-AzVmDiagnosticsExtension kan worden gebruikt om de diagnostische extensie van de VM te verwijderen.

Schakel de diagnostische extensie in als u het klassieke implementatiemodel gebruikt

Belangrijk

VM's die zijn gemaakt via het klassieke implementatiemodel, worden op 1 september 2023 buiten gebruik gesteld.

Als u IaaS-resources van Azure Service Management gebruikt, moet u de migratie uiterlijk 1 september 2023 voltooien. U wordt aangeraden al eerder over te schakelen om te kunnen profiteren van de vele functieverbeteringen in Azure Resource Manager.

Zie Uw IaaS-resources migreren naar Azure Resource Manager uiterlijk 1 september 2023 voor meer informatie.

U kunt de cmdlet Set-AzureVMDiagnosticsExtension gebruiken om een diagnostische extensie in te schakelen op een VM die u maakt via het klassieke implementatiemodel. In het volgende voorbeeld ziet u hoe u een nieuwe virtuele machine maakt via het klassieke implementatiemodel met de diagnostische extensie ingeschakeld.

$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

Als u de diagnostische extensie wilt inschakelen op een bestaande VM die is gemaakt via het klassieke implementatiemodel, gebruikt u eerst de cmdlet Get-AzureVM om de VM-configuratie op te halen. Werk vervolgens de VM-configuratie bij met de diagnostische extensie met behulp van de cmdlet Set-AzureVMDiagnosticsExtension . Pas ten slotte de bijgewerkte configuratie toe op de VM met behulp van 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

Configuratie van voorbeelddiagnose

De volgende XML kan worden gebruikt voor de openbare configuratie van diagnostische gegevens met de bovenstaande scripts. Met deze voorbeeldconfiguratie worden verschillende prestatiemeteritems overgedragen naar het opslagaccount voor diagnostische gegevens, samen met fouten van de toepassings-, beveiligings- en systeemkanalen in de Windows-gebeurtenislogboeken en eventuele fouten uit de diagnostische infrastructuurlogboeken.

De configuratie moet worden bijgewerkt met het volgende:

  • Het kenmerk resourceID van het element Metrics moet worden bijgewerkt met de resource-id voor de VM.

    • De resource-id kan worden samengesteld met behulp van het volgende patroon: "/subscriptions/{subscription ID for the subscription with the VM}/resourceGroups/{The resourcegroup name for the VM}/providers/Microsoft.Compute/virtualMachines/{The VM Name}".

    • Als de abonnements-id voor het abonnement waarop de VM wordt uitgevoerd bijvoorbeeld 1111111-1111-1111-11111-111111111111 is, de naam van de resourcegroep voor de resourcegroep Is MyResourceGroup en de VM-naam MyWindowsVM, is de waarde voor resourceID :

      <Metrics resourceId="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyWindowsVM" >
      
    • Zie voor meer informatie over hoe metrische gegevens worden gegenereerd op basis van de configuratie van prestatiemeteritems en metrische gegevens Azure Diagnostics tabel met metrische gegevens in opslag.

  • Het element StorageAccount moet worden bijgewerkt met de naam van het opslagaccount voor diagnostische gegevens.

    <?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>
    

Volgende stappen