Menggunakan pemantauan dan diagnostik dengan Windows VM dan templat Azure Resource Manager

Ekstensi Diagnostik Azure menyediakan kemampuan pemantauan dan diagnostik pada komputer virtual Azure berbasis Windows. Anda dapat mengaktifkan kemampuan ini pada komputer virtual dengan menyertakan ekstensi sebagai bagian dari templat Azure Resource Manager. Lihat Menulis Templat Azure Resource Manager dengan Ekstensi VM untuk informasi selengkapnya tentang menyertakan ekstensi apa pun sebagai bagian dari templat komputer virtual. Artikel ini menjelaskan cara menambahkan ekstensi Diagnostik Azure ke templat komputer virtual windows.

Menambahkan ekstensi Diagnostik Azure ke definisi sumber daya VM

Untuk mengaktifkan ekstensi diagnostik pada Komputer Virtual Windows, Anda perlu menambahkan ekstensi sebagai sumber daya VM di templat Azure Resource Manager.

Untuk Komputer Virtual berbasis Resource Manager sederhana, tambahkan konfigurasi ekstensi ke array sumber daya untuk Komputer Virtual:

"resources": [
    {
        "name": "Microsoft.Insights.VMDiagnosticsSettings",
        "type": "extensions",
        "location": "[resourceGroup().location]",
        "apiVersion": "2015-06-15",
        "dependsOn": [
            "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
        ],
        "tags": {
            "displayName": "AzureDiagnostics"
        },
        "properties": {
            "publisher": "Microsoft.Azure.Diagnostics",
            "type": "IaaSDiagnostics",
            "typeHandlerVersion": "1.5",
            "autoUpgradeMinorVersion": true,
            "settings": {
                "xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), variables('vmName'), variables('wadcfgxend')))]",
                "storageAccount": "[parameters('existingdiagnosticsStorageAccountName')]"
            },
            "protectedSettings": {
                "storageAccountName": "[parameters('existingdiagnosticsStorageAccountName')]",
                "storageAccountKey": "[listkeys(variables('accountid'), '2015-05-01-preview').key1]",
                "storageAccountEndPoint": "https://core.windows.net"
            }
        }
    }
]

Konvensi umum lainnya adalah menambahkan konfigurasi ekstensi pada node sumber daya root templat alih-alih mendefinisikannya di node sumber daya komputer virtual. Dengan pendekatan ini, Anda harus secara eksplisit menentukan hubungan hierarkis antara ekstensi dan komputer virtual dengan nilai nama dan tipe. Contohnya:

"name": "[concat(variables('vmName'),'Microsoft.Insights.VMDiagnosticsSettings')]",
"type": "Microsoft.Compute/virtualMachines/extensions",

Ekstensi ini selalu dikaitkan dengan komputer virtual, Anda dapat secara langsung mendefinisikannya di node sumber daya komputer virtual secara langsung atau mendefinisikannya di tingkat dasar dan menggunakan konvensi penamaan hierarkis untuk mengaitkannya dengan komputer virtual.

Untuk Virtual Machine Scale Sets konfigurasi ekstensi ditentukan di properti extensionProfile dari VirtualMachineProfile.

Properti penerbit dengan nilai Microsoft.Azure.Diagnostics dan properti tipe dengan nilai IaaSDiagnostics secara unik mengidentifikasi ekstensi Diagnostik Azure.

Nilai properti nama dapat digunakan untuk merujuk ke ekstensi dalam grup sumber daya. Mengaturnya secara khusus ke Microsoft.Insights.VMDiagnosticsSettings memungkinkannya untuk diidentifikasi dengan mudah oleh portal Microsoft Azure dengan memastikan bahwa bagan pemantauan muncul dengan benar di portal Microsoft Azure.

TypeHandlerVersion menentukan versi ekstensi yang ingin Anda gunakan. Mengatur versi minor autoUpgradeMinorVersion ke true memastikan bahwa Anda mendapatkan versi Minor terbaru dari ekstensi yang tersedia. Sangat disarankan agar Anda selalu mengatur autoUpgradeMinorVersion agar selalu benar sehingga Anda selalu dapat menggunakan ekstensi diagnostik terbaru yang tersedia dengan semua fitur baru dan perbaikan bug.

