Application Insights untuk aplikasi Layanan Pekerja (aplikasi non-HTTP)

Application Insights SDK for Worker Service adalah SDK baru, yang paling cocok untuk beban kerja non-HTTP seperti olahpesan, tugas latar belakang, dan aplikasi konsol. Jenis aplikasi ini tidak memiliki gagasan permintaan HTTP masuk seperti aplikasi web ASP.NET/ASP.NET Core tradisional. Untuk alasan ini, menggunakan paket Application Insights untuk aplikasi ASP.NET atau ASP.NET Core tidak didukung.

Catatan

Dokumentasi berikut bergantung pada API klasik Application Insights. Rencana jangka panjang untuk Application Insights adalah mengumpulkan data menggunakan OpenTelemetry. Untuk informasi selengkapnya, lihat Mengaktifkan Azure Monitor OpenTelemetry untuk aplikasi .NET, Node.js, Python, dan Java.

SDK baru tidak melakukan koleksi telemetri dengan sendirinya. Sebaliknya, ini membawa kolektor otomatis Application Insights terkenal lainnya seperti DependencyCollector, PerfCounterCollector, dan ApplicationInsightsLoggingProvider. SDK ini memaparkan metode IServiceCollection ekstensi untuk mengaktifkan dan mengonfigurasi pengumpulan telemetri.

Skenario yang didukung

Application Insights SDK untuk Layanan Pekerja paling cocok untuk aplikasi non-HTTP di mana pun atau bagaimana mereka berjalan. Jika aplikasi Anda berjalan dan memiliki konektivitas jaringan ke Azure, telemetri dapat dikumpulkan. Pemantauan Application Insights didukung di mana pun .NET Core didukung. Paket ini dapat digunakan dalam Layanan .NET Core Worker yang baru diperkenalkan, tugas latar belakang di ASP.NET Core, dan aplikasi konsol seperti .NET Core dan .NET Framework.

Prasyarat

Anda harus memiliki string koneksi Application Insights yang valid. String ini diperlukan untuk mengirim telemetri apa pun ke Application Insights. Jika Anda perlu membuat sumber daya Application Insights baru untuk mendapatkan string koneksi, lihat String Koneksi ion.

Catatan

Pada tanggal 31 Maret 2025, dukungan untuk penyerapan kunci instrumentasi akan berakhir. Penyerapan kunci instrumentasi akan berjalan terus, namun kami tidak akan lagi menyediakan pembaruan atau dukungan terhadap fitur tersebut. Transisi ke string koneksi untuk memanfaatkan kemampuan baru.

Menggunakan Application Insights SDK untuk Layanan Pekerja

  1. Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi. Cuplikan berikut menunjukkan perubahan yang harus ditambahkan ke file proyek .csproj Anda:

        <ItemGroup>
            <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
        </ItemGroup>
    
  2. Konfigurasikan string koneksi dalam APPLICATIONINSIGHTS_CONNECTION_STRING variabel lingkungan atau dalam konfigurasi (appsettings.json).

    Screenshot displaying Application Insights overview and connection string.

  3. ILogger Ambil instans atau TelemetryClient instans dari kontainer Injeksi Dependensi (DI) dengan memanggil serviceProvider.GetRequiredService<TelemetryClient>(); atau menggunakan Injeksi Konstruktor. Langkah ini akan memicu pengaturan dan modul pengumpulan TelemetryConfiguration otomatis.

Instruksi khusus untuk setiap jenis aplikasi dijelaskan di bagian berikut.

Aplikasi .NET Core Worker Service

