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 dan Peta Strategi OpenTelemetry kami. Panduan migrasi tersedia untuk .NET, Node.js, dan Python.
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.
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
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>
Konfigurasikan string koneksi dalam
APPLICATIONINSIGHTS_CONNECTION_STRING
variabel lingkungan atau dalam konfigurasi (appsettings.json
).ILogger
Ambil instans atauTelemetryClient
instans dari kontainer Injeksi Dependensi (DI) dengan memanggilserviceProvider.GetRequiredService<TelemetryClient>();
atau menggunakan Injeksi Konstruktor. Langkah ini akan memicu pengaturan dan modul pengumpulanTelemetryConfiguration
otomatis.
Instruksi khusus untuk setiap jenis aplikasi dijelaskan di bagian berikut.
Aplikasi .NET Core Worker Service
Contoh lengkap dibagikan di situs web NuGet.
Buat proyek Layanan Pekerja baru baik dengan menggunakan templat proyek baru Visual Studio atau baris
dotnet new worker
perintah .Tambahkan paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.
Tambahkan
services.AddApplicationInsightsTelemetryWorkerService();
ke metodeCreateHostBuilder()
di kelasProgram.cs
Anda, seperti dalam contoh ini:public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); services.AddApplicationInsightsTelemetryWorkerService(); });
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); } } }
Siapkan string koneksi.
Catatan
Kami menyarankan agar Anda menentukan string koneksi dalam konfigurasi. Contoh kode berikut menunjukkan cara menentukan string koneksi di
appsettings.json
. Pastikanappsettings.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.
Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.
Tambahkan
services.AddApplicationInsightsTelemetryWorkerService();
ke metodeConfigureServices()
, 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"); } } }
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.0
di .NET Core atau yang lebih tinggi, dan .NET Framework atau yang lebih tinggi.
Contoh lengkap dibagikan di halaman GitHub ini.
Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.
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 TelemetryConfiguration
yang 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 aplikasi dengan Application Insights dikonfigurasi dengan benar. Telemetri dapat memakan waktu beberapa menit untuk muncul di portal Azure, tetapi panel metrik langsung memperlihatkan penggunaan CPU dari proses yang sedang berjalan hampir secara real time. Ini juga dapat menunjukkan telemetri lain seperti permintaan, dependensi, 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 live metrics (also known as QuickPulse).
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 yang telah ditentukan sebelumnya tentang Permintaan/Dependensi sebelum pengambilan sampel terjadi. | Benar |
EnableDiagnosticsTelemetryModule | Aktifkan/Nonaktifkan DiagnosticsTelemetryModule . Menonaktifkan pengaturan ini akan menyebabkan pengaturan berikut diabaikan: EnableHeartbeat , , EnableAzureInstanceMetadataTelemetryModule dan 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;
...
}
Tanya jawab umum
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 kecuali untuk Proses CPU/Memori yang ditampilkan dalam metrik langsung.
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
- Gunakan API untuk mengirim peristiwa dan metrik Anda sendiri untuk melihat lebih mendetail performa dan penggunaan aplikasi Anda.
- Lacak lebih banyak dependensi yang tidak dilacak secara otomatis.
- Memperkaya atau memfilter telemetri yang dikumpulkan secara otomatis.
- Injeksi Dependensi di ASP.NET Core.