Tutorial: Memantau dan mendiagnosis ASP.NET Core pada Service Fabric menggunakan Application Insights

Tutorial ini adalah bagian kelima dari rangkaian tutorial. Ini berjalan melalui langkah-langkah untuk mengonfigurasi pemantauan dan diagnostik untuk ASP.NET Core yang berjalan pada kluster Service Fabric menggunakan Application Insights. Kami akan mengumpulkan telemetri dari aplikasi yang dikembangkan di bagian pertama tutorial, Membangun aplikasi .NET Service Fabric.

Di bagian empat seri tutorial ini, Anda mempelajari cara:

  • Mengonfigurasi Application Insights untuk aplikasi Anda
  • Mengumpulkan telemetri respons untuk melacak komunikasi berbasis HTTP antar layanan
  • Menggunakan fitur Peta Aplikasi di Application Insights
  • Menambahkan kejadian kustom menggunakan Application Insights API

Dalam tutorial ini, Anda akan belajar cara:

Prasyarat

Sebelum Anda memulai tutorial ini:

Unduh aplikasi sampel Pemungutan Suara

Jika Anda tidak membangun aplikasi sampel Voting di bagian salah satu seri tutorial ini,Anda dapat mengunduhnya. Di jendela perintah atau terminal, jalankan perintah berikut untuk mengkloning repositori aplikasi sampel ke komputer lokal Anda.

git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart

Siapkan sumber daya Application Insights

Application Insights adalah platform manajemen kinerja aplikasi Azure, dan platform yang direkomendasikan Service Fabric untuk pemantauan aplikasi dan diagnostik.

Untuk membuat sumber daya Application Insights, buka portal Azure. Pilih Buat sumber daya di menu navigasi kiri untuk membuka Azure Marketplace. Pilih Monitoring + Manajemen lalu Application Insights.

Create new AI resource

Anda sekarang perlu mengisi informasi yang diperlukan tentang atribut sumber daya yang akan dibuat. Masukkan Nama, GrupSumber Daya, dan Langganan yang sesuai. Atur Lokasi ke tempat Anda akan menerapkan kluster Service Fabric Anda di masa mendatang. Dalam tutorial ini, kami akan menerapkankan aplikasi ke kluster lokal sehingga bidang Lokasi tidak relevan. Jenis Aplikasi harus dibiarkan sebagai "ASP.NET web".

AI resource attributes

Setelah Anda mengisi informasi yang diperlukan, pilih Buat untuk menyediakan sumber daya - diperlukan waktu sekitar satu menit.

Menambahkan Application Insights ke layanan aplikasi

Luncurkan Visual Studio 2019 dengan hak istimewa yang ditinggikan dengan mengklik kanan ikon Visual Studio di Menu Mulai dan memilih Jalankan sebagai administrator. Pilih File>Open>Project/Solution dan navigasi ke aplikasi Voting (baik dibuat di bagian salah satu tutorial atau git cloned). Buka Voting.sln. Jika diminta untuk memulihkan paket NuGet aplikasi, pilih Ya.

Ikuti langkah-langkah ini untuk mengonfigurasi Application Insights untuk layanan VotingWeb dan VotingData:

  1. Klik kanan pada nama layanan, dan pilih Tambahkan > Layanan Terhubung > Pemantauan dengan Application Insights.

    Configure AI

Catatan

Tergantung pada jenis proyek, ketika Anda Mengklik kanan pada nama layanan, Anda mungkin perlu memilih Tambahkan-> Telemetri Application Insights ...

  1. Pilih Mulai.

  2. Masuk ke akun yang Anda gunakan untuk langganan Azure Anda dan pilih langganan tempat Anda membuat sumber daya Application Insights. Temukan sumber daya di bawah Sumber daya Application Insights yang ada di menu tarik-turun "Sumber Daya". Pilih Daftar untuk menambahkan Application Insights ke layanan Anda.

    Register AI

  3. Klik Selesai setelah kotak dialog yang muncul menyelesaikan tindakan.

Catatan

Pastikan untuk melakukan langkah-langkah di atas untuk kedua layanan dalam aplikasi untuk menyelesaikan konfigurasi Application Insights untuk aplikasi. Sumber daya Application Insights yang sama digunakan untuk kedua layanan untuk melihat permintaan masuk dan keluar dan komunikasi antara layanan.

Tambahkan Microsoft.ApplicationInsights.ServiceFabric.Native NuGet ke layanan

Application Insights memiliki dua Service Fabric khusus NuGets yang dapat digunakan tergantung pada skenarionya. Salah satunya digunakan dengan layanan asli Service Fabric, dan yang lainnya dengan kontainer dan executable guest. Dalam hal ini, kita akan menggunakan Microsoft.ApplicationInsights.ServiceFabric.Native NuGet untuk memanfaatkan pemahaman konteks layanan yang dibawanya. Untuk membaca selengkapnya tentang Application Insights SDK dan paket NuGet khusus Service Fabric, lihat Microsoft Application Insights for Service Fabric.

