Agregasi dan pengumpulan peristiwa menggunakan Windows Azure Diagnostics

Ketika Anda menjalankan kluster Azure Service Fabric, ada baiknya untuk mengumpulkan log dari semua node di lokasi pusat. Memiliki log di lokasi pusat membantu Anda menganalisis dan memecahkan masalah di kluster Anda, atau masalah dalam aplikasi dan layanan yang berjalan di kluster tersebut.

Salah satu cara untuk mengunggah dan mengumpulkan log adalah dengan menggunakan ekstensi Windows Azure Diagnostics (WAD), yang mengunggah log ke Azure Storage, dan juga memiliki opsi untuk mengirim log ke Azure Application Insights atau Azure Event Hubs. Anda juga dapat menggunakan proses eksternal untuk membaca peristiwa dari penyimpanan dan menempatkannya di produk platform analisis, seperti log Azure Monitor atau solusi penguraian log lainnya.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Prasyarat

Alat berikut ini digunakan dalam artikel ini:

Peristiwa platform Service Fabric

Service Fabric menyiapkan Anda dengan beberapa saluran pengelogan out-of-the-box, dan saluran berikut telah dikonfigurasi sebelumnya dengan ekstensi untuk mengirim data pemantauan dan diagnostik ke tabel penyimpanan atau di tempat lain:

Menyebarkan ekstensi Diagnostik melalui portal

Langkah pertama dalam mengumpulkan log adalah menyebarkan ekstensi Diagnostik pada skala mesin virtual set node di kluster Service Fabric. Ekstensi Diagnostik mengumpulkan log pada setiap VM dan mengunggahnya ke akun penyimpanan yang Anda tentukan. Langkah-langkah berikut menguraikan cara menyelesaikan ini untuk kluster baru dan yang sudah ada melalui portal Microsoft Azure dan templat Azure Resource Manager.

Menyebarkan ekstensi Diagnostik sebagai bagian dari pembuatan kluster melalui portal Microsoft Azure

Saat membuat kluster, dalam langkah konfigurasi kluster, perluas pengaturan opsional dan pastikan diagnostik diatur ke Nyala (pengaturan default).

Azure Diagnostics settings in the portal for cluster creation

Kami sangat menyarankan Anda mengunduh templat sebelum mengklik Buat di langkah terakhir. Untuk detailnya, lihat Menyiapkan kluster Service Fabric menggunakan templat Azure Resource Manager. Anda memerlukan templat untuk membuat perubahan pada saluran apa (tercantum di atas) Anda mengumpulkan data.

Cluster Template

Sekarang, setelah Anda menggabungkan peristiwa di Penyimpanan Azure, siapkan log Azure Monitor untuk mendapatkan wawasan dan kueri di portal log Azure Monitor

Catatan

Saat ini tidak ada cara untuk memfilter atau merawat peristiwa yang dikirim ke tabel. Jika Anda tidak menerapkan proses untuk menghapus peristiwa dari tabel, tabel akan terus bertambah (batas defaultnya adalah 50 GB). Petunjuk tentang cara mengubahnya lebih lanjut di bawah ini pada artikel ini. Selain itu, ada contoh layanan perawatan data yang berjalan dalam sampel Watchdog, dan disarankan agar Anda menulisnya untuk diri Anda sendiri juga, kecuali ada alasan yang bisa diterima bagi Anda untuk menyimpan log di luar jangka waktu 30 atau 90 hari.

Menyebarkan ekstensi Diagnostik melalui Azure Resource Manager

Membuat kluster dengan ekstensi diagnostik

Untuk membuat kluster menggunakan Resource Manager, Anda perlu menambahkan konfigurasi Diagnostik JSON ke templat Resource Manager lengkap. Kami menyediakan contoh templat Manajer Sumber Daya kluster lima VM dengan konfigurasi Diagnostik yang ditambahkan ke dalamnya sebagai bagian dari sampel templat Resource Manager kami. Anda dapat melihatnya di lokasi ini di galeri Sampel Azure: Kluster lima-node dengan sampel templat Manajer Sumber Daya Diagnostik.

Untuk melihat pengaturan Diagnostik di templat Resource Manager, buka file azuredeploy.json dan cari IaaSDiagnostics. Untuk membuat kluster menggunakan templat ini, pilih tombol Sebarkan ke Azure yang tersedia di link sebelumnya.

Atau, Anda dapat mengunduh sampel Resource Manager, membuat perubahan, dan membuat kluster dengan templat yang dimodifikasi menggunakan perintah New-AzResourceGroupDeployment di jendela Azure PowerShell. Lihat kode berikut untuk parameter yang Anda berikan ke perintah. Untuk informasi terperinci tentang cara menggunakan grup sumber daya menggunakan PowerShell, lihat artikel Menerapkan grup sumber daya dengan templat Azure Resource Manager.