Elemen pengaturan berisi properti konfigurasi untuk ekstensi yang dapat diatur dan dibaca kembali dari ekstensi (kadang-kadang disebut sebagai konfigurasi publik). Properti xmlcfg berisi konfigurasi berbasis xml untuk log diagnostik, penghitung kinerja, dll. yang dikumpulkan oleh agen diagnostik. Lihat Skema Konfigurasi Diagnostik untuk informasi selengkapnya tentang skema xml itu sendiri. Praktik umumnya adalah menyimpan konfigurasi xml yang sebenarnya sebagai variabel di templat Azure Resource Manager, lalu menggabungkan dan mengkodekan base64 untuk menetapkan nilai xmlcfg. Lihat bagian tentang variabel konfigurasi diagnostik untuk memahami lebih lanjut tentang cara menyimpan xml dalam variabel. Properti storageAccount menentukan nama akun penyimpanan tempat data diagnostik ditransfer.

Properti dalam protectedSettings (terkadang disebut sebagai konfigurasi privat) dapat diatur tetapi tidak dapat dibaca kembali setelah diatur. Sifat hanya-tulis dari protectedSettings membuatnya berguna untuk menyimpan rahasia seperti kunci akun penyimpanan tempat data diagnostik ditulis.

Menentukan akun penyimpanan diagnostik sebagai parameter

Cuplikan json ekstensi diagnostik di atas mengasumsikan dua parameter existingdiagnosticsStorageAccountName dan existingdiagnosticsStorageResourceGroup untuk menentukan akun penyimpanan diagnostik tempat data diagnostik disimpan. Menentukan akun penyimpanan diagnostik sebagai parameter memudahkan untuk mengubah akun penyimpanan diagnostik di berbagai lingkungan, misalnya Anda mungkin ingin menggunakan akun penyimpanan diagnostik yang berbeda untuk pengujian dan akun yang berbeda lagi untuk penerapan produksi Anda.

"existingdiagnosticsStorageAccountName": {
    "type": "string",
    "metadata": {
"description": "The name of an existing storage account to which diagnostics data is transfered."
    }
},
"existingdiagnosticsStorageResourceGroup": {
    "type": "string",
    "metadata": {
"description": "The resource group for the storage account specified in existingdiagnosticsStorageAccountName"
    }
}

Praktik terbaik adalah menentukan akun penyimpanan diagnostik dalam grup sumber daya yang berbeda dari grup sumber daya untuk komputer virtual. Grup sumber daya dapat dianggap sebagai unit penerapan dengan masa pakainya sendiri, komputer virtual dapat diterapkan dan diterapkan ulang karena pembaruan konfigurasi baru dibuat untuknya tetapi Anda mungkin ingin terus menyimpan data diagnostik di akun penyimpanan yang sama di seluruh penerapan komputer virtual tersebut. Memiliki akun penyimpanan di sumber daya yang berbeda memungkinkan akun penyimpanan untuk menerima data dari berbagai penerapan komputer virtual sehingga mudah untuk memecahkan masalah di berbagai versi.

Catatan

Jika Anda membuat templat komputer virtual Windows dari Visual Studio, akun penyimpanan default mungkin diatur untuk menggunakan akun penyimpanan yang sama di mana komputer virtual VHD diunggah. Hal ini untuk menyederhanakan pengaturan awal VM. Faktor ulang templat untuk menggunakan akun penyimpanan lain yang dapat diteruskan sebagai parameter.

Variabel konfigurasi diagnostik

Cuplikan json ekstensi diagnostik sebelumnya mendefinisikan variabel accountid untuk menyederhanakan cara mendapatkan kunci akun penyimpanan untuk penyimpanan diagnostik:

"accountid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/',parameters('existingdiagnosticsStorageResourceGroup'), '/providers/','Microsoft.Storage/storageAccounts/', parameters('existingdiagnosticsStorageAccountName'))]"

Properti xmlcfg untuk ekstensi diagnostik didefinisikan menggunakan beberapa variabel yang disatukan bersama-sama. Nilai variabel ini ada di xml sehingga mereka perlu dikeluarkan dengan benar saat mengatur variabel json.

Contoh berikut menjelaskan xml konfigurasi diagnostik yang mengumpulkan penghitung kinerja tingkat sistem standar bersama dengan beberapa log peristiwa windows dan log infrastruktur diagnostik. Nilai ini telah dikeluarkan dan diformat dengan benar sehingga konfigurasi dapat langsung ditempelkan ke bagian variabel templat Anda. Lihat Skema Konfigurasi Diagnostik untuk contoh xml konfigurasi yang lebih dapat dibaca manusia.

"wadlogs": "<WadCfg> <DiagnosticMonitorConfiguration overallQuotaInMB=\"4096\" xmlns=\"http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration\"> <DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter=\"Error\"/> <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>",
"wadperfcounters1": "<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=\"\\PhysicalDisk(_Total)\\% Disk Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk active time\" locale=\"en-us\"/></PerformanceCounterConfiguration>",
"wadperfcounters2": "<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=\"\\LogicalDisk(_Total)\\% Free Space\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk free space (percentage)\" locale=\"en-us\"/></PerformanceCounterConfiguration></PerformanceCounters>",
"wadcfgxstart": "[concat(variables('wadlogs'), variables('wadperfcounters1'), variables('wadperfcounters2'), '<Metrics resourceId=\"')]",
"wadmetricsresourceid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name , '/providers/', 'Microsoft.Compute/virtualMachines/')]",
"wadcfgxend": "\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/><MetricAggregation scheduledTransferPeriod=\"PT1M\"/></Metrics></DiagnosticMonitorConfiguration></WadCfg>"

