Registro em log e diagnóstico no gRPC no .NET
Observação
Esta não é a versão mais recente deste artigo. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, confira .NET e a Política de Suporte do .NET Core. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Importante
Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece nenhuma garantia, explícita ou implícita, quanto às informações fornecidas aqui.
Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Este artigo fornece diretrizes para coletar diagnósticos de um aplicativo gRPC para ajudar a solucionar problemas. Os tópicos abordados incluem:
- Registro em log – logs estruturados gravados no log do .NET Core. ILogger é usado por estruturas de aplicativos para gravar logs e por usuários para seus próprios logs em um aplicativo.
- Rastreamento – eventos relacionados a uma operação escrita usando
DiaganosticSource
eActivity
. Os rastreamentos da fonte de diagnóstico são comumente usados para coletar telemetria de aplicativo por bibliotecas como o Application Insights e OpenTelemetry. - Métricas – representação de medidas de dados em intervalos de tempo como, por exemplo, solicitações por segundo. As métricas são emitidas usando o
EventCounter
e podem ser observadas usando a ferramenta de linha de comando dotnet-counters ou o Application Insights.
Log
Os serviços gRPC e os logs de gravação do cliente gRPC usando o log do .NET Core. Os logs são um bom lugar para começar ao depurar comportamentos inesperados em aplicativos cliente e de serviço.
Registro em log de serviços gRPC
Aviso
Os logs do lado do servidor podem conter informações confidenciais do seu aplicativo. Nunca poste logs brutos de aplicativos de produção em fóruns públicos como o GitHub.
Como os serviços gRPC são hospedados no ASP.NET Core, ele usa o sistema de registro em log do ASP.NET Core. Na configuração padrão, o gRPC registra informações mínimas, mas o log pode ser configurado. Confira a documentação sobre Registro em log do ASP.NET Core para obter detalhes sobre como configurar o registro em log do ASP.NET Core.
O gRPC adiciona logs na categoria Grpc
. Para habilitar logs detalhados do gRPC, configure os prefixos Grpc
para o nível de Debug
no arquivo appsettings.json
adicionando os seguintes itens à subseção LogLevel
em Logging
:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
O registro em log também pode ser configurado em Program.cs
com ConfigureLogging
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Ao não usar a configuração baseada em JSON, defina o seguinte valor de configuração no sistema de configuração:
Logging:LogLevel:Grpc
=Debug
Verifique a documentação do sistema de configuração para determinar como especificar valores de configuração aninhados. Por exemplo, ao usar variáveis de ambiente, dois caracteres _
são usados em vez do :
(por exemplo, Logging__LogLevel__Grpc
).
É recomendável usar o nível de Debug
ao coletar diagnósticos detalhados para um aplicativo. O nível de Trace
produz diagnóstico de baixo nível e raramente é necessário para diagnosticar problemas.
Exemplo de saída de registro em log
Aqui está um exemplo de saída do console no nível de Debug
de um serviço 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
Acessar logs do lado do servidor
A forma como os logs do lado do servidor são acessados depende do ambiente do aplicativo.
Como um aplicativo de console
Se você estiver executando em um aplicativo de console, o Agente do console deverá ser habilitado por padrão. Os logs gRPC serão exibidos no console.
Outros ambientes
Se o aplicativo for implantado em outro ambiente (por exemplo, Docker, Kubernetes ou Serviço Windows), confira Registro em log no .NET Core e ASP.NET Core para obter mais informações sobre como configurar provedores de log adequados para o ambiente.
Registro em log do cliente gRPC
Aviso
Os logs do lado do cliente podem conter informações confidenciais do seu aplicativo. Nunca poste logs brutos de aplicativos de produção em fóruns públicos como o GitHub.
Para obter logs do cliente .NET, defina a propriedade GrpcChannelOptions.LoggerFactory
quando o canal do cliente for criado. Ao chamar um serviço gRPC de um aplicativo ASP.NET Core,o alocador de agentes pode ser resolvido com base na DI (injeção de dependência):
[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);
}
}
Uma maneira alternativa de habilitar o log do cliente é usar o alocador de clientes gRPC para criar o cliente. Um cliente gRPC registrado no alocador de clientes e resolvido na DI usará automaticamente o log configurado do aplicativo.
Se o aplicativo não estiver usando a DI, crie uma nova instância ILoggerFactory
com LoggerFactory.Create. Para acessar esse método, adicione o pacote Microsoft.Extensions.Logging ao seu aplicativo.
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);
Escopos de log do cliente gRPC
O cliente gRPC adiciona um escopo de registro em log para logs criados durante a chamada gRPC. O escopo tem metadados relacionados à chamada gRPC:
- GrpcMethodType – o tipo de método gRPC. Os valores possíveis são nomes da enumeração
Grpc.Core.MethodType
. Por exemplo,Unary
. - GrpcUri – o URI relativo do método gRPC. Por exemplo, /greet.Greeter/SayHellos.
Exemplo de saída de registro em log
Aqui está um exemplo de saída do console no nível de Debug
de um cliente 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.
Rastreamento
Os serviços gRPC e o cliente gRPC fornecem informações sobre chamadas gRPC usando DiagnosticSource e Activity.
- O gRPC do .NET usa uma atividade para representar uma chamada gRPC.
- Os eventos de rastreamento são gravados na fonte de diagnóstico no início e na parada da atividade de chamada gRPC.
- O rastreamento não captura informações sobre quando as mensagens são enviadas ao longo do tempo de vida das chamadas de fluxo de dados gRPC.
Rastreamento de serviço gRPC
Os serviços gRPC são hospedados no ASP.NET Core, que relata eventos sobre solicitações HTTP de entrada. Os metadados específicos do gRPC são adicionados ao diagnóstico de solicitação HTTP existente que o ASP.NET Core fornece.
- O nome da fonte de diagnóstico é
Microsoft.AspNetCore
. - O nome da atividade é
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
grpc.method
. - O código de status da chamada gRPC quando ela for concluída é adicionado como uma marca com o nome
grpc.status_code
.
- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
Rastreamento de cliente gRPC
O cliente gRPC do .NET usa HttpClient
para fazer chamadas gRPC. Embora HttpClient
grave eventos de diagnóstico, o cliente gRPC do .NET fornece uma fonte de diagnóstico, atividade e eventos personalizados para que informações completas sobre uma chamada gRPC possam ser coletadas.
- O nome da fonte de diagnóstico é
Grpc.Net.Client
. - O nome da atividade é
Grpc.Net.Client.GrpcOut
.- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
grpc.method
. - O código de status da chamada gRPC quando ela for concluída é adicionado como uma marca com o nome
grpc.status_code
.
- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
Coletando rastreamento
A maneira mais fácil de usar DiagnosticSource
é configurar uma biblioteca de telemetria, como o Application Insights ou o OpenTelemetry em seu aplicativo. A biblioteca processará informações sobre chamadas gRPC junto com outras telemetrias de aplicativo.
O rastreamento pode ser exibido em um serviço gerenciado, como o Application Insights, ou executado como seu próprio sistema de rastreamento distribuído. O OpenTelemetry dá suporte à exportação de dados de rastreamento para Jaeger e Zipkin.
DiagnosticSource
pode consumir eventos de rastreamento no código usando DiagnosticListener
. Para obter informações sobre como ouvir uma fonte de diagnóstico com código, confira o Guia do usuário do DiagnosticSource.
Observação
Atualmente, as bibliotecas de telemetria não capturam a telemetria específica Grpc.Net.Client.GrpcOut
do gRPC. Estão sendo realizados trabalhos para melhorar as bibliotecas de telemetria que capturam esse rastreamento.
Métricas
As métricas são uma representação de medidas de dados em intervalos de tempo, por exemplo, solicitações por segundo. Os dados de métricas permitem a observação do estado de um aplicativo em um alto nível. As métricas gRPC do .NET são emitidas usando EventCounter
.
Métricas do serviço gRPC
As métricas do servidor gRPC são relatadas na origem do evento Grpc.AspNetCore.Server
.
Nome | Descrição |
---|---|
total-calls |
Total de Chamadas |
current-calls |
Chamadas atuais |
calls-failed |
Total de chamadas com falha |
calls-deadline-exceeded |
Prazo total de chamadas excedido |
messages-sent |
Total de Mensagens Enviadas |
messages-received |
Total de mensagens recebidas |
calls-unimplemented |
Total de chamadas não implementadas |
O ASP.NET Core também fornece suas próprias métricas na origem do evento Microsoft.AspNetCore.Hosting
.
Métricas do cliente gRPC
As métricas do cliente gRPC são relatadas na origem do evento Grpc.Net.Client
.
Nome | Descrição |
---|---|
total-calls |
Total de Chamadas |
current-calls |
Chamadas atuais |
calls-failed |
Total de chamadas com falha |
calls-deadline-exceeded |
Prazo total de chamadas excedido |
messages-sent |
Total de Mensagens Enviadas |
messages-received |
Total de mensagens recebidas |
Observar métricas
dotnet-counters é uma ferramenta de monitoramento de desempenho para monitoramento de integridade ad hoc e investigação de desempenho de primeiro nível. Monitore um aplicativo .NET com Grpc.AspNetCore.Server
ou Grpc.Net.Client
como o nome do provedor.
> 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
Outra maneira de observar as métricas gRPC é capturar dados de contador usando o pacote Microsoft.ApplicationInsights.EventCounterCollector do Application Insights. Após a instalação, o Application Insights coleta contadores .NET comuns no runtime. Os contadores do gRPC não são coletados por padrão, mas o App Insights pode ser personalizado para incluir contadores adicionais.
Especifique os contadores gRPC para o Application Insight coletar em 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"));
}
);
}
Recursos adicionais
Este artigo fornece diretrizes para coletar diagnósticos de um aplicativo gRPC para ajudar a solucionar problemas. Os tópicos abordados incluem:
- Registro em log – logs estruturados gravados no log do .NET Core. ILogger é usado por estruturas de aplicativos para gravar logs e por usuários para seus próprios logs em um aplicativo.
- Rastreamento – eventos relacionados a uma operação escrita usando
DiaganosticSource
eActivity
. Os rastreamentos da fonte de diagnóstico são comumente usados para coletar telemetria de aplicativo por bibliotecas como o Application Insights e OpenTelemetry. - Métricas – representação de medidas de dados em intervalos de tempo como, por exemplo, solicitações por segundo. As métricas são emitidas usando o
EventCounter
e podem ser observadas usando a ferramenta de linha de comando dotnet-counters ou o Application Insights.
Log
Os serviços gRPC e os logs de gravação do cliente gRPC usando o log do .NET Core. Os logs são um bom lugar para começar ao depurar comportamentos inesperados em aplicativos cliente e de serviço.
Registro em log de serviços gRPC
Aviso
Os logs do lado do servidor podem conter informações confidenciais do seu aplicativo. Nunca poste logs brutos de aplicativos de produção em fóruns públicos como o GitHub.
Como os serviços gRPC são hospedados no ASP.NET Core, ele usa o sistema de registro em log do ASP.NET Core. Na configuração padrão, o gRPC registra informações mínimas, mas o log pode ser configurado. Confira a documentação sobre Registro em log do ASP.NET Core para obter detalhes sobre como configurar o registro em log do ASP.NET Core.
O gRPC adiciona logs na categoria Grpc
. Para habilitar logs detalhados do gRPC, configure os prefixos Grpc
para o nível de Debug
no arquivo appsettings.json
adicionando os seguintes itens à subseção LogLevel
em Logging
:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
Você também pode configurar isso em Startup.cs
com ConfigureLogging
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Se você não estiver usando a configuração baseada em JSON, defina o seguinte valor de configuração em seu sistema de configuração:
Logging:LogLevel:Grpc
=Debug
Verifique a documentação do sistema de configuração para determinar como especificar valores de configuração aninhados. Por exemplo, ao usar variáveis de ambiente, dois caracteres _
são usados em vez do :
(por exemplo, Logging__LogLevel__Grpc
).
É recomendável usar o nível de Debug
ao coletar diagnósticos detalhados para um aplicativo. O nível de Trace
produz diagnóstico de baixo nível e raramente é necessário para diagnosticar problemas.
Exemplo de saída de registro em log
Aqui está um exemplo de saída do console no nível de Debug
de um serviço 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
Acessar logs do lado do servidor
A forma como você acessa os logs do lado do servidor depende do ambiente no qual você está executando.
Como um aplicativo de console
Se você estiver executando em um aplicativo de console, o Agente do console deverá ser habilitado por padrão. Os logs gRPC serão exibidos no console.
Outros ambientes
Se o aplicativo for implantado em outro ambiente (por exemplo, Docker, Kubernetes ou Serviço Windows), confira Registro em log no .NET Core e ASP.NET Core para obter mais informações sobre como configurar provedores de log adequados para o ambiente.
Registro em log do cliente gRPC
Aviso
Os logs do lado do cliente podem conter informações confidenciais do seu aplicativo. Nunca poste logs brutos de aplicativos de produção em fóruns públicos como o GitHub.
Para obter logs do cliente .NET, defina a propriedade GrpcChannelOptions.LoggerFactory
quando o canal do cliente for criado. Ao chamar um serviço gRPC de um aplicativo ASP.NET Core,o alocador de agentes pode ser resolvido com base na DI (injeção de dependência):
[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);
}
}
Uma maneira alternativa de habilitar o log do cliente é usar o alocador de clientes gRPC para criar o cliente. Um cliente gRPC registrado no alocador de clientes e resolvido na DI usará automaticamente o log configurado do aplicativo.
Se o aplicativo não estiver usando a DI, crie uma nova instância ILoggerFactory
com LoggerFactory.Create. Para acessar esse método, adicione o pacote Microsoft.Extensions.Logging ao seu aplicativo.
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);
Escopos de log do cliente gRPC
O cliente gRPC adiciona um escopo de registro em log para logs criados durante a chamada gRPC. O escopo tem metadados relacionados à chamada gRPC:
- GrpcMethodType – o tipo de método gRPC. Os valores possíveis são nomes da enumeração
Grpc.Core.MethodType
. Por exemplo,Unary
. - GrpcUri – o URI relativo do método gRPC. Por exemplo, /greet.Greeter/SayHellos.
Exemplo de saída de registro em log
Aqui está um exemplo de saída do console no nível de Debug
de um cliente 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.
Rastreamento
Os serviços gRPC e o cliente gRPC fornecem informações sobre chamadas gRPC usando DiagnosticSource e Activity.
- O gRPC do .NET usa uma atividade para representar uma chamada gRPC.
- Os eventos de rastreamento são gravados na fonte de diagnóstico no início e na parada da atividade de chamada gRPC.
- O rastreamento não captura informações sobre quando as mensagens são enviadas ao longo do tempo de vida das chamadas de fluxo de dados gRPC.
Rastreamento de serviço gRPC
Os serviços gRPC são hospedados no ASP.NET Core, que relata eventos sobre solicitações HTTP de entrada. Os metadados específicos do gRPC são adicionados ao diagnóstico de solicitação HTTP existente que o ASP.NET Core fornece.
- O nome da fonte de diagnóstico é
Microsoft.AspNetCore
. - O nome da atividade é
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
grpc.method
. - O código de status da chamada gRPC quando ela for concluída é adicionado como uma marca com o nome
grpc.status_code
.
- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
Rastreamento de cliente gRPC
O cliente gRPC do .NET usa HttpClient
para fazer chamadas gRPC. Embora HttpClient
grave eventos de diagnóstico, o cliente gRPC do .NET fornece uma fonte de diagnóstico, atividade e eventos personalizados para que informações completas sobre uma chamada gRPC possam ser coletadas.
- O nome da fonte de diagnóstico é
Grpc.Net.Client
. - O nome da atividade é
Grpc.Net.Client.GrpcOut
.- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
grpc.method
. - O código de status da chamada gRPC quando ela for concluída é adicionado como uma marca com o nome
grpc.status_code
.
- O nome do método gRPC invocado pela chamada gRPC é adicionado como uma marca com o nome
Coletando rastreamento
A maneira mais fácil de usar DiagnosticSource
é configurar uma biblioteca de telemetria, como o Application Insights ou o OpenTelemetry em seu aplicativo. A biblioteca processará informações sobre chamadas gRPC junto com outras telemetrias de aplicativo.
O rastreamento pode ser exibido em um serviço gerenciado, como o Application Insights, ou você pode optar por executar seu próprio sistema de rastreamento distribuído. O OpenTelemetry dá suporte à exportação de dados de rastreamento para Jaeger e Zipkin.
DiagnosticSource
pode consumir eventos de rastreamento no código usando DiagnosticListener
. Para obter informações sobre como ouvir uma fonte de diagnóstico com código, confira o Guia do usuário do DiagnosticSource.
Observação
Atualmente, as bibliotecas de telemetria não capturam a telemetria específica Grpc.Net.Client.GrpcOut
do gRPC. Estão sendo realizados trabalhos para melhorar as bibliotecas de telemetria que capturam esse rastreamento.
Métricas
As métricas são uma representação de medidas de dados em intervalos de tempo, por exemplo, solicitações por segundo. Os dados de métricas permitem a observação do estado de um aplicativo em um alto nível. As métricas gRPC do .NET são emitidas usando EventCounter
.
Métricas do serviço gRPC
As métricas do servidor gRPC são relatadas na origem do evento Grpc.AspNetCore.Server
.
Nome | Descrição |
---|---|
total-calls |
Total de Chamadas |
current-calls |
Chamadas atuais |
calls-failed |
Total de chamadas com falha |
calls-deadline-exceeded |
Prazo total de chamadas excedido |
messages-sent |
Total de Mensagens Enviadas |
messages-received |
Total de mensagens recebidas |
calls-unimplemented |
Total de chamadas não implementadas |
O ASP.NET Core também fornece suas próprias métricas na origem do evento Microsoft.AspNetCore.Hosting
.
Métricas do cliente gRPC
As métricas do cliente gRPC são relatadas na origem do evento Grpc.Net.Client
.
Nome | Descrição |
---|---|
total-calls |
Total de Chamadas |
current-calls |
Chamadas atuais |
calls-failed |
Total de chamadas com falha |
calls-deadline-exceeded |
Prazo total de chamadas excedido |
messages-sent |
Total de Mensagens Enviadas |
messages-received |
Total de mensagens recebidas |
Observar métricas
dotnet-counters é uma ferramenta de monitoramento de desempenho para monitoramento de integridade ad hoc e investigação de desempenho de primeiro nível. Monitore um aplicativo .NET com Grpc.AspNetCore.Server
ou Grpc.Net.Client
como o nome do provedor.
> 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
Outra maneira de observar as métricas gRPC é capturar dados de contador usando o pacote Microsoft.ApplicationInsights.EventCounterCollector do Application Insights. Após a instalação, o Application Insights coleta contadores .NET comuns no runtime. Os contadores do gRPC não são coletados por padrão, mas o App Insights pode ser personalizado para incluir contadores adicionais.
Especifique os contadores gRPC para o Application Insight coletar em 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"));
}
);
}