Menambahkan ekstensi diagnostik ke kluster yang ada

Jika Anda memiliki kluster yang sudah ada yang tidak memiliki Diagnostik yang disebarkan, Anda dapat menambahkan atau memperbaruinya melalui templat kluster. Ubah templat Resource Manager yang digunakan untuk membuat kluster yang ada atau unduh templat dari portal seperti dijelaskan di awal. Ubah template.json dengan melakukan tugas berikut:

Tambahkan sumber daya penyimpanan baru ke templat dengan menambahkan ke bagian sumber daya.

{
	"apiVersion": "2018-07-01",
	"type": "Microsoft.Storage/storageAccounts",
	"name": "[parameters('applicationDiagnosticsStorageAccountName')]",
	"location": "[parameters('computeLocation')]",
	"sku": {
	"name": "[parameters('applicationDiagnosticsStorageAccountType')]"
	"tier": "standard"
  },
	"tags": {
	"resourceType": "Service Fabric",
	"clusterName": "[parameters('clusterName')]"
  }
},

Selanjutnya, tambahkan ke bagian parameter tepat setelah definisi akun penyimpanan, antara supportLogStorageAccountName. Ganti nama akun penyimpanan teks tempat penampung di sini dengan nama akun penyimpanan yang Anda inginkan.

    "applicationDiagnosticsStorageAccountType": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "Replication option for the application diagnostics storage account"
      }
    },
    "applicationDiagnosticsStorageAccountName": {
      "type": "string",
      "defaultValue": "**STORAGE ACCOUNT NAME GOES HERE**",
      "metadata": {
        "description": "Name for the storage account that contains application diagnostics data from the cluster"
      }
    },

Selanjutnya, perbarui bagian file VirtualMachineProfile template.json dengan menambahkan kode berikut dalam array ekstensi. Pastikan untuk menambahkan koma di awal atau akhir, tergantung di mana koma dimasukkan.

{
    "name": "[concat(parameters('vmNodeType0Name'),'_Microsoft.Insights.VMDiagnosticsSettings')]",
    "properties": {
        "type": "IaaSDiagnostics",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
        "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
        "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
        "storageAccountEndPoint": "https://core.windows.net/"
        },
        "publisher": "Microsoft.Azure.Diagnostics",
        "settings": {
        "WadCfg": {
            "DiagnosticMonitorConfiguration": {
            "overallQuotaInMB": "50000",
            "EtwProviders": {
                "EtwEventSourceProviderConfiguration": [
                {
                    "provider": "Microsoft-ServiceFabric-Actors",
                    "scheduledTransferKeywordFilter": "1",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableActorEventTable"
                    }
                },
                {
                    "provider": "Microsoft-ServiceFabric-Services",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableServiceEventTable"
                    }
                }
                ],
                "EtwManifestProviderConfiguration": [
                {
                    "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                },
                {
                    "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                }
                ]
            }
            }
        },
        "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
        },
        "typeHandlerVersion": "1.5"
    }
}

Setelah mengubah file template.json seperti yang dijelaskan, terbitkan ulang templat Resource Manager. Jika templat diekspor, menjalankan file deploy.ps1 akan menerbitkan ulang templat tersebut. Setelah menyebarkan, pastikan provisioningState sudah berhasil.

Tip

Jika Anda akan menyebarkan kontainer ke kluster Anda, aktifkan WAD untuk mengambil statistik docker dengan menambahkan ini ke bagian WadCfg > DiagnosticMonitorConfiguration Anda.

"DockerSources": {
    "Stats": {
        "enabled": true,
        "sampleRate": "PT1M"
    }
},

Memperbarui kuota penyimpanan

Karena tabel yang diisi oleh ekstensi tumbuh hingga kuota tercapai, Anda mungkin ingin mempertimbangkan untuk mengurangi ukuran kuotanya. Nilai defaultnya adalah 50 GB dan dapat dikonfigurasi dalam templat di pada bidang overallQuotaInMB di DiagnosticMonitorConfiguration

"overallQuotaInMB": "50000",

Konfigurasi pengumpulan log

Log dari saluran tambahan juga tersedia untuk koleksi, berikut adalah beberapa konfigurasi paling umum yang dapat Anda buat di templat untuk kluster yang berjalan di Azure.

  • Saluran Operasional - Basis: Diaktifkan secara default, operasi tingkat tinggi yang dilakukan oleh Service Fabric dan kluster, termasuk peristiwa untuk node yang akan datang, aplikasi baru yang sedang digunakan, atau gulung balik peningkatan, dll. Untuk daftar peristiwa, lihat Peristiwa Saluran Operasional.

      "scheduledTransferKeywordFilter": "4611686018427387904"
    
  • Saluran Operasional - Terperinci: Ini mencakup laporan kesehatan dan keputusan load balancing, ditambah semua yang ada di saluran operasional dasar. Peristiwa ini dihasilkan oleh sistem atau kode Anda menggunakan API pelaporan kesehatan atau beban seperti ReportPartitionHealth atau ReportLoad. Untuk melihat peristiwa ini di Penampil Peristiwa Diagnostik Visual Studio, tambahkan "Microsoft-ServiceFabric:4:0x4000000000000008" ke daftar penyedia ETW.

      "scheduledTransferKeywordFilter": "4611686018427387912"
    
  • Saluran Data dan Pesan - Dasar: Log dan peristiwa penting yang dihasilkan dalam pesan (saat ini hanya ReverseProxy) dan jalur data, selain log saluran operasional terperinci. Peristiwa ini adalah kegagalan pemrosesan permintaan dan masalah penting lainnya di ReverseProxy, serta permintaan yang diproses. Ini adalah rekomendasi kami untuk pencatatan yang komprehensif. Untuk melihat peristiwa ini di Penampil Peristiwa Diagnostik Visual Studio, tambahkan "Microsoft-ServiceFabric:4:0x4000000000000010" ke daftar penyedia ETW.

      "scheduledTransferKeywordFilter": "4611686018427387928"
    
  • Data & Saluran Olahpesan - Terperinci: Saluran Verbose yang berisi semua log non-kritis dari data dan pesan dalam kluster dan saluran operasional terperinci. Untuk pemecahan masalah terperinci dari semua peristiwa proksi terbalik, lihat panduan diagnostik proksi terbalik. Untuk melihat peristiwa ini di penampil Peristiwa Diagnostik Visual Studio, tambahkan "Microsoft-ServiceFabric:4:0x4000000000000020" ke daftar penyedia ETW.

      "scheduledTransferKeywordFilter": "4611686018427387944"
    

Catatan

Saluran ini memiliki volume peristiwa yang sangat tinggi, memungkinkan pengumpulan peristiwa dari saluran terperinci ini menghasilkan banyak jejak yang dihasilkan dengan cepat, dan dapat mengonsumsi kapasitas penyimpanan. Hanya aktifkan ini jika benar-benar diperlukan.

Untuk mengaktifkan Saluran Operasional Dasar, rekomendasi kami untuk pencatatan komprehensif dengan jumlah noise paling sedikit, EtwManifestProviderConfiguration di WadCfg ada di templat Anda akan terlihat seperti berikut ini:

  "WadCfg": {
        "DiagnosticMonitorConfiguration": {
          "overallQuotaInMB": "50000",
          "EtwProviders": {
            "EtwEventSourceProviderConfiguration": [
              {
                "provider": "Microsoft-ServiceFabric-Actors",
                "scheduledTransferKeywordFilter": "1",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableActorEventTable"
                }
              },
              {
                "provider": "Microsoft-ServiceFabric-Services",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableServiceEventTable"
                }
              }
            ],
            "EtwManifestProviderConfiguration": [
              {
                "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricSystemEventTable"
                }
              },
              {
                "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                "eventDestination": "ServiceFabricSystemEventTable"
                }
              }
            ]
          }
        }
      },

Mengumpulkan dari saluran EventSource baru

Untuk memperbarui Diagnostik guna mengumpulkan log dari saluran EventSource baru yang mewakili aplikasi baru yang akan Anda terapkan, lakukan langkah yang sama seperti yang dijelaskan sebelumnya guna penyiapan Diagnostik untuk kluster yang ada.

Perbarui bagian EtwEventSourceProviderConfiguration di file template.json guna menambahkan entri untuk saluran EventSource baru sebelum Anda menerapkan pembaruan konfigurasi menggunakan perintah New-AzResourceGroupDeployment PowerShell. Nama sumber peristiwa didefinisikan sebagai bagian dari kode Anda dalam file ServiceEventSource.cs yang dihasilkan oleh Visual Studio.

Misalnya, jika sumber peristiwa Anda bernama My-Eventsource, tambahkan kode berikut untuk menempatkan peristiwa dari My-Eventsource ke dalam tabel bernama MyDestinationTableName.

{
  "provider": "My-Eventsource",
  "scheduledTransferPeriod": "PT5M",
  "DefaultEvents": {
    "eventDestination": "MyDestinationTableName"
  }
}

Untuk mengumpulkan penghitung kinerja atau log kejadian, ubah templat Resource Manager menggunakan contoh yang disediakan dalam Membuat komputer virtual Windows dengan pemantauan dan diagnostik menggunakan templat Azure Resource Manager. Kemudian, terbitkan ulang templat Resource Manager.

Mengumpulkan Penghitung Performa