Contoh lengkap dibagikan di situs web NuGet.

  1. Unduh dan instal .NET SDK.

  2. Buat proyek Layanan Pekerja baru baik dengan menggunakan templat proyek baru Visual Studio atau baris dotnet new workerperintah .

  3. Tambahkan paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.

  4. Tambahkan services.AddApplicationInsightsTelemetryWorkerService(); ke metode CreateHostBuilder() di kelas Program.cs Anda, seperti dalam contoh ini:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                    services.AddApplicationInsightsTelemetryWorkerService();
                });
    
  5. Worker.cs Ubah sesuai contoh berikut:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
    
        public class Worker : BackgroundService
        {
            private readonly ILogger<Worker> _logger;
            private TelemetryClient _telemetryClient;
            private static HttpClient _httpClient = new HttpClient();
    
            public Worker(ILogger<Worker> logger, TelemetryClient tc)
            {
                _logger = logger;
                _telemetryClient = tc;
            }
    
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                    using (_telemetryClient.StartOperation<RequestTelemetry>("operation"))
                    {
                        _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                        _logger.LogInformation("Calling bing.com");
                        var res = await _httpClient.GetAsync("https://bing.com");
                        _logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                        _telemetryClient.TrackEvent("Bing call event completed");
                    }
    
                    await Task.Delay(1000, stoppingToken);
                }
            }
        }
    
  6. Siapkan string koneksi.

    Screenshot that shows Application Insights overview and connection string.

    Catatan

    Kami menyarankan agar Anda menentukan string koneksi dalam konfigurasi. Contoh kode berikut menunjukkan cara menentukan string koneksi di appsettings.json. Pastikan appsettings.json disalin ke folder akar aplikasi selama penerbitan.

        {
            "ApplicationInsights":
            {
                "ConnectionString" : "InstrumentationKey=00000000-0000-0000-0000-000000000000;"
            },
            "Logging":
            {
                "LogLevel":
                {
                    "Default": "Warning"
                }
            }
        }
    

Sebagai alternatif, tentukan string koneksi dalam variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING.

Biasanya, APPLICATIONINSIGHTS_CONNECTION_STRING menentukan string koneksi untuk aplikasi yang disebarkan ke aplikasi web sebagai pekerjaan web.

Catatan

String koneksi yang ditentukan dalam kode lebih diutamakan dibandingkan variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING, yang lebih diutamakan dibandingkan opsi lainnya.

Proses di latar belakang ASP.NET dengan layanan yang dihosting

Dokumen ini menjelaskan cara membuat tugas latar belakang dalam aplikasi ASP.NET Core.

Contoh lengkap dibagikan di halaman GitHub ini.

  1. Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.

  2. Tambahkan services.AddApplicationInsightsTelemetryWorkerService(); ke metode ConfigureServices(), seperti dalam contoh ini:

        public static async Task Main(string[] args)
        {
            var host = new HostBuilder()
                .ConfigureAppConfiguration((hostContext, config) =>
                {
                    config.AddJsonFile("appsettings.json", optional: true);
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddLogging();
                    services.AddHostedService<TimedHostedService>();
    
                    // connection string is read automatically from appsettings.json
                    services.AddApplicationInsightsTelemetryWorkerService();
                })
                .UseConsoleLifetime()
                .Build();
    
            using (host)
            {
                // Start the host
                await host.StartAsync();
    
                // Wait for the host to shutdown
                await host.WaitForShutdownAsync();
            }
        }
    

    Kode berikut adalah untuk TimedHostedService, di mana logika tugas latar belakang berada:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
    
        public class TimedHostedService : IHostedService, IDisposable
        {
            private readonly ILogger _logger;
            private Timer _timer;
            private TelemetryClient _telemetryClient;
            private static HttpClient httpClient = new HttpClient();
    
            public TimedHostedService(ILogger<TimedHostedService> logger, TelemetryClient tc)
            {
                _logger = logger;
                this._telemetryClient = tc;
            }
    
            public Task StartAsync(CancellationToken cancellationToken)
            {
                _logger.LogInformation("Timed Background Service is starting.");
    
                _timer = new Timer(DoWork, null, TimeSpan.Zero,
                    TimeSpan.FromSeconds(1));
    
                return Task.CompletedTask;
            }
    
            private void DoWork(object state)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                using (_telemetryClient.StartOperation<RequestTelemetry>("operation"))
                {
                    _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                    _logger.LogInformation("Calling bing.com");
                    var res = httpClient.GetAsync("https://bing.com").GetAwaiter().GetResult();
                    _logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                    _telemetryClient.TrackEvent("Bing call event completed");
                }
            }
        }
    
  3. Siapkan string koneksi. Gunakan hal yang sama appsettings.json dari contoh Layanan Pekerja .NET sebelumnya.

