Peta Aplikasi: Triage Aplikasi Terdistribusi

Peta Aplikasi membantu menemukan penyempitan performa atau hotspot kegagalan di semua komponen aplikasi terdistribusi Anda. Setiap simpul pada peta mewakili komponen aplikasi atau dependensinya; dan memiliki status kesehatan KPI serta pemberitahuan. Anda dapat mengklik dari komponen apa pun untuk diagnostik yang lebih detail, seperti peristiwa Application Insights. Jika aplikasi Anda menggunakan layanan Azure, Anda juga dapat mengklik ke diagnostik Azure, seperti rekomendasi SQL Database Advisor.

Apa itu Komponen?

Komponen adalah bagian yang dapat disebarkan secara independen dari aplikasi terdistribusi/microservice Anda. Tim pengembang dan operasi memiliki visibilitas tingkat kode atau akses ke telemetri yang dihasilkan oleh komponen aplikasi ini.

  • Komponen berbeda dari dependensi eksternal "teramati" seperti SQL, EventHub, dll. yang mungkin tidak dapat diakses oleh tim/organisasi Anda (kode atau telemetri).
  • Komponen berjalan pada sejumlah instans server/peran/kontainer.
  • Komponen dapat berupa kunci instrumentasi Application Insights terpisah (bahkan jika langganannya berbeda) atau peran berbeda yang melaporkan ke kunci instrumentasi Application Insights tunggal. Pengalaman peta pratinjau menunjukkan komponen terlepas dari bagaimana mereka diatur.

Peta Aplikasi Komposit

Anda dapat melihat topologi aplikasi lengkap di berbagai tingkat komponen aplikasi terkait. Komponen bisa berupa sumber daya Application Insights berbeda, atau peran yang berbeda dalam satu sumber daya. Peta aplikasi menemukan komponen dengan mengikuti panggilan dependensi HTTP yang dibuat antara server dengan SDK Application Insights yang terinstal.

Pengalaman ini dimulai dengan penemuan komponen yang progresif. Ketika Anda pertama kali memuat peta aplikasi, serangkaian kueri dipicu untuk menemukan komponen yang terkait dengan komponen ini. Tombol di sudut kiri atas akan diperbarui dengan jumlah komponen dalam aplikasi Anda saat ditemukan.

Saat mengklik "Perbarui komponen peta", peta di-refresh dengan semua komponen yang ditemukan sampai titik itu. Tergantung pada kompleksitas aplikasi Anda, mungkin membutuhkan waktu satu menit untuk memuat proses ini.

Jika semua komponen merupakan peran dalam satu sumber daya Application Insights, maka langkah penemuan ini tidak diperlukan. Beban awal untuk aplikasi semacam itu akan memiliki semua komponennya.

Cuplikan layar memperlihatkan contoh peta aplikasi.

Salah satu tujuan utama dengan pengalaman ini adalah untuk dapat memvisualisasikan topologi kompleks dengan ratusan komponen.

Klik komponen apa pun untuk melihat wawasan terkait dan beralih ke pengalaman triage performa dan kegagalan untuk komponen tersebut.

Flyout

Menyelidiki kegagalan

Pilih selidiki kegagalan untuk meluncurkan panel kegagalan.

Cuplikan layar tombol penyelidikan kegagalan

Cuplikan layar pengalaman kegagalan

Menyelidiki performa

Untuk memecahkan masalah performa, pilih selidiki performa.

Cuplikan layar tombol selidiki performa

Cuplikan layar pengalaman performa

Buka detail

Pilih buka detail untuk menjelajahi pengalaman transaksi ujung ke ujung, yang dapat menawarkan tampilan ke tingkat tumpukan panggilan.

Cuplikan layar tombol buka detail

Cuplikan layar detail transaksi ujung ke ujung

Tampilkan Log (Analitik)

Untuk mengkueri dan menyelidiki data aplikasi Anda lebih lanjut, klik tampilkan di Log (Analitik) .