Untuk mengumpulkan metrik performa dari kluster Anda, tambahkan penghitung kinerja ke "WadCfg > DiagnosticMonitorConfiguration" di templat Resource Manager untuk kluster Anda. Lihat Pemantauan performa dengan WAD untuk langkah-langkah memodifikasi WadCfg Anda untuk mengumpulkan penghitung performa tertentu. Lihat Penghitung Performa Service Fabric untuk penjelasan daftar penghitung kinerja yang kami sarankan untuk dikumpulkan.

Jika Anda menggunakan sink Application Insights, seperti yang dijelaskan di bagian di bawah ini, dan ingin metrik ini ditampilkan di Application Insights, pastikan untuk menambahkan nama sink di bagian "sink" seperti yang ditunjukkan di atas. Ini akan secara otomatis mengirim penghitung kinerja yang dikonfigurasi secara individual ke sumber daya Application Insights Anda.

Kirimkan log ke Application Insights

Mengonfigurasi Application Insights dengan EventFlow

Catatan

Ini hanya berlaku untuk kluster Windows saat ini.

Ada dua cara utama untuk mengirim data dari WAD ke Azure Application Insights, yang dicapai dengan menambahkan sink Application Insights ke konfigurasi WAD, melalui portal Microsoft Azure atau melalui templat Azure Resource Manager.

Menambahkan Kunci Instrumentasi Application Insights saat membuat kluster di portal Microsoft Azure

Adding an AIKey

Saat membuat kluster, jika Diagnostik diaktifkan pada posisi "Aktif", bidang opsional untuk memasukkan kunci Instrumentasi Application Insights akan ditampilkan. Jika Anda menempelkan Kunci Application Insights di sini, sink Application Insights secara otomatis dikonfigurasi untuk Anda di template Resource Manager yang digunakan untuk menyebarkan kluster Anda.

Menambahkan Sink Application Insights ke templat Resource Manager

Di "WadCfg" pada templat Resource Manager, tambahkan "Sink" dengan menyertakan dua perubahan berikut:

  1. Tambahkan konfigurasi sink langsung setelah deklarasi DiagnosticMonitorConfiguration selesai:

    "SinksConfig": {
        "Sink": [
            {
                "name": "applicationInsights",
                "ApplicationInsights": "***ADD INSTRUMENTATION KEY HERE***"
            }
        ]
    }
    
    
  2. Sertakan Sink di DiagnosticMonitorConfiguration dengan menambahkan baris berikut di DiagnosticMonitorConfiguration dari WadCfg (tepat sebelum EtwProviders dinyatakan):

    "sinks": "applicationInsights"
    

Dalam kedua cuplikan kode sebelumnya, nama "applicationInsights" digunakan untuk menggambarkan sink. Ini bukan persyaratan dan selama nama sink disertakan dalam "sink", Anda dapat mengatur nama ke string apa pun.

Saat ini, log dari kluster muncul sebagai jejak dalam penampil log Application Insights. Karena sebagian besar jejak yang berasal dari platform berlevel "Informasi", Anda juga dapat mempertimbangkan untuk mengubah konfigurasi sink agar hanya mengirim log jenis "Peringatan" atau "Kesalahan". Tindakan ini dapat dilakukan dengan menambahkan "Saluran" ke sink Anda, seperti yang ditunjukkan dalam artikel ini.

Catatan

Jika Anda menggunakan Kunci Application Insights yang salah, baik di portal maupun di templat Resource Manager, Anda harus mengubah kunci tersebut secara manual dan memperbarui kluster/menyebarkan ulang.

Langkah berikutnya

Setelah Mengonfigurasi diagnostik Azure dengan benar, Anda akan melihat data dalam tabel Penyimpanan dari log ETW dan EventSource. Jika Anda memilih untuk menggunakan log Azure Monitor, Kibana, atau platform analitik dan visualisasi data lainnya yang tidak dikonfigurasi secara langsung di templat Manajer Sumber Daya, pastikan untuk menyiapkan platform pilihan Anda untuk membaca data dari tabel penyimpanan ini. Melakukan ini untuk log Azure Monitor relatif mudah, dan dijelaskan dalam Analisis peristiwa dan log. Application Insights adalah sedikit dari kasus khusus dalam pengertian ini, karena dapat dikonfigurasi sebagai bagian dari konfigurasi ekstensi Diagnostik, jadi lihat artikel yang sesuai jika Anda memilih untuk menggunakan AI.

Catatan

Saat ini tidak ada cara untuk memfilter atau memelihara peristiwa yang dikirim ke tabel. Jika Anda tidak menerapkan proses untuk menghapus peristiwa dari tabel, tabel akan terus bertambah. Saat ini, ada contoh layanan perawatan data yang berjalan dalam sampel Watchdog, dan disarankan agar Anda menulisnya untuk diri Anda sendiri juga, kecuali ada alasan yang bisa diterima bagi Anda untuk menyimpan log di luar jangka waktu 30 atau 90 hari.