Aplikasi konsol .NET Core/.NET Framework

Seperti disebutkan di awal artikel ini, paket baru dapat digunakan untuk mengaktifkan telemetri Application Insights bahkan dari aplikasi konsol biasa. Paket ini menargetkan , sehingga dapat digunakan untuk aplikasi konsol netstandard2.0di .NET Core atau yang lebih tinggi, dan .NET Framework atau yang lebih tinggi.

Contoh lengkap dibagikan di halaman GitHub ini.

  1. Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.

  2. Ubah Program.cs seperti yang ditunjukkan dalam contoh berikut:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
        using Microsoft.ApplicationInsights.WorkerService;
        using Microsoft.Extensions.DependencyInjection;
        using Microsoft.Extensions.Logging;
        using System;
        using System.Net.Http;
        using System.Threading.Tasks;
    
        namespace WorkerSDKOnConsole
        {
            class Program
            {
                static async Task Main(string[] args)
                {
                    // Create the DI container.
                    IServiceCollection services = new ServiceCollection();
    
                    // Being a regular console app, there is no appsettings.json or configuration providers enabled by default.
                    // Hence instrumentation key/ connection string and any changes to default logging level must be specified here.
                    services.AddLogging(loggingBuilder => loggingBuilder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("Category", LogLevel.Information));
                    services.AddApplicationInsightsTelemetryWorkerService((ApplicationInsightsServiceOptions options) => options.ConnectionString = "InstrumentationKey=<instrumentation key here>");
    
                    // To pass a connection string
                    // - aiserviceoptions must be created
                    // - set connectionstring on it
                    // - pass it to AddApplicationInsightsTelemetryWorkerService()
    
                    // Build ServiceProvider.
                    IServiceProvider serviceProvider = services.BuildServiceProvider();
    
                    // Obtain logger instance from DI.
                    ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
    
                    // Obtain TelemetryClient instance from DI, for additional manual tracking or to flush.
                    var telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();
    
                    var httpClient = new HttpClient();
    
                    while (true) // This app runs indefinitely. Replace with actual application termination logic.
                    {
                        logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                        // Replace with a name which makes sense for this operation.
                        using (telemetryClient.StartOperation<RequestTelemetry>("operation"))
                        {
                            logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                            logger.LogInformation("Calling bing.com");                    
                            var res = await httpClient.GetAsync("https://bing.com");
                            logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                            telemetryClient.TrackEvent("Bing call event completed");
                        }
    
                        await Task.Delay(1000);
                    }
    
                    // Explicitly call Flush() followed by sleep is required in console apps.
                    // This is to ensure that even if application terminates, telemetry is sent to the back-end.
                    telemetryClient.Flush();
                    Task.Delay(5000).Wait();
                }
            }
        }
    

Aplikasi konsol ini juga menggunakan default TelemetryConfigurationyang sama. Ini dapat disesuaikan dengan cara yang sama seperti contoh di bagian sebelumnya.

Jalankan aplikasi Anda

Menjalankan aplikasi Anda. Pekerja dari semua contoh sebelumnya melakukan panggilan HTTP setiap detik untuk bing.com dan juga memancarkan beberapa log dengan menggunakan ILogger. Baris ini dibungkus di StartOperation dalam panggilan TelemetryClient, yang digunakan untuk membuat operasi. Dalam contoh ini, RequestTelemetry diberi nama "operasi."

Application Insights mengumpulkan log ILogger ini, dengan tingkat keparahan Peringatan atau lebih tinggi secara default, dan dependensi. Mereka berkorelasi RequestTelemetry dengan hubungan induk-anak. Korelasi juga berfungsi di seluruh batas proses/jaringan. Misalnya, jika panggilan dilakukan ke komponen lain yang dipantau, panggilan juga berkorelasi dengan induk ini.