Berikut adalah langkah-langkah untuk menyiapkan paket NuGet:

  1. Klik kanan pada Solusi 'Voting' di bagian atas Penjelajah Solusi, dan pilih Kelola Paket NuGet untuk Solusi... .
  2. Pilih Telusuri di menu navigasi atas jendela "NuGet - Solution", dan centang kotak Sertakan prarilis di samping bilah pencarian.

Catatan

Anda mungkin perlu memasang paket Microsoft.ServiceFabric.Diagnostics.Internal dengan cara yang sama jika tidak dipasang sebelumnya sebelum memasang paket Application Insights

  1. Cari dan Microsoft.ApplicationInsights.ServiceFabric.Native pilih paket NuGet yang sesuai.

  2. Di sebelah kanan, pilih dua kotak centang di samping dua layanan dalam aplikasi, VotingWeb danVotingData dan pilih Pasang. AI sdk Nuget

  3. Pilih OK pada kotak dialog Perubahan Pratinjau yang muncul, dan terima Penerimaan Lisensi. Ini akan melengkapi penambahan NuGet ke layanan.

  4. Anda sekarang perlu mengatur penginisialisasi telemetri di dua layanan. Untuk melakukan ini, buka VotingWeb.cs dan VotingData.cs. Untuk keduanya, lakukan dua langkah berikut:

    1. Tambahkan dua pernyataan using ini di bagian atas setiap <ServiceName>.cs, setelah pernyataan using yang ada:
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.ServiceFabric;
    
    1. Di kedua file, dalam pernyataan pengembalian bertumpuk CreateServiceInstanceListeners() atau CreateServiceReplicaListeners() , di bawah layanan ConfigureServices>, dengan layanan singleton lainnya dinyatakan, tambahkan:
    .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
    

    Ini akan menambahkan Konteks Layanan ke telemetri Anda, memungkinkan Anda untuk lebih memahami sumber telemetri Anda dalam Application Insights. Pernyataan pengembalian bersarang Anda di VotingWeb.cs Anda akan terlihat seperti ini:

    return new WebHostBuilder()
        .UseKestrel()
        .ConfigureServices(
            services => services
                .AddSingleton<HttpClient>(new HttpClient())
                .AddSingleton<FabricClient>(new FabricClient())
                .AddSingleton<StatelessServiceContext>(serviceContext)
                .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
        .UseUrls(url)
        .Build();
    

    Demikian pula, dalam VotingData.cs, Anda harus memiliki:

    return new WebHostBuilder()
        .UseKestrel()
        .ConfigureServices(
            services => services
                .AddSingleton<StatefulServiceContext>(serviceContext)
                .AddSingleton<IReliableStateManager>(this.StateManager)
                .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
        .UseUrls(url)
        .Build();
    

Periksa kembali apakah metode UseApplicationInsights() ini dipanggil dalam VotingWeb.cs dan VotingData.cs seperti yang ditunjukkan di atas.

Catatan

Contoh aplikasi ini menggunakan http untuk layanan untuk berkomunikasi. Jika Anda mengembangkan aplikasi dengan Service Remoting V2, Anda harus menambahkan baris kode berikut juga di tempat yang sama seperti yang Anda lakukan di atas

ConfigureServices(services => services
    ...
    .AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
    .AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)

Pada titik ini, Anda siap untuk menerapkan aplikasi. Pilih Mulai di atas (atau F5), dan Visual Studio akan membangun dan mengemas aplikasi, menyiapkan kluster lokal Anda, dan menerapkan aplikasi ke dalamnya.

Catatan

Anda mungkin mendapatkan kesalahan build jika Anda tidak memiliki versi .NET Core SDK terbaru yang terpasang.

Setelah aplikasi selesai diterapkan, buka localhost:8080, di mana Anda dapat melihat aplikasi satu halaman Sampel Voting. Pilih beberapa item berbeda pilihan Anda untuk membuat beberapa sampel data dan telemetri - Saya pergi untuk makanan penutup!

AI sample votes

Jangan ragu untuk Menghapus beberapa opsi voting juga ketika Anda selesai menambahkan beberapa voting.

Lihat telemetri dan peta Aplikasi di Application Insights

Kunjungi sumber daya Application Insights Anda di portal Microsoft Azure.

Pilih Gambaran Umum untuk kembali ke halaman arahan sumber daya Anda. Lalu pilih Cari di bagian atas untuk melihat jejak yang masuk. Dibutuhkan beberapa menit agar jejak muncul di Application Insights. Jika Anda tidak melihat apa pun, tunggu sebentar dan tekan tombol Refresh di bagian atas. AI see traces

Menggulir ke bawah pada jendela Pencarian Anda akan melihat semua telemetri masuk yang Anda dapatkan di luar kotak dengan Application Insights. Untuk setiap tindakan yang Anda ambil dalam aplikasi Voting, harus ada permintaan PUT keluar dari VotingWeb (PUT Votes/Put [name]), permintaan PUT yang masuk dari VotingData (PUT VoteData/Put [name]), diikuti dengan sepasang permintaan GET untuk me-refresh data yang ditampilkan. Juga akan ada jejak dependensi untuk HTTP di localhost, karena ini adalah permintaan HTTP. Berikut adalah contoh yang akan Anda lihat tentang bagaimana satu voting ditambahkan:

AI sample request trace

Anda dapat memilih salah satu jejak untuk melihat detail selengkapnya tentang hal tersebut. Ada informasi berguna tentang permintaan yang disediakan oleh Application Insights, termasuk Waktu respons dan URL Permintaan. Selain itu, karena Anda menambahkan Service Fabric NuGet tertentu, Anda juga akan mendapatkan data tentang aplikasi Anda dalam konteks kluster Service Fabric di bagian Data Kustom di bawah ini. Termasuk konteks layanan, sehingga Anda dapat melihat PartisiID dan ReplicaId dari sumber permintaan, dan lebih baik melokalisasi masalah saat mendiagnosis kesalahan dalam aplikasi Anda.

AI trace details

Selain itu, Anda dapat memilih Peta aplikasi di menu sebelah kiri pada halaman Gambaran Umum, atau pilih ikon Peta aplikasi untuk membawa Anda ke Peta Aplikasi yang menampilkan dua layanan Anda terhubung.

Screenshot that highlights Application map in the left menu.

Peta Aplikasi dapat membantu Anda memahami topologi aplikasi Anda dengan lebih baik, terutama saat Anda mulai menambahkan banyak layanan berbeda yang berfungsi bersama. Aplikasi ini juga memberi Anda data dasar tentang tingkat keberhasilan permintaan, dan dapat membantu Anda mendiagnosis permintaan yang gagal untuk memahami di mana letak kesalahannya. Untuk mempelajari selengkapnya tentang menggunakan peta Aplikasi, lihat Peta Aplikasi di Application Insights.

Tambahkan instrumentasi kustom ke aplikasi Anda

Meskipun Application Insights menyediakan banyak telemetri di luar kotak, Anda mungkin ingin menambahkan instrumentasi kustom lebih lanjut. Berdasarkan kebutuhan bisnis Anda atau untuk meningkatkan diagnostik ketika terjadi kesalahan dalam aplikasi Anda. Application Insights memiliki API untuk mencatat kejadian dan metrik khusus, yang dapat Anda baca selengkapnya di sini.

Mari tambahkan beberapa kejadian kustom ke VoteDataController.cs (di bawah Pengontrol VotingData>) untuk melacak kapan voting ditambahkan dan dihapus dari votesDictionary utama.

  1. Tambahkan using Microsoft.ApplicationInsights; di akhir yang lainnya menggunakan pernyataan.
  2. Nyatakan TelemetryClient yang baru di awal kelas, di bawah pembuatan IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.
  3. Di fungsi Put(), tambahkan kejadian yang mengonfirmasi bahwa voting telah ditambahkan. Tambahkan telemetry.TrackEvent($"Added a vote for {name}"); setelah transaksi selesai, tepat sebelum pernyataan OkResult kembali.
  4. Dalam Delete() , ada "if/else" berdasarkan kondisi bahwa votesDictionary berisi vote untuk opsi voting tertentu.
    1. Tambahkan kejadian yang mengonfirmasi penghapusan voting di pernyataan jika, setelah tx.CommitAsync() yang ditunggu: telemetry.TrackEvent($"Deleted votes for {name}");
    2. Tambahkan kejadian untuk menunjukkan bahwa penghapusan tidak terjadi di pernyataan lain, sebelum pernyataan pengembalian: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Berikut ini contoh seperti apa fungsi Put() dan Delete() setelah menambahkan kejadian:

// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
        await tx.CommitAsync();
    }

    telemetry.TrackEvent($"Added a vote for {name}");
    return new OkResult();
}

// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        if (await votesDictionary.ContainsKeyAsync(tx, name))
        {
            await votesDictionary.TryRemoveAsync(tx, name);
            await tx.CommitAsync();
            telemetry.TrackEvent($"Deleted votes for {name}");
            return new OkResult();
        }
        else
        {
            telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
            return new NotFoundResult();
        }
    }
}

Setelah selesai melakukan perubahan ini, Mulai aplikasi agar dapat membangun dan menerapkan versi terbarunya. Setelah aplikasi selesai diterapkan, buka localhost:8080 dan tambahkan dan hapus beberapa opsi voting. Kemudian, kembali ke sumber daya Application Insights Anda untuk melihat jejak eksekusi terbaru (seperti sebelumnya, jejak dapat memakan waktu 1-2 menit untuk muncul di Application Insights). Untuk semua voting yang Anda tambahkan dan hapus, sekarang Anda akan melihat "Kejadian Kustom* bersama dengan semua telemetri respons.

custom events

Langkah berikutnya

Dalam tutorial ini, Anda akan belajar cara:

  • Mengonfigurasi Application Insights untuk aplikasi Anda
  • Mengumpulkan telemetri respons untuk melacak komunikasi berbasis HTTP antar layanan
  • Menggunakan fitur Peta Aplikasi di Application Insights
  • Menambahkan kejadian kustom menggunakan Application Insights API

Sekarang setelah Anda menyiapkan pemantauan dan diagnostik untuk aplikasi ASP.NET Anda, cobalah yang berikut ini: