Application Insights untuk aplikasi konsol .NET

Peringatan

Gunakan paket Microsoft.ApplicationInsights.WorkerService dan instruksi terkait dari Application Insights untuk aplikasi Layanan Pekerja (aplikasi non-HTTP) untuk aplikasi konsol. Ini kompatibel dengan versi Dukungan Jangka Panjang (LTS) dari .NET Core dan .NET Framework atau lebih tinggi.

Application Insights memungkinkan Anda memantau aplikasi web untuk ketersediaan, performa, dan penggunaan.

Mulai

  • Di portal Azure, buat sumber daya Application Insights.

  • Ambil salinan string dari koneksi. Temukan string koneksi di menu dropdown Essentials dari sumber daya baru yang Anda buat.

  • Instal paket Microsoft.ApplicationInsights terbaru.

  • Atur string koneksi dalam kode Anda sebelum Anda melacak telemetri apa pun (atau mengatur APPLICATIONINSIGHTS_CONNECTION_STRING variabel lingkungan). Setelah itu, Anda harus dapat melacak telemetri secara manual dan melihatnya di portal Azure.

    // You may use different options to create configuration as shown later in this article
    TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
    configuration.ConnectionString = <Copy connection string from Application Insights Resource Overview>;
    var telemetryClient = new TelemetryClient(configuration);
    telemetryClient.TrackTrace("Hello World!");
    

    Catatan

    Telemetri tidak dikirim secara instan. Item di-batch dan dikirim oleh ApplicationInsights SDK. Aplikasi konsol keluar setelah memanggil Track() metode.

    Telemetri mungkin tidak dikirim kecuali Flush() danDelaySleep/dilakukan sebelum aplikasi keluar, seperti yang ditunjukkan dalam contoh lengkap nanti di artikel ini. Sleep tidak diperlukan jika Anda menggunakan InMemoryChannel.

  • Instal versi terbaru paket Microsoft.ApplicationInsights.DependencyCollector . Ini secara otomatis melacak HTTP, SQL, atau beberapa panggilan dependensi eksternal lainnya.

Anda dapat menginisialisasi dan mengonfigurasi Application Insights dari kode atau dengan menggunakan ApplicationInsights.config file. Pastikan inisialisasi terjadi sedini mungkin.

Catatan

ApplicationInsights.config tidak didukung oleh aplikasi .NET Core.

Menggunakan file konfigurasi

Untuk aplikasi berbasis .NET Framework, secara default, Application Insights SDK mencari ApplicationInsights.config file di direktori kerja saat TelemetryConfiguration sedang dibuat. Membaca file konfigurasi tidak didukung pada .NET Core.

TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present

Anda juga dapat menentukan jalur ke file konfigurasi:

using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);

Anda bisa mendapatkan contoh lengkap file konfigurasi dengan menginstal versi terbaru paket Microsoft.ApplicationInsights.WindowsServer . Berikut adalah konfigurasi minimal untuk pengumpulan dependensi yang setara dengan contoh kode:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <ConnectionString>"Copy connection string from Application Insights Resource Overview"</ConnectionString>
  <TelemetryInitializers>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector"/>
  </TelemetryInitializers>
  <TelemetryModules>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
      <ExcludeComponentCorrelationHttpHeadersOnDomains>
        <Add>core.windows.net</Add>
        <Add>core.chinacloudapi.cn</Add>
        <Add>core.cloudapi.de</Add>
        <Add>core.usgovcloudapi.net</Add>
        <Add>localhost</Add>
        <Add>127.0.0.1</Add>
      </ExcludeComponentCorrelationHttpHeadersOnDomains>
      <IncludeDiagnosticSourceActivities>
        <Add>Microsoft.Azure.ServiceBus</Add>
        <Add>Microsoft.Azure.EventHubs</Add>
      </IncludeDiagnosticSourceActivities>
    </Add>
  </TelemetryModules>
  <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
</ApplicationInsights>

Mengonfigurasi koleksi telemetri dari kode

Catatan

Membaca file konfigurasi tidak didukung pada .NET Core.

  • Selama pengaktifan aplikasi, buat dan konfigurasikan DependencyTrackingTelemetryModule instans. Ini harus singleton dan harus dipertahankan untuk masa pakai aplikasi.

    var module = new DependencyTrackingTelemetryModule();
    
    // prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
    module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
    //...
    
    // enable known dependency tracking, note that in future versions, we will extend this list. 
    // please check default settings in https://github.com/Microsoft/ApplicationInsights-dotnet-server/blob/develop/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt
    
    module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
    module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");
    //....
    
    // initialize the module
    module.Initialize(configuration);
    
  • Tambahkan penginisialisasi telemetri umum:

    // ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls
    configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());
    

    Jika Anda membuat konfigurasi dengan konstruktor biasa TelemetryConfiguration() , Anda perlu mengaktifkan dukungan korelasi juga. Ini tidak diperlukan jika Anda membaca konfigurasi dari file atau digunakan TelemetryConfiguration.CreateDefault() atau TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • Anda mungkin juga ingin menginstal dan menginisialisasi modul pengumpul Penghitung Kinerja seperti yang dijelaskan di situs web ini.

Contoh lengkap

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility;
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();

            configuration.ConnectionString = "removed";
            configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());

            var telemetryClient = new TelemetryClient(configuration);
            using (InitializeDependencyTracking(configuration))
            {
                // run app...

                telemetryClient.TrackTrace("Hello World!");

                using (var httpClient = new HttpClient())
                {
                    // Http dependency is automatically tracked!
                    httpClient.GetAsync("https://microsoft.com").Wait();
                }

            }

            // before exit, flush the remaining data
            telemetryClient.Flush();

            // Console apps should use the WorkerService package.
            // This uses ServerTelemetryChannel which does not have synchronous flushing.
            // For this reason we add a short 5s delay in this sample.
            
            Task.Delay(5000).Wait();

            // If you're using InMemoryChannel, Flush() is synchronous and the short delay is not required.

        }

        static DependencyTrackingTelemetryModule InitializeDependencyTracking(TelemetryConfiguration configuration)
        {
            var module = new DependencyTrackingTelemetryModule();

            // prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.chinacloudapi.cn");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.cloudapi.de");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.usgovcloudapi.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("localhost");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("127.0.0.1");

            // enable known dependency tracking, note that in future versions, we will extend this list. 
            // please check default settings in https://github.com/microsoft/ApplicationInsights-dotnet-server/blob/develop/WEB/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt

            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");

            // initialize the module
            module.Initialize(configuration);

            return module;
        }
    }
}