Cuplikan layar tampilan dalam tombol analitik

Cuplikan layar pengalaman analitik. Grafik garis meringkas durasi respons rata-rata permintaan selama 12 jam terakhir.

Peringatan

Untuk menampilkan pemberitahuan aktif dan aturan yang mendasari yang menyebabkan pemberitahuan terpicu, pilih pemberitahuan.

Cuplikan layar tombol pemberitahuan

Cuplikan layar pengalaman analitik

Mengatur atau mengambil alih nama peran cloud

Peta Aplikasi menggunakan properti nama peran cloud untuk mengidentifikasi komponen pada peta. Untuk mengatur atau mengambil alih nama peran cloud secara manual dan mengubah apa yang ditampilkan di Peta Aplikasi:

Catatan

SDK Application Insights atau Agent secara otomatis menambahkan properti nama peran cloud ke telemetri yang dipancarkan oleh komponen di lingkungan Azure App Service.

Tulis TelemetryInitializer kustom seperti di bawah ini.

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

namespace CustomInitializer.Telemetry
{
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
            {
                //set custom role name here
                telemetry.Context.Cloud.RoleName = "Custom RoleName";
                telemetry.Context.Cloud.RoleInstance = "Custom RoleInstance";
            }
        }
    }
}

Aplikasi ASP.NET: Memuat penginisialisasi ke TelemetryConfiguration aktif

Pada ApplicationInsights.config:

    <ApplicationInsights>
      <TelemetryInitializers>
        <!-- Fully qualified type name, assembly name: -->
        <Add Type="CustomInitializer.Telemetry.MyTelemetryInitializer, CustomInitializer"/>
        ...
      </TelemetryInitializers>
    </ApplicationInsights>

Metode alternatif untuk aplikasi Web ASP.NET adalah dengan membuat instans penginisialisasi dalam kode, misalnya di Global.aspx.cs:

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;

    protected void Application_Start()
    {
        // ...
        TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
    }

Catatan

Menambahkan penginisialisasi menggunakan ApplicationInsights.config atau menggunakan TelemetryConfiguration.Active tidak valid untuk aplikasi ASP.NET Core.

Aplikasi ASP.NET: Memuat penginisialisasi ke TelemetryConfiguration

Untuk aplikasi ASP.NET Core, menambahkan yang baru dilakukan dengan menambahkannya ke wadah Injeksi Ketergantungan, seperti yang ditunjukkan di bawah ini. Penambahan ini dilakukan dalam metode ConfigureServices kelas Startup.cs Anda.

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

Memahami nama peran cloud dalam konteks Peta Aplikasi

Berkaitan dengan cara memikirkan nama peran cloud, melihat Peta Aplikasi yang memiliki beberapa nama peran cloud yang ada bisa membantu Anda:

Cuplikan Layar Peta Aplikasi

Dalam Peta Aplikasi di atas setiap nama dalam kotak hijau adalah nilai nama peran awan untuk berbagai aspek aplikasi terdistribusi khusus ini. Jadi untuk aplikasi ini perannya terdiri dari: Authentication , , , a acmefrontendInventory ManagementPayment Processing Worker Role .

Dalam kasus aplikasi ini masing-masing nama peran cloud juga mewakili sumber daya Application Insights unik yang berbeda dengan kunci instrumentasi mereka sendiri. Karena pemilik aplikasi ini memiliki akses ke masing-masing dari empat sumber daya Application Insights yang berbeda, Peta Aplikasi dapat menyatukan peta tentang hubungan yang mendasarinya.

Untuk definisi resmi:

   [Description("Name of the role the application is a part of. Maps directly to the role name in azure.")]
    [MaxStringLength("256")]
    705: string      CloudRole = "ai.cloud.role";

    [Description("Name of the instance where the application is running. Computer name for on-premises, instance name for Azure.")]
    [MaxStringLength("256")]
    715: string      CloudRoleInstance = "ai.cloud.roleInstance";