Node xml definisi Metrik dalam konfigurasi di atas adalah elemen konfigurasi penting karena menentukan bagaimana penghitung kinerja yang ditentukan sebelumnya dalam xml dalam node PerformanceCounter dikumpulkan dan disimpan.

Penting

Metrik ini mendorong bagan dan peringatan pemantauan di portal Microsoft Azure. Node Metrik dengan resourceID dan MetricAggregation harus disertakan dalam konfigurasi diagnostik untuk VM Anda jika Anda ingin melihat data pemantauan VM di portal Microsoft Azure.

Contoh berikut memperlihatkan xml untuk definisi metrik:

<Metrics resourceId="/subscriptions/subscription().subscriptionId/resourceGroups/resourceGroup().name/providers/Microsoft.Compute/virtualMachines/vmName">
    <MetricAggregation scheduledTransferPeriod="PT1H"/>
    <MetricAggregation scheduledTransferPeriod="PT1M"/>
</Metrics>

Atribut resourceID secara unik mengidentifikasi komputer virtual dalam langganan Anda. Pastikan untuk menggunakan fungsi subscription() dan resourceGroup() sehingga templat secara otomatis memperbarui nilai tersebut berdasarkan grup langganan dan sumber daya yang Anda sebarkan.

Jika Anda membuat beberapa Virtual Machines dalam perulangan, Anda harus mengisi nilai resourceID dengan fungsi copyIndex() untuk membedakan setiap VM dengan benar. Nilai xmlCfg dapat diperbarui untuk mendukung ini sebagai berikut:

"xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), concat(parameters('vmNamePrefix'), copyindex()), variables('wadcfgxend')))]",

Nilai MetricAggregation PT1M dan PT1H masing-masing menandakan agregasi selama satu menit dan agregasi selama satu jam.

Tabel WADMetrics dalam penyimpanan

Konfigurasi Metrik di atas menghasilkan tabel di akun penyimpanan diagnostik Anda dengan konvensi penamaan berikut:

  • WADMetrics: Awalan standar untuk semua tabel WADMetrics
  • PT1H atau PT1M: Menandakan bahwa tabel berisi data agregat lebih dari 1 jam atau 1 menit
  • P10D: Menandakan tabel berisi data selama 10 hari sejak tabel mulai mengumpulkan data
  • V2S: Konstanta string
  • yyyymmdd: Tanggal di mana tabel mulai mengumpulkan data

Contoh: WADMetricsPT1HP10DV2S20151108 berisi data metrik yang dikumpulkan selama satu jam selama 10 hari mulai dari 11-Nov-2015

Setiap tabel WADMetrics berisi kolom berikut:

  • PartitionKey: Kunci partisi dibangun berdasarkan nilai resourceID untuk mengidentifikasi sumber daya VM secara unik. Misalnya: 002Fsubscriptions:<subscriptionID>:002FresourceGroups:002F<ResourceGroupName>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmName>
  • RowKey: Mengikuti format <Descending time tick>:<Performance Counter Name>. Perhitungan detik waktu menurun adalah detik waktu maksimum dikurangi waktu awal periode agregasi. Misalnya jika periode sampel dimulai pada 10-Nov-2015 dan 00:00Hrs UTC maka perhitungannya adalah: DateTime.MaxValue.Ticks - (new DateTime(2015,11,10,0,0,0,DateTimeKind.Utc).Ticks). Untuk performa byte memori yang tersedia, penghitung kunci baris terlihat seperti: 2519551871999999999__:005CMemory:005CAvailable:0020Bytes
  • CounterName: Adalah nama penghitung kinerja. Ini cocok dengan counterSpecifier yang ditentukan dalam konfigurasi xml.
  • Maksimum: Nilai maksimum penghitung kinerja selama periode agregasi.
  • Minimum: Nilai minimum penghitung kinerja selama periode agregasi.
  • Total: Jumlah semua nilai penghitung kinerja yang dilaporkan selama periode agregasi.
  • Hitung: Jumlah total nilai yang dilaporkan untuk penghitung kinerja.
  • Rata-rata: Nilai rata-rata (total/hitungan) penghitung kinerja selama periode agregasi.

Langkah berikutnya