Aracılığıyla paylaş


.NET üzerinde gRPC'de günlüğe kaydetme ve tanılama

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 Activitykullanılarak DiaganosticSource yazılan bir işlemle ilgili olaylar. Tanılama kaynağından gelen izlemeler genellikle Uygulama Analizler 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 Uygulama Analizler kullanılarak 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 DebugLoggingaş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 ConfigureLoggingde 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>();
        });

ON tabanlı yapılandırma kullanmadığınızda JS, 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.methodbir etiket olarak eklenir.
    • Tamamlandıktan sonra gRPC çağrısının durum kodu adlı grpc.status_codebir etiket olarak eklenir.

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.methodbir etiket olarak eklenir.
    • Tamamlandıktan sonra gRPC çağrısının durum kodu adlı grpc.status_codebir etiket olarak eklenir.

İzlemeyi toplama

Kullanmanın DiagnosticSource en kolay yolu, uygulamanızda Application Analizler 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, Uygulama Analizler 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 DiagnosticListenerkoddaki izleme olaylarını kullanabilir. Bir tanılama kaynağını kodla dinleme hakkında bilgi için DiagnosticSource kullanıcı kılavuzuna bakın.

Dekont

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 EventCountergönderilir.

gRPC hizmet ölçümleri

gRPC sunucu ölçümleri olay kaynağında Grpc.AspNetCore.Server bildirilir.

Ad Tanım
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.

Ad Tanım
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 Analizler'ın Microsoft.Application Analizler kullanarak sayaç verilerini yakalamaktır. EventCounterCollector paketi. Kurulumdan sonra, Application Analizler çalışma zamanında yaygın .NET sayaçlarını toplar. gRPC'nin sayaçları varsayılan olarak toplanmaz, ancak Uygulama Analizler ek sayaçları içerecek şekilde özelleştirilebilir.

Application Insight'ın içinde toplanacak Startup.csgRPC 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 Activitykullanılarak DiaganosticSource yazılan bir işlemle ilgili olaylar. Tanılama kaynağından gelen izlemeler genellikle Uygulama Analizler 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 Uygulama Analizler kullanılarak 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 DebugLoggingaş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 ConfigureLoggingde 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>();
        });

ON tabanlı yapılandırma kullanmıyorsanız JSyapı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.methodbir etiket olarak eklenir.
    • Tamamlandıktan sonra gRPC çağrısının durum kodu adlı grpc.status_codebir etiket olarak eklenir.

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.methodbir etiket olarak eklenir.
    • Tamamlandıktan sonra gRPC çağrısının durum kodu adlı grpc.status_codebir etiket olarak eklenir.

İzlemeyi toplama

Kullanmanın DiagnosticSource en kolay yolu, uygulamanızda Application Analizler 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, Uygulama Analizler 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 DiagnosticListenerkoddaki izleme olaylarını kullanabilir. Bir tanılama kaynağını kodla dinleme hakkında bilgi için DiagnosticSource kullanıcı kılavuzuna bakın.

Dekont

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 EventCountergönderilir.

gRPC hizmet ölçümleri

gRPC sunucu ölçümleri olay kaynağında Grpc.AspNetCore.Server bildirilir.

Ad Tanım
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.

Ad Tanım
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 Analizler'ın Microsoft.Application Analizler kullanarak sayaç verilerini yakalamaktır. EventCounterCollector paketi. Kurulumdan sonra, Application Analizler çalışma zamanında yaygın .NET sayaçlarını toplar. gRPC'nin sayaçları varsayılan olarak toplanmaz, ancak Uygulama Analizler ek sayaçları içerecek şekilde özelleştirilebilir.

Application Insight'ın içinde toplanacak Startup.csgRPC 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