Udostępnij przez


Włączanie diagnostyki platformy Azure na maszynie wirtualnej z systemem Windows przy użyciu programu PowerShell

Diagnostyka Azure to funkcja platformy Azure, która umożliwia zbieranie danych diagnostycznych w wdrożonej aplikacji. Za pomocą rozszerzenia diagnostycznego można zbierać dane diagnostyczne, takie jak dzienniki aplikacji lub liczniki wydajności z maszyny wirtualnej platformy Azure z systemem Windows.

Ważne

Migrowanie z rozszerzenia diagnostyki platformy Azure

Rozszerzenie Diagnostyka Azure zostanie wycofane 31 marca 2026 r. Po tej dacie firma Microsoft nie będzie już obsługiwać rozszerzenia Diagnostyka Azure.

Aby zapewnić ciągłą obsługę i dostęp do nowych funkcji, należy przeprowadzić migrację z rozszerzeń diagnostyki Azure dla systemu Linux (LAD) i Systemu Windows (WAD) do agenta usługi Azure Monitor, który może zbierać te same dane i wysyłać je do wielu miejsc docelowych, w tym obszarów roboczych usługi Log Analytics, usług Azure Event Hubs i Azure Storage. Usuń usługę LAD lub WAD po skonfigurowaniu agenta usługi Azure Monitor, aby uniknąć duplikowania danych.

Alternatywą dla magazynu jest wysyłanie danych do tabeli z planem pomocniczym w obszarze roboczym usługi Log Analytics w celu uzyskania ekonomicznego rejestrowania.

Aby sprawdzić, które rozszerzenia są zainstalowane na jednej maszynie wirtualnej, wybierz pozycję Rozszerzenia i aplikacje w obszarze Ustawienia na maszynie wirtualnej. Aby przejrzeć rozszerzenia zainstalowane na wszystkich maszynach wirtualnych w subskrypcjach, do których masz dostęp, użyj następującego zapytania w usłudze Azure Resource Graph:

resources
| where type contains "extension"
| extend parsedProperties = parse_json(properties)
| extend publisher = tostring(parsedProperties.publisher)
| project-away parsedProperties
| where publisher == "Microsoft.Azure.Diagnostics"
| distinct id

Spowoduje to wygenerowanie wyników podobnych do następujących:

Zrzut ekranu przedstawiający wyniki przykładowego zapytania usługi Azure Resource Graph.

Uwaga / Notatka

Wypróbuj pomoc maszyny wirtualnej, aby uzyskać szybszą diagnostykę. Zalecamy uruchomienie asysty maszyny wirtualnej dla systemu Windows lub asystenta maszyny wirtualnej dla systemu Linux. Te narzędzia diagnostyczne oparte na skryptach ułatwiają identyfikowanie typowych problemów, które mają wpływ na agenta gościa maszyny wirtualnej platformy Azure i ogólną kondycję maszyny wirtualnej.

Jeśli występują problemy z wydajnością maszyn wirtualnych, przed skontaktowaniem się z pomocą techniczną uruchom te narzędzia.

Włącz rozszerzenie diagnostyczne, jeśli używasz modelu wdrażania przy użyciu usługi Resource Manager

Rozszerzenie diagnostyczne można włączyć podczas tworzenia maszyny wirtualnej z systemem Windows za pomocą modelu wdrażania usługi Azure Resource Manager, dodając konfigurację rozszerzenia do szablonu usługi Resource Manager. Zobacz Tworzenie maszyny wirtualnej z systemem Windows z monitorowaniem i diagnostyką przy użyciu szablonu usługi Azure Resource Manager.

Aby włączyć rozszerzenie diagnostyczne na istniejącej maszynie wirtualnej utworzonej za pomocą modelu wdrażania usługi Resource Manager, możesz użyć polecenia cmdlet Set-AzVMDiagnosticsExtension programu PowerShell, jak pokazano poniżej.

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

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

$diagnosticsconfig_path to ścieżka do pliku zawierającego konfigurację diagnostyki w formacie XML, zgodnie z opisem w poniższym przykładzie .

Jeśli plik konfiguracji diagnostyki określa element StorageAccount z nazwą konta magazynu, wówczas skrypt Set-AzVMDiagnosticsExtension automatycznie ustawi rozszerzenie diagnostyki w celu wysyłania danych diagnostycznych do tego konta magazynu. Aby to działało, konto magazynu musi znajdować się w tej samej subskrypcji co maszyna wirtualna.

Jeśli w konfiguracji diagnostycznej nie określono konta StorageAccount , musisz przekazać parametr StorageAccountName do polecenia cmdlet. Jeśli określono parametr StorageAccountName , polecenie cmdlet zawsze będzie używać konta magazynu określonego w parametrze, a nie tego określonego w pliku konfiguracji diagnostyki.

Jeśli konto magazynu diagnostyki znajduje się w innej subskrypcji niż maszyna wirtualna, musisz jawnie przekazać parametry StorageAccountName i StorageAccountKey do polecenia cmdlet. Parametr StorageAccountKey nie jest wymagany, gdy konto magazynu diagnostyki znajduje się w tej samej subskrypcji, ponieważ polecenie cmdlet może automatycznie wysyłać zapytania i ustawiać wartość klucza podczas włączania rozszerzenia diagnostyki. Jeśli jednak konto magazynu diagnostycznego znajduje się w innej subskrypcji, polecenie cmdlet może nie być w stanie uzyskać klucza automatycznie i należy jawnie określić klucz za pomocą parametru StorageAccountKey .

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

Po włączeniu rozszerzenia diagnostyki na maszynie wirtualnej można uzyskać bieżące ustawienia za pomocą polecenia cmdlet Get-AzVmDiagnosticsExtension .

Get-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name

Polecenie cmdlet zwraca wartość PublicSettings, która zawiera konfigurację diagnostyki. Obsługiwane są dwa rodzaje konfiguracji: WadCfg i xmlCfg. WadCfg jest konfiguracją JSON, a xmlCfg jest konfiguracją XML w formacie zakodowanym w formacie Base64. Aby odczytać kod XML, należy go zdekodować.

$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

Za pomocą polecenia cmdlet Remove-AzVmDiagnosticsExtension można usunąć rozszerzenie diagnostyczne z maszyny wirtualnej.

Włącz rozszerzenie diagnostyczne, jeśli używasz klasycznego modelu wdrażania

Ważne

Maszyny wirtualne utworzone za pomocą klasycznego modelu wdrażania zostaną wycofane 1 września 2023 r.

Jeśli używasz zasobów IaaS z usługi Azure Service Management, wykonaj migrację do 1 września 2023 r. Zachęcamy do przejścia wcześniej, aby skorzystać z wielu ulepszeń funkcji w usłudze Azure Resource Manager.

Aby uzyskać więcej informacji, zobacz Migrowanie zasobów IaaS do usługi Azure Resource Manager do 1 września 2023 r.

Możesz użyć polecenia cmdlet Set-AzureVMDiagnosticsExtension , aby włączyć rozszerzenie diagnostyczne na maszynie wirtualnej utworzonej za pomocą klasycznego modelu wdrażania. W poniższym przykładzie pokazano, jak utworzyć nową maszynę wirtualną za pomocą klasycznego modelu wdrażania z włączonym rozszerzeniem diagnostycznym.

$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

Aby włączyć rozszerzenie diagnostyczne na istniejącej maszynie wirtualnej utworzonej za pomocą klasycznego modelu wdrażania, najpierw użyj polecenia cmdlet Get-AzureVM , aby uzyskać konfigurację maszyny wirtualnej. Następnie zaktualizuj konfigurację maszyny wirtualnej, aby uwzględnić rozszerzenie diagnostyczne przy użyciu polecenia cmdlet Set-AzureVMDiagnosticsExtension . Na koniec zastosuj zaktualizowaną konfigurację do maszyny wirtualnej przy użyciu maszyny wirtualnej 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

Przykładowa konfiguracja diagnostyki

Poniższy kod XML może służyć do publicznej konfiguracji diagnostyki za pomocą powyższych skryptów. Ta przykładowa konfiguracja spowoduje przeniesienie różnych liczników wydajności do konta magazynu diagnostycznego wraz z błędami z kanałów aplikacji, zabezpieczeń i systemu w dziennikach zdarzeń systemu Windows oraz wszelkich błędów z dzienników infrastruktury diagnostycznej.

Aby uwzględnić następujące elementy, należy zaktualizować konfigurację:

  • Atrybut resourceID elementu Metrics musi zostać zaktualizowany przy użyciu identyfikatora zasobu maszyny wirtualnej.

    • Identyfikator zasobu można utworzyć przy użyciu następującego wzorca: "/subscriptions/{identyfikator subskrypcji dla subskrypcji z maszyną wirtualną}/resourceGroups/{Nazwa grupy zasobów dla maszyny wirtualnej}/providers/Microsoft.Compute/virtualMachines/{Nazwa maszyny wirtualnej}".

    • Jeśli na przykład identyfikator subskrypcji dla subskrypcji, w której działa maszyna wirtualna, to 111111111-1111-1111-1111-111111111111, nazwa grupy zasobów dla grupy zasobów to MyResourceGroup, a nazwa maszyny wirtualnej to MyWindowsVM, a wartość identyfikatora zasobu to:

      <Metrics resourceId="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyWindowsVM" >
      
    • Aby uzyskać więcej informacji na temat sposobu generowania metryk na podstawie liczników wydajności i konfiguracji metryk, zobacz Tabelę metryk diagnostyki Azure w magazynie.

  • Element StorageAccount musi zostać zaktualizowany o nazwę konta magazynu diagnostyki.

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

Dalsze kroki