Pengelogan dan diagnostik di gRPC pada .NET
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Oleh James Newton-King
Artikel ini menyediakan panduan untuk mengumpulkan diagnostik dari aplikasi gRPC untuk membantu memecahkan masalah. Topik yang dibahas meliputi:
- Pengelogan - Log terstruktur yang ditulis ke pengelogan .NET Core. ILogger digunakan oleh kerangka kerja aplikasi untuk menulis log, dan oleh pengguna untuk pengelogan mereka sendiri di aplikasi.
- Pelacakan - Peristiwa yang terkait dengan operasi yang ditulis menggunakan
DiaganosticSource
danActivity
. Jejak dari sumber diagnostik umumnya digunakan untuk mengumpulkan telemetri aplikasi oleh pustaka seperti Application Insights dan OpenTelemetry. - Metrik - Representasi pengukuran data selama interval waktu, misalnya, permintaan per detik. Metrik dipancarkan menggunakan
EventCounter
dan dapat diamati menggunakan alat baris perintah penghitung dotnet atau dengan Application Insights.
Pencatatan
Layanan gRPC dan log tulis klien gRPC menggunakan pengelogan .NET Core. Log adalah tempat yang baik untuk memulai saat men-debug perilaku tak terduga di aplikasi layanan dan klien.
Pengelogan layanan gRPC
Peringatan
Log sisi server mungkin berisi informasi sensitif dari aplikasi Anda. Jangan pernah memposting log mentah dari aplikasi produksi ke forum publik seperti GitHub.
Karena layanan gRPC dihosting di ASP.NET Core, layanan ini menggunakan sistem pengelogan ASP.NET Core. Dalam konfigurasi default, gRPC mencatat informasi minimal, tetapi pengelogan dapat dikonfigurasi. Lihat dokumentasi tentang pengelogan ASP.NET Core untuk detail tentang mengonfigurasi pengelogan ASP.NET Core.
gRPC menambahkan log di Grpc
bawah kategori . Untuk mengaktifkan log terperinci dari gRPC, konfigurasikan Grpc
awalan ke Debug
tingkat dalam appsettings.json
file dengan menambahkan item berikut ke LogLevel
subbagian di Logging
:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
Pengelogan juga dapat dikonfigurasi dengan Program.cs
ConfigureLogging
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Saat tidak menggunakan konfigurasi berbasis JSON, atur nilai konfigurasi berikut dalam sistem konfigurasi:
Logging:LogLevel:Grpc
=Debug
Periksa dokumentasi untuk sistem konfigurasi Anda untuk menentukan cara menentukan nilai konfigurasi berlapis. Misalnya, saat menggunakan variabel lingkungan, dua _
karakter digunakan alih-alih :
(misalnya, Logging__LogLevel__Grpc
).
Sebaiknya gunakan Debug
tingkat saat mengumpulkan diagnostik terperinci untuk aplikasi. Tingkat ini Trace
menghasilkan diagnostik tingkat rendah dan jarang diperlukan untuk mendiagnosis masalah.
Contoh output pengelogan
Berikut adalah contoh output konsol pada Debug
tingkat layanan gRPC:
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
dbug: Grpc.AspNetCore.Server.ServerCallHandler[1]
Reading message.
info: GrpcService.GreeterService[0]
Hello World
dbug: Grpc.AspNetCore.Server.ServerCallHandler[6]
Sending message.
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 1.4113ms 200 application/grpc
Mengakses log sisi server
Bagaimana log sisi server diakses tergantung pada lingkungan aplikasi.
Sebagai aplikasi konsol
Jika Anda berjalan di aplikasi konsol, pencatat Konsol harus diaktifkan secara default. Log gRPC akan muncul di konsol.
Lingkungan lainnya
Jika aplikasi disebarkan ke lingkungan lain (misalnya, Docker, Kubernetes, atau Windows Service), lihat Pengelogan di .NET Core dan ASP.NET Core untuk informasi selengkapnya tentang cara mengonfigurasi penyedia pengelogan yang cocok untuk lingkungan.
pengelogan klien gRPC
Peringatan
Log sisi klien mungkin berisi informasi sensitif dari aplikasi Anda. Jangan pernah memposting log mentah dari aplikasi produksi ke forum publik seperti GitHub.
Untuk mendapatkan log dari klien .NET, atur GrpcChannelOptions.LoggerFactory
properti saat saluran klien dibuat. Saat memanggil layanan gRPC dari aplikasi ASP.NET Core, pabrik pencatat dapat diselesaikan dari injeksi dependensi (DI):
[ApiController]
[Route("[controller]")]
public class GreetingController : ControllerBase
{
private ILoggerFactory _loggerFactory;
public GreetingController(ILoggerFactory loggerFactory)
{
_loggerFactory = loggerFactory;
}
[HttpGet]
public async Task<ActionResult<string>> Get(string name)
{
var channel = GrpcChannel.ForAddress("https://localhost:5001",
new GrpcChannelOptions { LoggerFactory = _loggerFactory });
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = name });
return Ok(reply.Message);
}
}
Cara alternatif untuk mengaktifkan pengelogan klien adalah dengan menggunakan pabrik klien gRPC untuk membuat klien. Klien gRPC yang terdaftar di pabrik klien dan diselesaikan dari DI akan secara otomatis menggunakan pengelogan aplikasi yang dikonfigurasi.
Jika aplikasi tidak menggunakan DI, buat instans baru ILoggerFactory
dengan LoggerFactory.Create. Untuk mengakses metode ini, tambahkan paket Microsoft.Extensions.Logging ke aplikasi Anda.
var loggerFactory = LoggerFactory.Create(logging =>
{
logging.AddConsole();
logging.SetMinimumLevel(LogLevel.Debug);
});
var channel = GrpcChannel.ForAddress("https://localhost:5001",
new GrpcChannelOptions { LoggerFactory = loggerFactory });
var client = Greeter.GreeterClient(channel);
Cakupan log klien gRPC
Klien gRPC menambahkan cakupan pengelogan ke log yang dilakukan selama panggilan gRPC. Cakupan memiliki metadata yang terkait dengan panggilan gRPC:
- GrpcMethodType - Jenis metode gRPC. Nilai yang mungkin adalah nama dari
Grpc.Core.MethodType
enum. Contohnya,Unary
. - GrpcUri - URI relatif dari metode gRPC. Misalnya, /greet. Greeter/SayHellos.
Contoh output pengelogan
Berikut adalah contoh output konsol pada Debug
tingkat klien gRPC:
dbug: Grpc.Net.Client.Internal.GrpcCall[1]
Starting gRPC call. Method type: 'Unary', URI: 'https://localhost:5001/Greet.Greeter/SayHello'.
dbug: Grpc.Net.Client.Internal.GrpcCall[6]
Sending message.
dbug: Grpc.Net.Client.Internal.GrpcCall[1]
Reading message.
dbug: Grpc.Net.Client.Internal.GrpcCall[4]
Finished gRPC call.
Menelusuri
Layanan gRPC dan klien gRPC memberikan informasi tentang panggilan gRPC menggunakan DiagnosticSource dan Activity.
- .NET gRPC menggunakan aktivitas untuk mewakili panggilan gRPC.
- Peristiwa pelacakan ditulis ke sumber diagnostik di awal dan berhentinya aktivitas panggilan gRPC.
- Pelacakan tidak menangkap informasi tentang kapan pesan dikirim selama masa pakai panggilan streaming gRPC.
Pelacakan layanan gRPC
Layanan gRPC dihosting di ASP.NET Core, yang melaporkan peristiwa tentang permintaan HTTP masuk. Metadata spesifik gRPC ditambahkan ke diagnostik permintaan HTTP yang ada yang disediakan ASP.NET Core.
- Nama sumber diagnostik adalah
Microsoft.AspNetCore
. - Nama aktivitas adalah
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
grpc.method
. - Kode status panggilan gRPC ketika selesai ditambahkan sebagai tag dengan nama
grpc.status_code
.
- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
Pelacakan klien gRPC
Klien .NET gRPC menggunakan HttpClient
untuk melakukan panggilan gRPC. Meskipun HttpClient
menulis peristiwa diagnostik, klien .NET gRPC menyediakan sumber, aktivitas, dan peristiwa diagnostik kustom sehingga informasi lengkap tentang panggilan gRPC dapat dikumpulkan.
- Nama sumber diagnostik adalah
Grpc.Net.Client
. - Nama aktivitas adalah
Grpc.Net.Client.GrpcOut
.- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
grpc.method
. - Kode status panggilan gRPC ketika selesai ditambahkan sebagai tag dengan nama
grpc.status_code
.
- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
Mengumpulkan pelacakan
Cara term mudah untuk digunakan DiagnosticSource
adalah dengan mengonfigurasi pustaka telemetri seperti Application Insights atau OpenTelemetry di aplikasi Anda. Pustaka akan memproses informasi tentang panggilan gRPC bersama telemetri aplikasi lain.
Pelacakan dapat dilihat dalam layanan terkelola seperti Application Insights, atau dijalankan sebagai sistem pelacakan terdistribusi Anda sendiri. OpenTelemetry mendukung ekspor data pelacakan ke Jaeger dan Zipkin.
DiagnosticSource
dapat menggunakan peristiwa pelacakan dalam kode menggunakan DiagnosticListener
. Untuk informasi tentang mendengarkan sumber diagnostik dengan kode, lihat panduan pengguna DiagnosticSource.
Catatan
Pustaka telemetri saat ini tidak menangkap telemetri spesifik Grpc.Net.Client.GrpcOut
gRPC. Bekerja untuk meningkatkan pustaka telemetri yang menangkap pelacakan ini sedang berlangsung.
Metrik
Metrik adalah representasi pengukuran data selama interval waktu, misalnya, permintaan per detik. Data metrik memungkinkan pengamatan status aplikasi pada tingkat tinggi. Metrik .NET gRPC dipancarkan menggunakan EventCounter
.
Metrik layanan gRPC
Metrik server gRPC dilaporkan pada Grpc.AspNetCore.Server
sumber peristiwa.
Nama | Deskripsi |
---|---|
total-calls |
Total Panggilan |
current-calls |
Panggilan Saat Ini |
calls-failed |
Total Panggilan Gagal |
calls-deadline-exceeded |
Total Tenggat Waktu Panggilan Terlampaui |
messages-sent |
Total Pesan Terkirim |
messages-received |
Total Pesan yang Diterima |
calls-unimplemented |
Total Panggilan Yang Tidak Di-unimplementasi |
ASP.NET Core juga menyediakan metriknya sendiri pada Microsoft.AspNetCore.Hosting
sumber peristiwa.
Metrik klien gRPC
Metrik klien gRPC dilaporkan pada Grpc.Net.Client
sumber peristiwa.
Nama | Deskripsi |
---|---|
total-calls |
Total Panggilan |
current-calls |
Panggilan Saat Ini |
calls-failed |
Total Panggilan Gagal |
calls-deadline-exceeded |
Total Tenggat Waktu Panggilan Terlampaui |
messages-sent |
Total Pesan Terkirim |
messages-received |
Total Pesan yang Diterima |
Mengamati metrik
penghitung dotnet adalah alat pemantauan performa untuk pemantauan kesehatan ad-hoc dan penyelidikan performa tingkat pertama. Pantau aplikasi .NET dengan atau Grpc.AspNetCore.Server
Grpc.Net.Client
sebagai nama penyedia.
> dotnet-counters monitor --process-id 1902 Grpc.AspNetCore.Server
Press p to pause, r to resume, q to quit.
Status: Running
[Grpc.AspNetCore.Server]
Total Calls 300
Current Calls 5
Total Calls Failed 0
Total Calls Deadline Exceeded 0
Total Messages Sent 295
Total Messages Received 300
Total Calls Unimplemented 0
Cara lain untuk mengamati metrik gRPC adalah dengan menangkap data penghitung menggunakan paket Microsoft.ApplicationInsights.EventCounterCollector Application Insights. Setelah disiapkan, Application Insights mengumpulkan penghitung .NET umum saat runtime. Penghitung gRPC tidak dikumpulkan secara default, tetapi App Insights dapat disesuaikan untuk menyertakan penghitung tambahan.
Tentukan penghitung gRPC untuk Application Insight yang akan dikumpulkan di Startup.cs
:
using Microsoft.ApplicationInsights.Extensibility.EventCounterCollector;
public void ConfigureServices(IServiceCollection services)
{
//... other code...
services.ConfigureTelemetryModule<EventCounterCollectionModule>(
(module, o) =>
{
// Configure App Insights to collect gRPC counters gRPC services hosted in an ASP.NET Core app
module.Counters.Add(new EventCounterCollectionRequest("Grpc.AspNetCore.Server", "current-calls"));
module.Counters.Add(new EventCounterCollectionRequest("Grpc.AspNetCore.Server", "total-calls"));
module.Counters.Add(new EventCounterCollectionRequest("Grpc.AspNetCore.Server", "calls-failed"));
}
);
}
Sumber Daya Tambahan:
Artikel ini menyediakan panduan untuk mengumpulkan diagnostik dari aplikasi gRPC untuk membantu memecahkan masalah. Topik yang dibahas meliputi:
- Pengelogan - Log terstruktur yang ditulis ke pengelogan .NET Core. ILogger digunakan oleh kerangka kerja aplikasi untuk menulis log, dan oleh pengguna untuk pengelogan mereka sendiri di aplikasi.
- Pelacakan - Peristiwa yang terkait dengan operasi yang ditulis menggunakan
DiaganosticSource
danActivity
. Jejak dari sumber diagnostik umumnya digunakan untuk mengumpulkan telemetri aplikasi oleh pustaka seperti Application Insights dan OpenTelemetry. - Metrik - Representasi pengukuran data selama interval waktu, misalnya, permintaan per detik. Metrik dipancarkan menggunakan
EventCounter
dan dapat diamati menggunakan alat baris perintah penghitung dotnet atau dengan Application Insights.
Pencatatan
Layanan gRPC dan log tulis klien gRPC menggunakan pengelogan .NET Core. Log adalah tempat yang baik untuk memulai saat men-debug perilaku tak terduga di aplikasi layanan dan klien.
Pengelogan layanan gRPC
Peringatan
Log sisi server mungkin berisi informasi sensitif dari aplikasi Anda. Jangan pernah memposting log mentah dari aplikasi produksi ke forum publik seperti GitHub.
Karena layanan gRPC dihosting di ASP.NET Core, layanan ini menggunakan sistem pengelogan ASP.NET Core. Dalam konfigurasi default, gRPC mencatat informasi minimal, tetapi pengelogan dapat dikonfigurasi. Lihat dokumentasi tentang pengelogan ASP.NET Core untuk detail tentang mengonfigurasi pengelogan ASP.NET Core.
gRPC menambahkan log di Grpc
bawah kategori . Untuk mengaktifkan log terperinci dari gRPC, konfigurasikan Grpc
awalan ke Debug
tingkat dalam file Anda appsettings.json
dengan menambahkan item berikut ke LogLevel
subbagian di Logging
:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
Anda juga dapat mengonfigurasi ini dengan Startup.cs
ConfigureLogging
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Jika Anda tidak menggunakan konfigurasi berbasis JSON, atur nilai konfigurasi berikut dalam sistem konfigurasi Anda:
Logging:LogLevel:Grpc
=Debug
Periksa dokumentasi untuk sistem konfigurasi Anda untuk menentukan cara menentukan nilai konfigurasi berlapis. Misalnya, saat menggunakan variabel lingkungan, dua _
karakter digunakan alih-alih :
(misalnya, Logging__LogLevel__Grpc
).
Sebaiknya gunakan Debug
tingkat saat mengumpulkan diagnostik terperinci untuk aplikasi. Tingkat ini Trace
menghasilkan diagnostik tingkat rendah dan jarang diperlukan untuk mendiagnosis masalah.
Contoh output pengelogan
Berikut adalah contoh output konsol pada Debug
tingkat layanan gRPC:
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
dbug: Grpc.AspNetCore.Server.ServerCallHandler[1]
Reading message.
info: GrpcService.GreeterService[0]
Hello World
dbug: Grpc.AspNetCore.Server.ServerCallHandler[6]
Sending message.
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 1.4113ms 200 application/grpc
Mengakses log sisi server
Cara Anda mengakses log sisi server bergantung pada lingkungan tempat Anda menjalankan.
Sebagai aplikasi konsol
Jika Anda berjalan di aplikasi konsol, pencatat Konsol harus diaktifkan secara default. Log gRPC akan muncul di konsol.
Lingkungan lainnya
Jika aplikasi disebarkan ke lingkungan lain (misalnya, Docker, Kubernetes, atau Windows Service), lihat Pengelogan di .NET Core dan ASP.NET Core untuk informasi selengkapnya tentang cara mengonfigurasi penyedia pengelogan yang cocok untuk lingkungan.
pengelogan klien gRPC
Peringatan
Log sisi klien mungkin berisi informasi sensitif dari aplikasi Anda. Jangan pernah memposting log mentah dari aplikasi produksi ke forum publik seperti GitHub.
Untuk mendapatkan log dari klien .NET, atur GrpcChannelOptions.LoggerFactory
properti saat saluran klien dibuat. Saat memanggil layanan gRPC dari aplikasi ASP.NET Core, pabrik pencatat dapat diselesaikan dari injeksi dependensi (DI):
[ApiController]
[Route("[controller]")]
public class GreetingController : ControllerBase
{
private ILoggerFactory _loggerFactory;
public GreetingController(ILoggerFactory loggerFactory)
{
_loggerFactory = loggerFactory;
}
[HttpGet]
public async Task<ActionResult<string>> Get(string name)
{
var channel = GrpcChannel.ForAddress("https://localhost:5001",
new GrpcChannelOptions { LoggerFactory = _loggerFactory });
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = name });
return Ok(reply.Message);
}
}
Cara alternatif untuk mengaktifkan pengelogan klien adalah dengan menggunakan pabrik klien gRPC untuk membuat klien. Klien gRPC yang terdaftar di pabrik klien dan diselesaikan dari DI akan secara otomatis menggunakan pengelogan aplikasi yang dikonfigurasi.
Jika aplikasi Anda tidak menggunakan DI, maka Anda dapat membuat instans baru ILoggerFactory
dengan LoggerFactory.Create. Untuk mengakses metode ini, tambahkan paket Microsoft.Extensions.Logging ke aplikasi Anda.
var loggerFactory = LoggerFactory.Create(logging =>
{
logging.AddConsole();
logging.SetMinimumLevel(LogLevel.Debug);
});
var channel = GrpcChannel.ForAddress("https://localhost:5001",
new GrpcChannelOptions { LoggerFactory = loggerFactory });
var client = Greeter.GreeterClient(channel);
Cakupan log klien gRPC
Klien gRPC menambahkan cakupan pengelogan ke log yang dilakukan selama panggilan gRPC. Cakupan memiliki metadata yang terkait dengan panggilan gRPC:
- GrpcMethodType - Jenis metode gRPC. Nilai yang mungkin adalah nama dari
Grpc.Core.MethodType
enum. Contohnya,Unary
. - GrpcUri - URI relatif dari metode gRPC. Misalnya, /greet. Greeter/SayHellos.
Contoh output pengelogan
Berikut adalah contoh output konsol pada Debug
tingkat klien gRPC:
dbug: Grpc.Net.Client.Internal.GrpcCall[1]
Starting gRPC call. Method type: 'Unary', URI: 'https://localhost:5001/Greet.Greeter/SayHello'.
dbug: Grpc.Net.Client.Internal.GrpcCall[6]
Sending message.
dbug: Grpc.Net.Client.Internal.GrpcCall[1]
Reading message.
dbug: Grpc.Net.Client.Internal.GrpcCall[4]
Finished gRPC call.
Menelusuri
Layanan gRPC dan klien gRPC memberikan informasi tentang panggilan gRPC menggunakan DiagnosticSource dan Activity.
- .NET gRPC menggunakan aktivitas untuk mewakili panggilan gRPC.
- Peristiwa pelacakan ditulis ke sumber diagnostik di awal dan berhentinya aktivitas panggilan gRPC.
- Pelacakan tidak menangkap informasi tentang kapan pesan dikirim selama masa pakai panggilan streaming gRPC.
Pelacakan layanan gRPC
Layanan gRPC dihosting di ASP.NET Core, yang melaporkan peristiwa tentang permintaan HTTP masuk. Metadata spesifik gRPC ditambahkan ke diagnostik permintaan HTTP yang ada yang disediakan ASP.NET Core.
- Nama sumber diagnostik adalah
Microsoft.AspNetCore
. - Nama aktivitas adalah
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
grpc.method
. - Kode status panggilan gRPC ketika selesai ditambahkan sebagai tag dengan nama
grpc.status_code
.
- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
Pelacakan klien gRPC
Klien .NET gRPC menggunakan HttpClient
untuk melakukan panggilan gRPC. Meskipun HttpClient
menulis peristiwa diagnostik, klien .NET gRPC menyediakan sumber, aktivitas, dan peristiwa diagnostik kustom sehingga informasi lengkap tentang panggilan gRPC dapat dikumpulkan.
- Nama sumber diagnostik adalah
Grpc.Net.Client
. - Nama aktivitas adalah
Grpc.Net.Client.GrpcOut
.- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
grpc.method
. - Kode status panggilan gRPC ketika selesai ditambahkan sebagai tag dengan nama
grpc.status_code
.
- Nama metode gRPC yang dipanggil oleh panggilan gRPC ditambahkan sebagai tag dengan nama
Mengumpulkan pelacakan
Cara term mudah untuk digunakan DiagnosticSource
adalah dengan mengonfigurasi pustaka telemetri seperti Application Insights atau OpenTelemetry di aplikasi Anda. Pustaka akan memproses informasi tentang panggilan gRPC bersama telemetri aplikasi lain.
Pelacakan dapat dilihat dalam layanan terkelola seperti Application Insights, atau Anda dapat memilih untuk menjalankan sistem pelacakan terdistribusi Anda sendiri. OpenTelemetry mendukung ekspor data pelacakan ke Jaeger dan Zipkin.
DiagnosticSource
dapat menggunakan peristiwa pelacakan dalam kode menggunakan DiagnosticListener
. Untuk informasi tentang mendengarkan sumber diagnostik dengan kode, lihat panduan pengguna DiagnosticSource.
Catatan
Pustaka telemetri saat ini tidak menangkap telemetri spesifik Grpc.Net.Client.GrpcOut
gRPC. Bekerja untuk meningkatkan pustaka telemetri yang menangkap pelacakan ini sedang berlangsung.
Metrik
Metrik adalah representasi pengukuran data selama interval waktu, misalnya, permintaan per detik. Data metrik memungkinkan pengamatan status aplikasi pada tingkat tinggi. Metrik .NET gRPC dipancarkan menggunakan EventCounter
.
Metrik layanan gRPC
Metrik server gRPC dilaporkan pada Grpc.AspNetCore.Server
sumber peristiwa.
Nama | Deskripsi |
---|---|
total-calls |
Total Panggilan |
current-calls |
Panggilan Saat Ini |
calls-failed |
Total Panggilan Gagal |
calls-deadline-exceeded |
Total Tenggat Waktu Panggilan Terlampaui |
messages-sent |
Total Pesan Terkirim |
messages-received |
Total Pesan yang Diterima |
calls-unimplemented |
Total Panggilan Yang Tidak Di-unimplementasi |
ASP.NET Core juga menyediakan metriknya sendiri pada Microsoft.AspNetCore.Hosting
sumber peristiwa.
Metrik klien gRPC
Metrik klien gRPC dilaporkan pada Grpc.Net.Client
sumber peristiwa.
Nama | Deskripsi |
---|---|
total-calls |
Total Panggilan |
current-calls |
Panggilan Saat Ini |
calls-failed |
Total Panggilan Gagal |
calls-deadline-exceeded |
Total Tenggat Waktu Panggilan Terlampaui |
messages-sent |
Total Pesan Terkirim |
messages-received |
Total Pesan yang Diterima |
Mengamati metrik
penghitung dotnet adalah alat pemantauan performa untuk pemantauan kesehatan ad-hoc dan penyelidikan performa tingkat pertama. Pantau aplikasi .NET dengan atau Grpc.AspNetCore.Server
Grpc.Net.Client
sebagai nama penyedia.
> dotnet-counters monitor --process-id 1902 Grpc.AspNetCore.Server
Press p to pause, r to resume, q to quit.
Status: Running
[Grpc.AspNetCore.Server]
Total Calls 300
Current Calls 5
Total Calls Failed 0
Total Calls Deadline Exceeded 0
Total Messages Sent 295
Total Messages Received 300
Total Calls Unimplemented 0
Cara lain untuk mengamati metrik gRPC adalah dengan menangkap data penghitung menggunakan paket Microsoft.ApplicationInsights.EventCounterCollector Application Insights. Setelah disiapkan, Application Insights mengumpulkan penghitung .NET umum saat runtime. Penghitung gRPC tidak dikumpulkan secara default, tetapi App Insights dapat disesuaikan untuk menyertakan penghitung tambahan.
Tentukan penghitung gRPC untuk Application Insight yang akan dikumpulkan di Startup.cs
:
using Microsoft.ApplicationInsights.Extensibility.EventCounterCollector;
public void ConfigureServices(IServiceCollection services)
{
//... other code...
services.ConfigureTelemetryModule<EventCounterCollectionModule>(
(module, o) =>
{
// Configure App Insights to collect gRPC counters gRPC services hosted in an ASP.NET Core app
module.Counters.Add(new EventCounterCollectionRequest("Grpc.AspNetCore.Server", "current-calls"));
module.Counters.Add(new EventCounterCollectionRequest("Grpc.AspNetCore.Server", "total-calls"));
module.Counters.Add(new EventCounterCollectionRequest("Grpc.AspNetCore.Server", "calls-failed"));
}
);
}
Sumber Daya Tambahan:
ASP.NET Core