Operasi RequestTelemetry kustom ini dapat dianggap setara dengan permintaan web masuk dalam aplikasi web biasa. Tidak perlu menggunakan operasi, tetapi paling cocok dengan model data korelasi Application Insights. RequestTelemetry bertindak sebagai operasi induk dan setiap telemetri yang dihasilkan di dalam iterasi pekerja diperlakukan sebagai milik operasi yang sama secara logis.

Pendekatan ini juga memastikan semua telemetri yang dihasilkan, baik otomatis maupun manual, akan memiliki .operation_id Karena pengambilan sampel didasarkan pada operation_id, algoritma pengambilan sampel menyimpan atau menghilangkan semua telemetri dari satu perulangan.

Bagian berikut mencantumkan telemetri lengkap yang dikumpulkan secara otomatis oleh Application Insights.

Metrik Langsung

Metrik Langsung dapat digunakan untuk memverifikasi dengan cepat apakah pemantauan Application Insights dikonfigurasi dengan benar. Meskipun mungkin perlu waktu beberapa menit sebelum telemetri muncul di portal dan analitik, Metrik Langsung menunjukkan penggunaan CPU dari proses yang sedang berjalan hampir secara real time. Itu juga dapat menunjukkan telemetri lain seperti Permintaan, Ketergantungan, dan Jejak.

Log ILogger

Log yang dipancarkan melalui ILogger dengan Peringatan tingkat keparahan atau yang lebih besar secara otomatis ditangkap. Untuk mengubah perilaku ini, secara eksplisit mengambil alih konfigurasi pengelogan untuk penyedia ApplicationInsights, seperti yang ditunjukkan dalam kode berikut. Konfigurasi beriku memungkinkan Application Insights menangkap semua log Information dan log yang lebih parah.

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}

Penting untuk diperhatikan bahwa contoh berikut tidak menyebabkan penyedia Application Insights mengambil log Information. Itu tidak menangkapnya karena SDK menambahkan filter logging default yang memerintahkan ApplicationInsights untuk mengambil hanya Warning log dan log yang lebih parah. Application Insights membutuhkan pengambil alih eksplisit.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

Untuk informasi selengkapnya, ikuti dokumen ILogger untuk menyesuaikan tingkat log mana yang diambil oleh Application Insights.

Dependensi

Pengumpulan dependensi diaktifkan secara default. Artikel Pelacakan dependensi di Application Insights menjelaskan dependensi yang dikumpulkan secara otomatis dan juga berisi langkah-langkah untuk melakukan pelacakan manual.

EventCounter

EventCounterCollectionModule diaktifkan secara default, dan akan mengumpulkan sekumpulan penghitung default dari aplikasi .NET . Tutorial EventCounter mencantumkan kumpulan penghitung default yang dikumpulkan. Ini juga memiliki instruksi tentang cara menyesuaikan daftar.

Melacak telemetri lain secara manual

Meskipun SDK secara otomatis mengumpulkan telemetri seperti yang dijelaskan, dalam kebanyakan kasus, Anda harus mengirim telemetri lain ke Application Insights. Cara yang disarankan untuk melacak telemetri lain adalah dengan mendapatkan instans TelemetryClient dari Injeksi Dependensi dan kemudian memanggil salah satu metode API yang didukung TrackXXX()di dalamnya. Kasus penggunaan umum lainnya adalah pelacakan operasi kustom. Pendekatan ini ditunjukkan dalam contoh pekerja sebelumnya.

Mengonfigurasi Application Insights SDK

Default TelemetryConfiguration yang digunakan oleh Worker Service SDK mirip dengan konfigurasi otomatis yang digunakan dalam aplikasi ASP.NET atau ASP.NET Core, dikurangi penginisialisasi telemetri yang digunakan untuk memperkaya telemetri dari HttpContext.

