Włączanie Diagnostyka 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 we wdrożonej aplikacji. Rozszerzenie diagnostyczne służy do zbierania danych diagnostycznych, takich 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 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 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 dla istniejącej maszyny wirtualnej utworzonej za pomocą modelu wdrażania 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, skrypt Set-AzVMDiagnosticsExtension automatycznie ustawi rozszerzenie diagnostyczne 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 diagnostyki nie określono konta StorageAccount , należy 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 diagnostycznego 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 diagnostycznego znajduje się w tej samej subskrypcji, ponieważ polecenie cmdlet może automatycznie wykonywać zapytania i ustawiać wartość klucza podczas włączania rozszerzenia diagnostycznego. Jeśli jednak konto magazynu diagnostycznego znajduje się w innej subskrypcji, polecenie cmdlet może nie być w stanie automatycznie pobrać klucza i musisz 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 przy użyciu 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

Polecenie cmdlet Remove-AzVmDiagnosticsExtension może służyć do usunięcia rozszerzenia diagnostycznego z maszyny wirtualnej.

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

Ważne

Maszyny wirtualne utworzone za pośrednictwem 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 dla istniejącej maszyny 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 konfiguracji publicznej diagnostyki z powyższymi skryptami. 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 o identyfikator zasobu maszyny wirtualnej.

    • Identyfikator zasobu można utworzyć przy użyciu następującego wzorca: "/subscriptions/{subscriptions/{subscription ID 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 subskrypcji, w której jest uruchomiona maszyna wirtualna, to 111111111-1111-1111-1111111111111111, nazwa grupy zasobów grupy zasobów to MyResourceGroup, a nazwa maszyny wirtualnej to MyWindowsVM, 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