.NET üzerinde gRPC'de günlüğe kaydetme ve tanılama
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Yayınlayan James Newton-King
Bu makalede, sorunları gidermeye yardımcı olmak için gRPC uygulamasından tanılama toplamaya yönelik yönergeler sağlanır. Ele alınan konular:
- Günlüğe kaydetme - .NET Core günlüğüne yazılan yapılandırılmış günlükler. ILogger , uygulama çerçeveleri tarafından günlükleri yazmak için ve kullanıcılar tarafından bir uygulamada kendi günlükleri için kullanılır.
- İzleme - ve
Activity
kullanılarakDiaganosticSource
yazılan bir işlemle ilgili olaylar. Tanılama kaynağından gelen izlemeler genellikle Application Insights ve OpenTelemetry gibi kitaplıklar tarafından uygulama telemetrisi toplamak için kullanılır. - Ölçümler - Veri ölçülerinin zaman aralıkları (örneğin, saniye başına istekler) içinde gösterimi. Ölçümler kullanılarak
EventCounter
gönderilir ve dotnet-counters komut satırı aracı kullanılarak veya Application Insights ile gözlemlenebilir.
Günlük Kaydı
gRPC hizmetleri ve gRPC istemcisi .NET Core günlüğü kullanarak günlükleri yazar. Günlükler, hizmet ve istemci uygulamalarında beklenmeyen davranış hatalarını ayıklarken başlamak için iyi bir yerdir.
gRPC hizmetlerini günlüğe kaydetme
Uyarı
Sunucu tarafı günlükleri, uygulamanızdan hassas bilgiler içerebilir. Üretim uygulamalarından GitHub gibi genel forumlara asla ham günlük göndermeyin.
gRPC hizmetleri ASP.NET Core'da barındırıldığından ASP.NET Core günlük sistemini kullanır. Varsayılan yapılandırmada gRPC en az bilgiyi günlüğe kaydeder, ancak günlüğe kaydetme yapılandırılabilir. ASP.NET Core günlüğünü yapılandırma hakkında ayrıntılı bilgi için ASP.NET Core günlüğü belgelerine bakın.
gRPC, kategori altına Grpc
günlük ekler. gRPC'den ayrıntılı günlükleri etkinleştirmek için dosyasındaki Grpc
alt bölüme Debug
Logging
aşağıdaki öğeleri ekleyerek ön ekleri dosyadaki LogLevel
düzeye appsettings.json
yapılandırın:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
Günlüğe kaydetme özelliği ile ConfigureLogging
de Program.cs
yapılandırılabilir:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
JSON tabanlı yapılandırmayı kullanmadığınızda, yapılandırma sisteminde aşağıdaki yapılandırma değerini ayarlayın:
Logging:LogLevel:Grpc
=Debug
İç içe yapılandırma değerlerinin nasıl belirtileceğini belirlemek için yapılandırma sisteminizin belgelerine bakın. Örneğin, ortam değişkenleri kullanılırken yerine iki _
karakter kullanılır :
(örneğin, Logging__LogLevel__Grpc
).
Bir uygulama için ayrıntılı tanılamaları toplarken düzeyi kullanmanızı Debug
öneririz. Trace
Düzeyi düşük düzeyli tanılamalar oluşturur ve sorunları tanılamak için nadiren gereklidir.
Örnek günlük çıkışı
Bir gRPC hizmeti düzeyinde konsol çıkışı Debug
örneği aşağıda verilmiştir:
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
Sunucu tarafı günlüklerine erişme
Sunucu tarafı günlüklerine nasıl erişilir, uygulamanın ortamına bağlıdır.
Konsol uygulaması olarak
Konsol uygulamasında çalıştırıyorsanız Konsol günlükçüsunun varsayılan olarak etkinleştirilmesi gerekir. gRPC günlükleri konsolunda görünür.
Diğer ortamlar
Uygulama başka bir ortama (örneğin Docker, Kubernetes veya Windows Hizmeti) dağıtıldıysa, ortama uygun günlük sağlayıcılarını yapılandırma hakkında daha fazla bilgi için bkz . .NET Core'da oturum açma ve ASP.NET Core .
gRPC istemci günlüğü
Uyarı
İstemci tarafı günlükleri, uygulamanızdan hassas bilgiler içerebilir. Üretim uygulamalarından GitHub gibi genel forumlara asla ham günlük göndermeyin.
.NET istemcisinden günlükleri almak için, istemcinin GrpcChannelOptions.LoggerFactory
kanalı oluşturulduğunda özelliğini ayarlayın. ASP.NET Core uygulamasından gRPC hizmetini çağırırken günlükçü fabrikası bağımlılık ekleme (DI) ile çözülebilir:
[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);
}
}
İstemci günlüğünü etkinleştirmenin alternatif bir yolu, istemciyi oluşturmak için gRPC istemci fabrikasını kullanmaktır. İstemci fabrikasına kaydedilen ve DI'den çözümlenen bir gRPC istemcisi otomatik olarak uygulamanın yapılandırılmış günlüğünü kullanır.
Uygulama DI kullanmıyorsa ile LoggerFactory.Createyeni ILoggerFactory
bir örnek oluşturun. Bu yönteme erişmek için Microsoft.Extensions.Logging paketini uygulamanıza ekleyin.
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);
gRPC istemci günlük kapsamları
gRPC istemcisi, gRPC çağrısı sırasında yapılan günlüklere bir günlük kapsamı ekler. Kapsamın gRPC çağrısıyla ilgili meta verileri vardır:
- GrpcMethodType - gRPC yöntem türü. Olası değerler enum'dan alınan
Grpc.Core.MethodType
adlardır. Örneğin,Unary
. - GrpcUri - gRPC yönteminin göreli URI'si. Örneğin, /greet. Greeter/SayHellos.
Örnek günlük çıkışı
Burada gRPC istemcisi düzeyinde konsol çıkışı Debug
örneği verilmiştir:
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.
İzleme
gRPC hizmetleri ve gRPC istemcisi ve Activitykullanarak DiagnosticSource gRPC çağrıları hakkında bilgi sağlar.
- .NET gRPC, gRPC çağrısını temsil eden bir etkinlik kullanır.
- İzleme olayları gRPC çağrı etkinliğinin başlangıcında ve durdurulmasında tanılama kaynağına yazılır.
- İzleme, iletilerin gRPC akış çağrılarının ömrü boyunca ne zaman gönderildiğiyle ilgili bilgileri yakalamaz.
gRPC hizmeti izleme
gRPC hizmetleri, gelen HTTP istekleriyle ilgili olayları bildiren ASP.NET Core'da barındırılır. gRPC'ye özgü meta veriler, ASP.NET Core'un sağladığı mevcut HTTP isteği tanılamalarına eklenir.
- Tanılama kaynağı adıdır
Microsoft.AspNetCore
. - Etkinlik adı şeklindedir
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
grpc.method
bir etiket olarak eklenir. - Tamamlandıktan sonra gRPC çağrısının durum kodu adlı
grpc.status_code
bir etiket olarak eklenir.
- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
gRPC istemci izleme
.NET gRPC istemcisi gRPC çağrıları yapmak için kullanır HttpClient
. Tanılama olayları yazsa da HttpClient
, .NET gRPC istemcisi bir gRPC çağrısı hakkındaki tüm bilgilerin toplanabilmesi için özel bir tanılama kaynağı, etkinlik ve olaylar sağlar.
- Tanılama kaynağı adıdır
Grpc.Net.Client
. - Etkinlik adı şeklindedir
Grpc.Net.Client.GrpcOut
.- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
grpc.method
bir etiket olarak eklenir. - Tamamlandıktan sonra gRPC çağrısının durum kodu adlı
grpc.status_code
bir etiket olarak eklenir.
- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
İzlemeyi toplama
Kullanmanın DiagnosticSource
en kolay yolu, uygulamanızda Application Insights veya OpenTelemetry gibi bir telemetri kitaplığı yapılandırmaktır. Kitaplık, diğer uygulama telemetrisi yanında gRPC çağrıları hakkındaki bilgileri işler.
İzleme, Application Insights gibi yönetilen bir hizmette görüntülenebilir veya kendi dağıtılmış izleme sisteminiz olarak çalıştırılabilir. OpenTelemetry, izleme verilerini Jaeger ve Zipkin'e aktarmayı destekler.
DiagnosticSource
kullanarak DiagnosticListener
koddaki izleme olaylarını kullanabilir. Bir tanılama kaynağını kodla dinleme hakkında bilgi için DiagnosticSource kullanıcı kılavuzuna bakın.
Not
Telemetri kitaplıkları şu anda gRPC'ye özgü Grpc.Net.Client.GrpcOut
telemetriyi yakalamamaktadır. Bu izlemeyi yakalayan telemetri kitaplıklarını geliştirmeye yönelik çalışmalar devam ediyor.
Ölçümler
Ölçümler, zaman aralıkları (örneğin saniye başına istekler) içindeki veri ölçülerinin bir gösterimidir. Ölçüm verileri, bir uygulamanın durumunun yüksek düzeyde gözlemlenmesine olanak tanır. .NET gRPC ölçümleri kullanılarak EventCounter
gönderilir.
gRPC hizmet ölçümleri
gRPC sunucu ölçümleri olay kaynağında Grpc.AspNetCore.Server
bildirilir.
Veri Akışı Adı | Açıklama |
---|---|
total-calls |
Toplam Arama Sayısı |
current-calls |
Geçerli Aramalar |
calls-failed |
Toplam Çağrı Başarısız Oldu |
calls-deadline-exceeded |
Toplam Çağrı Son Tarihi Aşıldı |
messages-sent |
Gönderilen Toplam İleti Sayısı |
messages-received |
Alınan Toplam İleti Sayısı |
calls-unimplemented |
Tanımlanamayan Toplam Çağrı Sayısı |
ASP.NET Core, olay kaynağında Microsoft.AspNetCore.Hosting
kendi ölçümlerini de sağlar.
gRPC istemci ölçümleri
gRPC istemci ölçümleri olay kaynağında Grpc.Net.Client
bildirilir.
Veri Akışı Adı | Açıklama |
---|---|
total-calls |
Toplam Arama Sayısı |
current-calls |
Geçerli Aramalar |
calls-failed |
Toplam Çağrı Başarısız Oldu |
calls-deadline-exceeded |
Toplam Çağrı Son Tarihi Aşıldı |
messages-sent |
Gönderilen Toplam İleti Sayısı |
messages-received |
Alınan Toplam İleti Sayısı |
Ölçümleri gözlemleme
dotnet-counters , geçici sistem durumu izleme ve birinci düzey performans araştırması için bir performans izleme aracıdır. Sağlayıcı adı olarak veya Grpc.Net.Client
olan Grpc.AspNetCore.Server
bir .NET uygulamasını izleyin.
> 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
gRPC ölçümlerini gözlemlemenin bir diğer yolu da Application Insights'ın Microsoft.ApplicationInsights.EventCounterCollector paketini kullanarak sayaç verilerini yakalamaktır. Kurulumdan sonra Application Insights çalışma zamanında yaygın .NET sayaçlarını toplar. gRPC'nin sayaçları varsayılan olarak toplanmaz, ancak App Insights ek sayaçlar içerecek şekilde özelleştirilebilir.
Application Insight'ın içinde toplanacak Startup.cs
gRPC sayaçlarını belirtin:
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"));
}
);
}
Ek kaynaklar
Bu makalede, sorunları gidermeye yardımcı olmak için gRPC uygulamasından tanılama toplamaya yönelik yönergeler sağlanır. Ele alınan konular:
- Günlüğe kaydetme - .NET Core günlüğüne yazılan yapılandırılmış günlükler. ILogger , uygulama çerçeveleri tarafından günlükleri yazmak için ve kullanıcılar tarafından bir uygulamada kendi günlükleri için kullanılır.
- İzleme - ve
Activity
kullanılarakDiaganosticSource
yazılan bir işlemle ilgili olaylar. Tanılama kaynağından gelen izlemeler genellikle Application Insights ve OpenTelemetry gibi kitaplıklar tarafından uygulama telemetrisi toplamak için kullanılır. - Ölçümler - Veri ölçülerinin zaman aralıkları (örneğin, saniye başına istekler) içinde gösterimi. Ölçümler kullanılarak
EventCounter
gönderilir ve dotnet-counters komut satırı aracı kullanılarak veya Application Insights ile gözlemlenebilir.
Günlük Kaydı
gRPC hizmetleri ve gRPC istemcisi .NET Core günlüğü kullanarak günlükleri yazar. Günlükler, hizmet ve istemci uygulamalarında beklenmeyen davranış hatalarını ayıklarken başlamak için iyi bir yerdir.
gRPC hizmetlerini günlüğe kaydetme
Uyarı
Sunucu tarafı günlükleri, uygulamanızdan hassas bilgiler içerebilir. Üretim uygulamalarından GitHub gibi genel forumlara asla ham günlük göndermeyin.
gRPC hizmetleri ASP.NET Core'da barındırıldığından ASP.NET Core günlük sistemini kullanır. Varsayılan yapılandırmada gRPC en az bilgiyi günlüğe kaydeder, ancak günlüğe kaydetme yapılandırılabilir. ASP.NET Core günlüğünü yapılandırma hakkında ayrıntılı bilgi için ASP.NET Core günlüğü belgelerine bakın.
gRPC, kategori altına Grpc
günlük ekler. gRPC'den ayrıntılı günlükleri etkinleştirmek için dosyasındaki Grpc
alt bölüme Debug
Logging
aşağıdaki öğeleri ekleyerek ön ekleri dosyanızdaki appsettings.json
düzeye LogLevel
yapılandırın:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
Bunu ile ConfigureLogging
de Startup.cs
yapılandırabilirsiniz:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
JSON tabanlı yapılandırma kullanmıyorsanız yapılandırma sisteminizde aşağıdaki yapılandırma değerini ayarlayın:
Logging:LogLevel:Grpc
=Debug
İç içe yapılandırma değerlerinin nasıl belirtileceğini belirlemek için yapılandırma sisteminizin belgelerine bakın. Örneğin, ortam değişkenleri kullanılırken yerine iki _
karakter kullanılır :
(örneğin, Logging__LogLevel__Grpc
).
Bir uygulama için ayrıntılı tanılamaları toplarken düzeyi kullanmanızı Debug
öneririz. Trace
Düzeyi düşük düzeyli tanılamalar oluşturur ve sorunları tanılamak için nadiren gereklidir.
Örnek günlük çıkışı
Bir gRPC hizmeti düzeyinde konsol çıkışı Debug
örneği aşağıda verilmiştir:
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
Sunucu tarafı günlüklerine erişme
Sunucu tarafı günlüklerine nasıl erişebileceğiniz, çalıştırdığınız ortama bağlıdır.
Konsol uygulaması olarak
Konsol uygulamasında çalıştırıyorsanız Konsol günlükçüsunun varsayılan olarak etkinleştirilmesi gerekir. gRPC günlükleri konsolunda görünür.
Diğer ortamlar
Uygulama başka bir ortama (örneğin Docker, Kubernetes veya Windows Hizmeti) dağıtıldıysa, ortama uygun günlük sağlayıcılarını yapılandırma hakkında daha fazla bilgi için bkz . .NET Core'da oturum açma ve ASP.NET Core .
gRPC istemci günlüğü
Uyarı
İstemci tarafı günlükleri, uygulamanızdan hassas bilgiler içerebilir. Üretim uygulamalarından GitHub gibi genel forumlara asla ham günlük göndermeyin.
.NET istemcisinden günlükleri almak için, istemcinin GrpcChannelOptions.LoggerFactory
kanalı oluşturulduğunda özelliğini ayarlayın. ASP.NET Core uygulamasından gRPC hizmetini çağırırken günlükçü fabrikası bağımlılık ekleme (DI) ile çözülebilir:
[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);
}
}
İstemci günlüğünü etkinleştirmenin alternatif bir yolu, istemciyi oluşturmak için gRPC istemci fabrikasını kullanmaktır. İstemci fabrikasına kaydedilen ve DI'den çözümlenen bir gRPC istemcisi otomatik olarak uygulamanın yapılandırılmış günlüğünü kullanır.
Uygulamanız DI kullanmıyorsa ile LoggerFactory.Createyeni ILoggerFactory
bir örnek oluşturabilirsiniz. Bu yönteme erişmek için Microsoft.Extensions.Logging paketini uygulamanıza ekleyin.
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);
gRPC istemci günlük kapsamları
gRPC istemcisi, gRPC çağrısı sırasında yapılan günlüklere bir günlük kapsamı ekler. Kapsamın gRPC çağrısıyla ilgili meta verileri vardır:
- GrpcMethodType - gRPC yöntem türü. Olası değerler enum'dan alınan
Grpc.Core.MethodType
adlardır. Örneğin,Unary
. - GrpcUri - gRPC yönteminin göreli URI'si. Örneğin, /greet. Greeter/SayHellos.
Örnek günlük çıkışı
Burada gRPC istemcisi düzeyinde konsol çıkışı Debug
örneği verilmiştir:
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.
İzleme
gRPC hizmetleri ve gRPC istemcisi ve Activitykullanarak DiagnosticSource gRPC çağrıları hakkında bilgi sağlar.
- .NET gRPC, gRPC çağrısını temsil eden bir etkinlik kullanır.
- İzleme olayları gRPC çağrı etkinliğinin başlangıcında ve durdurulmasında tanılama kaynağına yazılır.
- İzleme, iletilerin gRPC akış çağrılarının ömrü boyunca ne zaman gönderildiğiyle ilgili bilgileri yakalamaz.
gRPC hizmeti izleme
gRPC hizmetleri, gelen HTTP istekleriyle ilgili olayları bildiren ASP.NET Core'da barındırılır. gRPC'ye özgü meta veriler, ASP.NET Core'un sağladığı mevcut HTTP isteği tanılamalarına eklenir.
- Tanılama kaynağı adıdır
Microsoft.AspNetCore
. - Etkinlik adı şeklindedir
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
grpc.method
bir etiket olarak eklenir. - Tamamlandıktan sonra gRPC çağrısının durum kodu adlı
grpc.status_code
bir etiket olarak eklenir.
- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
gRPC istemci izleme
.NET gRPC istemcisi gRPC çağrıları yapmak için kullanır HttpClient
. Tanılama olayları yazsa da HttpClient
, .NET gRPC istemcisi bir gRPC çağrısı hakkındaki tüm bilgilerin toplanabilmesi için özel bir tanılama kaynağı, etkinlik ve olaylar sağlar.
- Tanılama kaynağı adıdır
Grpc.Net.Client
. - Etkinlik adı şeklindedir
Grpc.Net.Client.GrpcOut
.- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
grpc.method
bir etiket olarak eklenir. - Tamamlandıktan sonra gRPC çağrısının durum kodu adlı
grpc.status_code
bir etiket olarak eklenir.
- gRPC çağrısı tarafından çağrılan gRPC yönteminin adı, adlı
İzlemeyi toplama
Kullanmanın DiagnosticSource
en kolay yolu, uygulamanızda Application Insights veya OpenTelemetry gibi bir telemetri kitaplığı yapılandırmaktır. Kitaplık, diğer uygulama telemetrisi yanında gRPC çağrıları hakkındaki bilgileri işler.
İzleme, Application Insights gibi yönetilen bir hizmette görüntülenebilir veya kendi dağıtılmış izleme sisteminizi çalıştırmayı seçebilirsiniz. OpenTelemetry, izleme verilerini Jaeger ve Zipkin'e aktarmayı destekler.
DiagnosticSource
kullanarak DiagnosticListener
koddaki izleme olaylarını kullanabilir. Bir tanılama kaynağını kodla dinleme hakkında bilgi için DiagnosticSource kullanıcı kılavuzuna bakın.
Not
Telemetri kitaplıkları şu anda gRPC'ye özgü Grpc.Net.Client.GrpcOut
telemetriyi yakalamamaktadır. Bu izlemeyi yakalayan telemetri kitaplıklarını geliştirmeye yönelik çalışmalar devam ediyor.
Ölçümler
Ölçümler, zaman aralıkları (örneğin saniye başına istekler) içindeki veri ölçülerinin bir gösterimidir. Ölçüm verileri, bir uygulamanın durumunun yüksek düzeyde gözlemlenmesine olanak tanır. .NET gRPC ölçümleri kullanılarak EventCounter
gönderilir.
gRPC hizmet ölçümleri
gRPC sunucu ölçümleri olay kaynağında Grpc.AspNetCore.Server
bildirilir.
Veri Akışı Adı | Açıklama |
---|---|
total-calls |
Toplam Arama Sayısı |
current-calls |
Geçerli Aramalar |
calls-failed |
Toplam Çağrı Başarısız Oldu |
calls-deadline-exceeded |
Toplam Çağrı Son Tarihi Aşıldı |
messages-sent |
Gönderilen Toplam İleti Sayısı |
messages-received |
Alınan Toplam İleti Sayısı |
calls-unimplemented |
Tanımlanamayan Toplam Çağrı Sayısı |
ASP.NET Core, olay kaynağında Microsoft.AspNetCore.Hosting
kendi ölçümlerini de sağlar.
gRPC istemci ölçümleri
gRPC istemci ölçümleri olay kaynağında Grpc.Net.Client
bildirilir.
Veri Akışı Adı | Açıklama |
---|---|
total-calls |
Toplam Arama Sayısı |
current-calls |
Geçerli Aramalar |
calls-failed |
Toplam Çağrı Başarısız Oldu |
calls-deadline-exceeded |
Toplam Çağrı Son Tarihi Aşıldı |
messages-sent |
Gönderilen Toplam İleti Sayısı |
messages-received |
Alınan Toplam İleti Sayısı |
Ölçümleri gözlemleme
dotnet-counters , geçici sistem durumu izleme ve birinci düzey performans araştırması için bir performans izleme aracıdır. Sağlayıcı adı olarak veya Grpc.Net.Client
olan Grpc.AspNetCore.Server
bir .NET uygulamasını izleyin.
> 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
gRPC ölçümlerini gözlemlemenin bir diğer yolu da Application Insights'ın Microsoft.ApplicationInsights.EventCounterCollector paketini kullanarak sayaç verilerini yakalamaktır. Kurulumdan sonra Application Insights çalışma zamanında yaygın .NET sayaçlarını toplar. gRPC'nin sayaçları varsayılan olarak toplanmaz, ancak App Insights ek sayaçlar içerecek şekilde özelleştirilebilir.
Application Insight'ın içinde toplanacak Startup.cs
gRPC sayaçlarını belirtin:
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"));
}
);
}
Ek kaynaklar
ASP.NET Core