Anda dapat menyesuaikan Application Insights SDK untuk Layanan Pekerja untuk mengubah konfigurasi default. Pengguna Application Insights ASP.NET SDK Inti mungkin sudah tidak asing dengan mengubah konfigurasi dengan menggunakan ASP.NET injeksi dependensi bawaan Core. SDK Layanan Pekerja juga didasarkan pada prinsip serupa. Buat hampir semua perubahan konfigurasi di bagian ConfigureServices() dengan memanggil metode yang sesuai pada IServiceCollection, seperti yang dirinci di bagian berikutnya.

Catatan

Saat Anda menggunakan SDK ini, mengubah konfigurasi dengan memodifikasi TelemetryConfiguration.Active tidak didukung dan perubahan tidak akan tercermin.

Menggunakan ApplicationInsightsServiceOptions

Anda dapat mengubah beberapa pengaturan umum dengan meneruskan ApplicationInsightsServiceOptions ke AddApplicationInsightsTelemetryWorkerService, seperti dalam contoh ini:

using Microsoft.ApplicationInsights.WorkerService;

public void ConfigureServices(IServiceCollection services)
{
    var aiOptions = new ApplicationInsightsServiceOptions();
    // Disables adaptive sampling.
    aiOptions.EnableAdaptiveSampling = false;

    // Disables QuickPulse (Live Metrics stream).
    aiOptions.EnableQuickPulseMetricStream = false;
    services.AddApplicationInsightsTelemetryWorkerService(aiOptions);
}

ApplicationInsightsServiceOptions dalam SDK ini berada di namespace layanan Microsoft.ApplicationInsights.WorkerService, bukan Microsoft.ApplicationInsights.AspNetCore.Extensions dalam ASP.NET Core SDK.

Tabel berikut ini mencantumkan pengaturan yang umum digunakan di ApplicationInsightsServiceOptions.

Pengaturan Deskripsi Default
EnableQuickPulseMetricStream Aktifkan/Nonaktifkan fitur Metrik Langsung. Benar
EnableAdaptiveSampling Aktifkan/Nonaktifkan Pengambilan Sampel Adaptif. Benar
EnableHeartbeat Aktifkan/Nonaktifkan fitur Heartbeats, yang secara berkala (default 15 menit) mengirimkan metrik kustom bernama "HeartBeatState" dengan informasi tentang runtime seperti versi .NET dan lingkungan Azure, jika berlaku. Benar
AddAutoCollectedMetricExtractor Aktifkan/Nonaktifkan ekstraktor AutoCollectedMetrics, yang merupakan prosesor telemetri yang mengirim metrik pra-agregat tentang Permintaan/Dependensi sebelum pengambilan sampel terjadi. Benar
EnableDiagnosticsTelemetryModule Aktifkan/Nonaktifkan DiagnosticsTelemetryModule. Menonaktifkan pengaturan ini akan menyebabkan pengaturan berikut diabaikan: EnableHeartbeat, , EnableAzureInstanceMetadataTelemetryModuledan EnableAppServicesHeartbeatTelemetryModule. Benar

Untuk daftar terbaru, lihat pengaturan yang dapat dikonfigurasi di ApplicationInsightsServiceOptions.

Pengambilan sampel

Application Insights SDK for Worker Service mendukung pengambilan sampel laju tetap dan pengambilan sampel adaptif. Pengambilan sampel adaptif diaktifkan secara default. Pengambilan sampel dapat dinonaktifkan dengan menggunakan EnableAdaptiveSampling opsi di ApplicationInsightsServiceOptions.

Untuk mengonfigurasi pengaturan pengambilan sampel lainnya, Anda dapat menggunakan contoh berikut:

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;

var builder = WebApplication.CreateBuilder(args);

builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
   var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;

   // Using adaptive sampling
   telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);

   // Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
   // telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
});

builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
   EnableAdaptiveSampling = false,
});

var app = builder.Build();

Untuk informasi selengkapnya, lihat dokumen Pengambilan Sampel .

Menambahkan penginisialisasi telemetri

Gunakan penginisialisasi telemetri saat Anda ingin menentukan properti yang dikirim dengan semua telemetri.

