PowerShell gebruiken voor het inschakelen van Azure Diagnostics in een virtuele machine met Windows
Azure Diagnostics is de mogelijkheid binnen Azure waarmee het verzamelen van diagnostische gegevens in een geïmplementeerde toepassing mogelijk is. 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 diagnostische extensie inschakelen terwijl u een Windows-VM maakt via het Azure Resource Manager-implementatiemodel door de extensieconfiguratie toe te voegen aan de Resource Manager-sjabloon. Zie Een virtuele Windows-machine maken met bewaking en diagnostische gegevens met behulp van de Azure Resource Manager-sjabloon.
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 de naam van een opslagaccount opgeeft, wordt met het script Set-AzVMDiagnosticsExtension automatisch de diagnostische extensie ingesteld om diagnostische gegevens naar dat opslagaccount te verzenden. Dit werkt alleen als het opslagaccount zich in hetzelfde abonnement bevindt als de virtuele machine.
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 opslagaccount dat is opgegeven in het configuratiebestand voor diagnostische gegevens.
Als het diagnostische opslagaccount zich in een ander abonnement bevindt dan de virtuele machine, moet u expliciet de parameters StorageAccountName en StorageAccountKey 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 diagnostische opslagaccount 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 diagnostische extensie is ingeschakeld op een virtuele machine, 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 zijn twee soorten configuraties die worden ondersteund, WadCfg en xmlCfg. WadCfg is JSON-configuratie en xmlCfg is XML-configuratie in een met 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 VIRTUELE machine te verwijderen.
Schakel de diagnostische extensie in als u het klassieke implementatiemodel gebruikt
Belangrijk
Virtuele machines die zijn gemaakt via het klassieke implementatiemodel, worden op 1 september 2023 buiten gebruik gesteld.
Als u IaaS-resources van Azure Service Management gebruikt, voltooit u uw migratie op 1 september 2023. 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 op 1 september 2023 voor meer informatie.
U kunt de cmdlet Set-AzureVMDiagnosticsExtension gebruiken om een diagnostische extensie in te schakelen op een virtuele machine die u maakt via het klassieke implementatiemodel. In het volgende voorbeeld ziet u hoe u een nieuwe VIRTUELE machine maakt via het klassieke implementatiemodel, waarbij de diagnostische extensie is 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 om de diagnostische extensie op te nemen met behulp van de cmdlet Set-AzureVMDiagnosticsExtension . Pas ten slotte de bijgewerkte configuratie toe op de VIRTUELE machine 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
Voorbeeldconfiguratie van diagnostische gegevens
De volgende XML kan worden gebruikt voor de openbare configuratie voor diagnostische gegevens met de bovenstaande scripts. Deze voorbeeldconfiguratie brengt verschillende prestatiemeteritems over naar het diagnostische opslagaccount, samen met fouten van de toepassing, beveiliging en systeemkanalen in de Windows-gebeurtenislogboeken en eventuele fouten uit de logboeken van de diagnostische infrastructuur.
De configuratie moet worden bijgewerkt om het volgende op te nemen:
Het kenmerk resourceID van het element Metrische gegevens moet worden bijgewerkt met de resource-id voor de VIRTUELE machine.
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 11111111-1111-1111-1111-1111111 is, is de resourcegroepnaam voor de resourcegroep MyResourceGroup en de naam van de VM MyWindowsVM, dan is de waarde voor resourceID :
<Metrics resourceId="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyWindowsVM" >
Zie de tabel met metrische gegevens van Azure Diagnostics in de opslag voor meer informatie over hoe metrische gegevens worden gegenereerd op basis van de configuratie van prestatiemeteritems en metrische gegevens.
Het Element StorageAccount moet worden bijgewerkt met de naam van het diagnostische opslagaccount.
<?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
- Zie Diagnostische gegevens inschakelen in Azure Cloud Services en virtuele machines voor aanvullende richtlijnen over het gebruik van de functie Diagnostische gegevens van Azure en andere technieken voor het oplossen van problemen.
- In het schema voor diagnostische configuraties worden de verschillende OPTIES voor XML-configuraties voor de diagnostische extensie uitgelegd.