Atau, instans peran cloud dapat membantu untuk skenario di mana nama peran cloud memberi tahu Anda masalahnya ada di suatu tempat di front-end web Anda, tetapi Anda mungkin menjalankan ujung depan web Anda di beberapa server dengan bebannya diseimbangkan sehingga dapat mengebor lapisan yang lebih dalam melalui kueri Kusto dan mengetahui apakah masalah ini berdampak pada semua server/instans ujung depan web atau hanya satu bisa jadi sangat penting.

Skenario di mana Anda mungkin ingin mengambil alih nilai untuk instans peran cloud dilakukan jika aplikasi Anda berjalan di lingkungan terkontainerisasi di mana informasi tentang mengetahui server individual mungkin tidak cukup untuk menemukan masalah yang diberikan.

Untuk informasi selengkapnya tentang cara mengambil alih properti nama peran cloud dengan penginisialisasi telemetri, lihat Menambahkan properti: ITelemetryInitializer.

Pemecahan Masalah

Jika Anda mengalami masalah dalam membuat Peta Aplikasi berfungsi seperti yang diharapkan, cobalah langkah-langkah berikut:

Umum

  1. Pastikan Anda menggunakan SDK yang didukung secara resmi. SDK yang tidak didukung/komunitas mungkin tidak mendukung korelasi.

    Lihat artikel ini untuk daftar SDK yang didukung.

  2. Tingkatkan semua komponen ke versi SDK terbaru.

  3. Jika Anda menggunakan Azure Functions dengan C#, tingkatkan ke Fungsi V2.

  4. Pastikan nama peran cloud dikonfigurasi dengan benar.

  5. Jika Anda kehilangan dependensi, pastikan dependensi tersebut tercantum di dalam daftar dependensi yang dikumpulkan secara otomatis. Jika tidak, Anda masih dapat melacaknya secara manual dengan panggilan dependensi lacak.

Terlalu banyak simpul di peta

Peta Aplikasi membangun simpul aplikasi untuk setiap nama peran cloud unik yang ada dalam telemetri permintaan Anda dan simpul dependensi untuk setiap kombinasi unik jenis, target, dan nama peran cloud dalam telemetri dependensi Anda. Jika ada lebih dari 10.000 simpul dalam telemetri Anda, Peta Aplikasi tidak akan dapat mengambil semua simpul dan tautan, sehingga peta Anda menjadi tidak lengkap. Jika ini terjadi, pesan peringatan akan muncul saat menampilkan peta.

Selain itu, Peta Aplikasi hanya mendukung hingga 1000 simpul terpisah yang tidak dikelompokkan dan di-render sekaligus. Peta Aplikasi mengurangi kompleksitas visual dengan mengelompokkan dependensi yang memiliki jenis dan pemanggil yang sama, tetapi jika telemetri Anda memiliki terlalu banyak nama peran cloud unik atau terlalu banyak jenis dependensi, pengelompokan tersebut tidak akan mencukupi, dan peta tidak akan dapat di-render.

Untuk memperbaiki hal ini, Anda harus mengubah instrumentasi untuk mengatur nama peran cloud, jenis dependensi, dan bidang target dependensi dengan sesuai.

  • Target dependensi harus mewakili nama logika dependensi. Dalam banyak kasus, nama ini setara dengan nama server atau sumber daya dependensi. Misalnya, dalam kasus dependensi HTTP yang diatur menjadi nama host. Sebaiknya nama tidak berisi ID atau parameter unik yang berubah dari satu permintaan ke permintaan lainnya.

  • Jenis dependensi harus mewakili jenis logika dependensi. Misalnya, HTTP, SQL, atau Azure Blob adalah jenis dependensi yang khas. Sebaiknya tidak berisi ID unik.

  • Tujuan nama peran cloud dijelaskan di bagian di atas.

Umpan balik portal

Untuk memberikan umpan balik, gunakan opsi umpan balik.

Gambar MapLink-1

Langkah berikutnya