Tambahkan penginisialisasi telemetri baru ke DependencyInjection kontainer dan SDK secara otomatis menambahkannya ke TelemetryConfiguration.

    using Microsoft.ApplicationInsights.Extensibility;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
        services.AddApplicationInsightsTelemetryWorkerService();
    }

Menghapus penginisialisasi telemetri

Penginisialisasi telemetri ada secara default. Untuk menghapus semua atau penginisialisasi telemetri tertentu, gunakan kode contoh berikut setelah memanggil AddApplicationInsightsTelemetryWorkerService().

   public void ConfigureServices(IServiceCollection services)
   {
        services.AddApplicationInsightsTelemetryWorkerService();
        // Remove a specific built-in telemetry initializer.
        var tiToRemove = services.FirstOrDefault<ServiceDescriptor>
                            (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
        if (tiToRemove != null)
        {
            services.Remove(tiToRemove);
        }

        // Remove all initializers.
        // This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
        services.RemoveAll(typeof(ITelemetryInitializer));
   }

Menambahkan prosesor telemetri

Anda dapat menambahkan prosesor telemetri kustom ke TelemetryConfiguration dengan menggunakan metode ekstensi pada AddApplicationInsightsTelemetryProcessor di IServiceCollection. Anda menggunakan prosesor telemetri dalam skenario pemfilteran tingkat lanjut untuk memungkinkan kontrol yang lebih langsung atas apa yang disertakan atau dikecualikan dari telemetri yang Anda kirim ke Application Insights. Gunakan contoh berikut:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();
        // If you have more processors:
        services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
    }

Mengonfigurasi atau menghapus modul telemetri default

Application Insights menggunakan modul telemetri untuk mengumpulkan telemetri tentang beban kerja tertentu secara otomatis tanpa memerlukan pelacakan manual.

Modul pengumpulan otomatis berikut diaktifkan secara default. Modul ini bertanggung jawab untuk mengumpulkan telemetri secara otomatis. Anda dapat menonaktifkan atau mengonfigurasinya untuk mengubah perilaku defaultnya.

  • DependencyTrackingTelemetryModule
  • PerformanceCollectorModule
  • QuickPulseTelemetryModule
  • AppServicesHeartbeatTelemetryModule (Saat ini ada masalah yang melibatkan modul telemetri ini. Untuk solusi sementara, lihat Masalah GitHub 1689.)
  • AzureInstanceMetadataTelemetryModule

Untuk mengonfigurasi modul telemetri default apa pun, gunakan metode ConfigureTelemetryModule<T> ekstensi pada IServiceCollection, seperti yang ditunjukkan dalam contoh berikut:

    using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
    using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();

            // The following configures QuickPulseTelemetryModule.
            // Similarly, any other default modules can be configured.
            services.ConfigureTelemetryModule<QuickPulseTelemetryModule>((module, o) =>
            {
                module.AuthenticationApiKey = "keyhere";
            });

            // The following removes PerformanceCollectorModule to disable perf-counter collection.
            // Similarly, any other default modules can be removed.
            var performanceCounterService = services.FirstOrDefault<ServiceDescriptor>
                                        (t => t.ImplementationType == typeof(PerformanceCollectorModule));
            if (performanceCounterService != null)
            {
                services.Remove(performanceCounterService);
            }
    }

Mengonfigurasi saluran telemetri

Saluran default adalah ServerTelemetryChannel. Anda dapat mengambil alihnya seperti yang ditunjukkan contoh berikut:

using Microsoft.ApplicationInsights.Channel;

    public void ConfigureServices(IServiceCollection services)
    {
        // Use the following to replace the default channel with InMemoryChannel.
        // This can also be applied to ServerTelemetryChannel.
        services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });

        services.AddApplicationInsightsTelemetryWorkerService();
    }

Menonaktifkan telemetri secara dinamis

Jika Anda ingin menonaktifkan telemetri secara kondisional dan dinamis, Anda dapat menyelesaikan instance TelemetryConfiguration dengan kontainer injeksi dependensi ASP.NET Core di mana saja dalam kode Anda dan menyetel tanda DisableTelemetry di atasnya.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
    {
        configuration.DisableTelemetry = true;
        ...
    }

