Używanie programu PowerShell do uruchamiania narzędzia Diagnostyka Azure na maszynie wirtualnej systemu Windows

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.

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 Diagnostyka Azure tabelę metryk 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>
    

Następne kroki