Použití PowerShellu k povolení Azure Diagnostics na virtuálním počítači s Windows

Azure Diagnostics je funkce v rámci Azure, která umožňuje shromažďování diagnostických dat v nasazené aplikaci. Diagnostické rozšíření můžete použít ke shromažďování diagnostických dat, jako jsou protokoly aplikací nebo čítače výkonu, z virtuálního počítače Azure, na kterém běží Windows.

Pokud používáte model nasazení Resource Manager, povolte rozšíření diagnostiky.

Diagnostické rozšíření můžete povolit při vytváření virtuálního počítače s Windows prostřednictvím modelu nasazení Azure Resource Manager přidáním konfigurace rozšíření do šablony Resource Manager. Viz Vytvoření virtuálního počítače s Windows s monitorováním a diagnostikou pomocí šablony Azure Resource Manager.

Pokud chcete povolit diagnostické rozšíření na existujícím virtuálním počítači vytvořeném prostřednictvím modelu nasazení Resource Manager, můžete použít rutinu PowerShellu Set-AzVMDiagnosticsExtension, jak je znázorněno níže.

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

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

$diagnosticsconfig_path je cesta k souboru, který obsahuje konfiguraci diagnostiky ve formátu XML, jak je popsáno v následující ukázce .

Pokud konfigurační soubor diagnostiky určuje prvek StorageAccount s názvem účtu úložiště, skript Set-AzVMDiagnosticsExtension automaticky nastaví diagnostické rozšíření tak, aby do účtu úložiště odesílala diagnostická data. Aby to fungovalo, musí být účet úložiště ve stejném předplatném jako virtuální počítač.

Pokud se v konfiguraci diagnostiky nezadá žádný účet StorageAccount , musíte do rutiny předat parametr StorageAccountName . Pokud je zadaný parametr StorageAccountName , rutina vždy použije účet úložiště, který je zadaný v parametru, a ne ten, který je zadaný v konfiguračním souboru diagnostiky.

Pokud je účet úložiště diagnostiky v jiném předplatném než virtuální počítač, musíte rutině explicitně předat parametry StorageAccountName a StorageAccountKey . Pokud je účet úložiště diagnostiky ve stejném předplatném, není parametr StorageAccountKey potřeba, protože rutina může při povolování rozšíření diagnostiky automaticky dotazovat a nastavit hodnotu klíče. Pokud je ale účet úložiště diagnostiky v jiném předplatném, nemusí být rutina schopná získat klíč automaticky a vy ho budete muset explicitně zadat prostřednictvím parametru StorageAccountKey .

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

Po povolení diagnostického rozšíření na virtuálním počítači můžete aktuální nastavení získat pomocí rutiny Get-AzVmDiagnosticsExtension .

Get-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name

Rutina vrátí hodnotu PublicSettings, která obsahuje konfiguraci diagnostiky. Podporují se dva druhy konfigurace: WadCfg a xmlCfg. WadCfg je konfigurace JSON a xmlCfg je konfigurace XML v zakódovaném formátu Base64. Pokud chcete kód XML přečíst, musíte ho dekódovat.

$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

K odebrání diagnostického rozšíření z virtuálního počítače je možné použít rutinu Remove-AzVmDiagnosticsExtension .

Pokud používáte model nasazení Classic, povolte rozšíření diagnostiky.

Důležité

Virtuální počítače vytvořené pomocí modelu nasazení Classic budou vyřazeny 1. září 2023.

Pokud používáte prostředky IaaS ze správy služeb Azure, dokončete migraci do 1. září 2023. Doporučujeme, abyste přechod provedli dříve, abyste mohli využívat řadu vylepšení funkcí v Azure Resource Manager.

Další informace najdete v tématu Migrace prostředků IaaS do Azure Resource Manager do 1. září 2023.

Pomocí rutiny Set-AzureVMDiagnosticsExtension můžete na virtuálním počítači povolit diagnostické rozšíření, které vytvoříte prostřednictvím modelu nasazení Classic. Následující příklad ukazuje, jak vytvořit nový virtuální počítač prostřednictvím modelu nasazení Classic s povoleným rozšířením diagnostiky.

$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

Pokud chcete povolit diagnostické rozšíření na existujícím virtuálním počítači vytvořeném prostřednictvím modelu nasazení Classic, nejprve pomocí rutiny Get-AzureVM získejte konfiguraci virtuálního počítače. Pak pomocí rutiny Set-AzureVMDiagnosticsExtension aktualizujte konfiguraci virtuálního počítače tak, aby zahrnovala diagnostické rozšíření. Nakonec použijte aktualizovanou konfiguraci na virtuální počítač pomocí rutiny 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

Ukázková konfigurace diagnostiky

Následující kód XML lze použít pro veřejnou konfiguraci diagnostiky pomocí výše uvedených skriptů. Tato ukázková konfigurace přenese různé čítače výkonu do účtu úložiště diagnostiky spolu s chybami z aplikací, zabezpečení a systémových kanálů v protokolech událostí Windows a všemi chybami z protokolů infrastruktury diagnostiky.

Konfiguraci je potřeba aktualizovat tak, aby zahrnovala následující:

  • Atribut resourceID elementu Metrics je potřeba aktualizovat pomocí ID prostředku virtuálního počítače.

    • ID prostředku je možné vytvořit pomocí následujícího vzoru: /subscriptions/{ID předplatného pro předplatné s virtuálním počítačem}/resourceGroups/{Název skupiny prostředků pro virtuální počítač}/providers/Microsoft.Compute/virtualMachines/{Název virtuálního počítače}.

    • Pokud je například ID předplatného, ve kterém je virtuální počítač spuštěný, 11111111-1111-1111-1111-11111-111111111, název skupiny prostředků je MyResourceGroup a název virtuálního počítače je MyWindowsVM, hodnota resourceID by byla:

      <Metrics resourceId="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyWindowsVM" >
      
    • Další informace o tom, jak se generují metriky na základě konfigurace čítačů výkonu a metrik, najdete v tématu Azure Diagnostics tabulka metrik v úložišti.

  • Element StorageAccount je potřeba aktualizovat názvem účtu úložiště diagnostiky.

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

Další kroky