Pertanyaan yang Sering Ditanyakan

Bagian ini menyediakan jawaban atas pertanyaan umum.

Paket mana yang harus saya gunakan?

Skenario aplikasi .NET Core Paket
Tanpa HostedServices WorkerService
Dengan HostedServices AspNetCore (bukan WorkerService)
Dengan HostedServices, hanya memantau HostedServices WorkerService (skenario langka)

Dapatkah HostedServices di dalam aplikasi .NET Core menggunakan paket AspNetCore memiliki TelemetryClient yang dimasukkan ke dalamnya?

Ya. Konfigurasi akan dibagikan dengan aplikasi web lainnya.

Bagaimana cara melacak telemetri yang tidak dikumpulkan secara otomatis?

Dapatkan instans TelemetryClient dengan menggunakan injeksi konstruktor dan panggil metode yang diperlukan TrackXXX() di dalamnya. Kami tidak menyarankan untuk membuat instans TelemetryClient baru. Instans TelemetryClient singleton sudah terdaftar dalam DependencyInjection kontainer, yang berbagi TelemetryConfiguration dengan telemetri lainnya. Membuat instans TelemetryClient baru hanya disarankan jika perlu konfigurasi yang terpisah dari telemetri lainnya.

Dapatkah saya menggunakan Ide Visual Studio untuk onboarding Insight Aplikasi ke proyek Layanan Pekerja?

Onboarding VISUAL Studio IDE saat ini hanya didukung untuk aplikasi ASP.NET/ASP.NET Core. Dokumen ini akan diperbarui ketika Visual Studio mengirimkan dukungan untuk onboarding aplikasi Layanan Pekerja.

Dapatkah saya mengaktifkan pemantauan Application Insights dengan menggunakan alat seperti Azure Monitor Application Insights Agent (sebelumnya Status Monitor v2)?

Tidak. Agen Application Insights Azure Monitor saat ini hanya mendukung .NET .

Apakah semua fitur didukung jika saya menjalankan aplikasi saya di Linux?

Ya. Dukungan fitur untuk SDK sama di semua platform, dengan pengecualian berikut:

  • Penghitung kinerja hanya didukung di Windows dengan pengecualian CPU/Memori Proses yang ditampilkan dalam Live Metrics.

  • Meskipun ServerTelemetryChannel diaktifkan secara default, jika aplikasi berjalan di Linux atau macOS, saluran tidak membuat folder penyimpanan lokal secara otomatis untuk menyimpan telemetri sementara jika ada masalah jaringan. Karena keterbatasan ini, telemetri akan hilang saat ada masalah jaringan atau server sementara. Untuk mengatasi masalah ini, konfigurasikan folder lokal untuk saluran:

    using Microsoft.ApplicationInsights.Channel;
    using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
    
        public void ConfigureServices(IServiceCollection services)
        {
            // The following will configure the channel to use the given folder to temporarily
            // store telemetry items during network or Application Insights server issues.
            // User should ensure that the given folder already exists
            // and that the application has read/write permissions.
            services.AddSingleton(typeof(ITelemetryChannel),
                                    new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});
            services.AddApplicationInsightsTelemetryWorkerService();
        }
    

Aplikasi sampel

Aplikasi konsol .NET Core: Gunakan sampel ini jika Anda menggunakan aplikasi konsol yang ditulis di .NET Core (2.0 atau lebih tinggi) atau .NET Framework (4.7.2 atau lebih tinggi).

ASP.NET Tugas latar belakang Core dengan HostedServices: Gunakan sampel ini jika Anda berada di ASP.NET Core dan membuat tugas latar belakang sesuai dengan panduan resmi.

.NET Core Worker Service: Gunakan sampel ini jika Anda memiliki aplikasi .NET Worker Service sesuai dengan panduan resmi.

SDK sumber terbuka

Baca dan berkontribusi pada kode.

Untuk pembaruan terbaru dan perbaikan bug, lihat Catatan Rilis.

Langkah berikutnya