Menggunakan PowerShell untuk mengaktifkan Diagnostik Azure di komputer virtual yang menjalankan Windows

Diagnostik Azure adalah kemampuan dalam Azure yang memungkinkan pengumpulan data diagnostik pada aplikasi yang disebarkan. Anda dapat menggunakan ekstensi diagnostik untuk mengumpulkan data diagnostik seperti log aplikasi atau penghitung kinerja dari komputer virtual Azure (VM) yang menjalankan Windows.

Mengaktifkan ekstensi diagnostik jika Anda menggunakan model penyebaran Resource Manager

Anda dapat mengaktifkan ekstensi diagnostik saat membuat VM Windows melalui model penyebaran Azure Resource Manager dengan menambahkan konfigurasi ekstensi ke templat Azure Resource Manager. Lihat Membuat komputer virtual Windows dengan pemantauan dan diagnostik menggunakan templat Azure Resource Manager.

Untuk mengaktifkan ekstensi diagnostik pada VM yang sudah ada yang dibuat melalui model penyebaran Resource Manager, Anda dapat menggunakan cmdlet PowerShell Set-AzVMDiagnosticsExtension seperti yang ditunjukkan di bawah ini.

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

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

$diagnosticsconfig_path adalah jalur ke file yang berisi konfigurasi diagnostik di XML, seperti yang dijelaskan dalam sampel di bawah ini.

Jika file konfigurasi diagnostik menentukan elemen StorageAccount dengan nama akun penyimpanan, maka skrip Set-AzVMDiagnosticsExtension akan secara otomatis mengatur ekstensi diagnostik untuk mengirim data diagnostik ke akun penyimpanan tersebut. Agar ini berfungsi, akun penyimpanan harus berada dalam langganan yang sama dengan VM.

Jika tidak ada StorageAccount yang ditentukan dalam konfigurasi diagnostik, maka Anda harus meneruskan parameter StorageAccountName ke cmdlet. Jika parameter StorageAccountName ditentukan, maka cmdlet akan selalu menggunakan akun penyimpanan yang ditentukan dalam parameter dan bukan yang ditentukan dalam file konfigurasi diagnostik.

Jika akun penyimpanan diagnostik berada dalam langganan yang berbeda dari VM, maka Anda harus secara eksplisit meneruskan parameter StorageAccountName dan StorageAccountKey ke cmdlet. Parameter StorageAccountKey tidak diperlukan saat akun penyimpanan diagnostik berada dalam langganan yang sama, karena cmdlet dapat secara otomatis meng-kueri dan set nilai kunci saat mengaktifkan ekstensi diagnostik. Namun, jika akun penyimpanan diagnostik berada dalam langganan yang berbeda, maka cmdlet mungkin tidak dapat mendapatkan kunci secara otomatis dan Anda perlu secara eksplisit menentukan kunci melalui parameter StorageAccountKey.

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

Setelah ekstensi diagnostik diaktifkan pada VM, Anda bisa mendapatkan pengaturan saat ini dengan menggunakan cmdlet Get-AzVmDiagnosticsExtension.

Get-AzVMDiagnosticsExtension -ResourceGroupName $vm_resourcegroup -VMName $vm_name

Cmdlet menghasilkan PublicSettings, yang berisi konfigurasi diagnostik. Ada dua jenis konfigurasi yang didukung, WadCfg dan xmlCfg. WadCfg adalah konfigurasi JSON, dan xmlCfg adalah konfigurasi XML dalam format Base64 yang dikodekan. Untuk membaca XML, Anda perlu mendekodenya.

$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

Cmdlet Remove-AzVmDiagnosticsExtension dapat digunakan untuk menghapus ekstensi diagnostik dari VM.

Aktifkan ekstensi diagnostik jika Anda menggunakan model penyebaran klasik

Penting

VM yang dibuat melalui model penyebaran klasik akan dihentikan pada 1 September 2023.

Jika Anda menggunakan sumber daya IaaS dari Azure Service Management, silakan selesaikan migrasi Anda pada 1 September 2023. Kami mendorong Anda untuk beralih lebih cepat untuk memanfaatkan banyak peningkatan fitur di Azure Resource Manager.

Untuk informasi selengkapnya, lihat Memigrasikan sumber daya IaaS Anda ke Azure Resource Manager pada 1 September 2023.

Anda dapat menggunakan cmdlet Set-AzureVMDiagnosticsExtension untuk mengaktifkan ekstensi diagnostik pada VM yang Anda buat melalui model penyebaran klasik. Contoh berikut menunjukkan cara membuat VM baru melalui model penyebaran klasik dengan ekstensi diagnostik diaktifkan.

$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

Untuk mengaktifkan ekstensi diagnostik pada VM yang sudah ada yang dibuat melalui model penyebaran klasik, pertama-tama gunakan cmdlet Get-AzureVM untuk mendapatkan konfigurasi VM. Kemudian perbarui konfigurasi VM untuk menyertakan ekstensi diagnostik dengan menggunakan cmdlet Set-AzureVMDiagnosticsExtension. Terakhir, terapkan konfigurasi yang diperbarui ke VM dengan menggunakan 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

Sampel konfigurasi diagnostik

XML berikut dapat digunakan untuk konfigurasi publik diagnostik dengan skrip di atas. Konfigurasi sampel ini akan mentransfer berbagai penghitung kinerja ke akun penyimpanan diagnostik, bersama dengan kesalahan dari aplikasi, keamanan, dan saluran sistem di log kejadian Windows dan kesalahan apa pun dari log infrastruktur diagnostik.

Konfigurasi perlu diperbarui untuk menyertakan yang berikut:

  • Atribut resourceID dari elemen Metrik perlu diperbarui dengan ID sumber daya untuk VM.

    • ID sumber daya dapat dibangun dengan menggunakan pola berikut: "/langganan/{ID langganan untuk langganan VM}/resourceGroups/{Nama grup sumber daya untukVM}/penyedia/Microsoft.Compute/virtualMachines/{Nama VM}".

    • Misalnya, jika ID langganan untuk langganan di tempat VM dijalankan 11111111-1111-1111-1111-111111111111, nama grup sumber daya untuk grup sumber daya adalah MyResourceGroup, dan Nama VM adalah MyWindowsVM, maka nilai untuk resourceID adalah:

      <Metrics resourceId="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyWindowsVM" >
      
    • Untuk informasi selengkapnya tentang bagaimana metrik dihasilkan berdasarkan penghitung kinerja dan konfigurasi metrik, lihat tabel metrik Diagnostik Azure di penyimpanan.

  • Elemen StorageAccount perlu diperbarui dengan nama akun penyimpanan diagnostik.

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

Langkah berikutnya