Registro y diagnóstico en gRPC en .NET
Nota:
Esta no es la versión más reciente de este artículo. Para la versión actual, consulta la versión .NET 8 de este artículo.
Advertencia
Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulta la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulta la versión .NET 8 de este artículo.
Importante
Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Para la versión actual, consulta la versión .NET 8 de este artículo.
En este artículo se proporcionan instrucciones para recopilar diagnósticos de una aplicación gRPC para ayudar a solucionar problemas. Temas cubiertos:
- Registro: registros estructurados escritos en el registro de .NET Core. Los marcos de trabajo de la aplicación usan ILogger para escribir registros, y los usuarios, para su propio registro en una aplicación.
- Seguimiento: eventos relacionados con una operación escrita mediante
DiaganosticSource
yActivity
. Los seguimientos del origen de diagnóstico se suelen usar para recopilar telemetría de la aplicación mediante bibliotecas como Application Insights y OpenTelemetry. - Métricas: representación de medidas de datos a lo largo de intervalos de tiempo, por ejemplo, solicitudes por segundo. Las métricas se emiten mediante
EventCounter
y se pueden observar con la herramienta de línea de comandos dotnet-counters o con Application Insights.
Registro
Los servicios gRPC y el cliente gRPC escriben registros mediante el registro de .NET Core. Los registros son un buen punto de inicio al depurar comportamientos inesperados en aplicaciones cliente y de servicio.
Registro de servicios gRPC
Advertencia
Los registros del lado servidor pueden contener información confidencial de la aplicación. Nunca publique registros sin procesar de las aplicaciones de producción en foros públicos como GitHub.
Como los servicios gRPC se hospedan en ASP.NET Core, usa el sistema de registro de ASP.NET Core. En la configuración predeterminada, gRPC registra la información mínima, pero el registro es algo que se puede configurar. Vea la documentación sobre el registro de ASP.NET Core para obtener más información sobre la configuración del registro de ASP.NET Core.
gRPC agrega registros en la categoría Grpc
. Para habilitar registros detallados de gRPC, configure los prefijos Grpc
en el nivel Debug
del archivo appsettings.json
mediante la adición de los siguientes elementos a la subsección LogLevel
de Logging
:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
El registro también se puede configurar en Program.cs
con ConfigureLogging
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Cuando no se usa la configuración basada en JSON, establezca el siguiente valor de configuración en el sistema de configuración:
Logging:LogLevel:Grpc
=Debug
Consulte la documentación del sistema de configuración para determinar cómo especificar valores de configuración anidados. Por ejemplo, al usar variables de entorno, se usan dos caracteres _
en lugar de :
(por ejemplo, Logging__LogLevel__Grpc
).
Se recomienda usar el nivel Debug
al recopilar diagnósticos más detallados para la aplicación. El nivel Trace
genera diagnósticos de nivel bajo y rara vez es necesario para diagnosticar problemas.
Salida de registro de ejemplo
Este es un ejemplo de la salida de la consola en el nivel Debug
de un servicio 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
Acceso a los registros del lado servidor
El modo en que se accede a los registros del lado servidor depende del entorno de la aplicación.
Como aplicación de consola
Si se ejecuta en una aplicación de consola, el registrador de la consola debe estar habilitado de forma predeterminada. Los registros de gRPC aparecerán en la consola.
Otros entornos
Si la aplicación se implementa en otro entorno (por ejemplo, Docker, Kubernetes o un servicio de Windows), vea Registros en .NET Core y ASP.NET Core para obtener más información sobre cómo configurar los proveedores de registro adecuados para el entorno.
Registro de clientes de gRPC
Advertencia
Los registros del lado cliente pueden contener información confidencial de la aplicación. Nunca publique registros sin procesar de las aplicaciones de producción en foros públicos como GitHub.
Para obtener los registros del cliente de .NET, establezca la propiedad GrpcChannelOptions.LoggerFactory
cuando se cree el canal del cliente. Al llamar a un servicio gRPC desde una aplicación ASP.NET Core, el generador del registrador se puede resolver desde la inserción de dependencias (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);
}
}
Una manera alternativa de habilitar el registro de cliente consiste en usar la fábrica de cliente de gRPC para crear el cliente. Un cliente gRPC registrado con la fábrica de cliente y resuelto a partir de la inserción de dependencias usará de forma automática el registro configurado de la aplicación.
Si la aplicación no usa inserción de dependencias, cree una instancia de ILoggerFactory
con LoggerFactory.Create. Para acceder a este método, agregue el paquete Microsoft.Extensions.Logging a la aplicación.
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);
Ámbitos de registro de cliente de gRPC
El cliente gRPC agrega un ámbito de registro a los registros realizados durante una llamada a gRPC. El ámbito tiene metadatos relacionados con la llamada a gRPC:
- GrpcMethodType: tipo de método de gRPC. Los valores posibles son los nombres de la enumeración
Grpc.Core.MethodType
. Por ejemplo,Unary
. - GrpcUri: URI relativo del método gRPC. Por ejemplo, /greet.Greeter/SayHellos.
Salida de registro de ejemplo
Este es un ejemplo de la salida de la consola en el nivel Debug
de un 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.
Traza
Los servicios y el cliente gRPC proporcionan información sobre las llamadas a gRPC mediante DiagnosticSource y Activity.
- gRPC de .NET usa una actividad para representar una llamada a gRPC.
- Los eventos de seguimiento se escriben en el origen de diagnóstico al iniciar y detener la actividad de la llamada a gRPC.
- El seguimiento no captura información sobre cuándo se envían los mensajes a lo largo de la duración de las llamadas de streaming de gRPC.
Seguimiento de servicios gRPC
Los servicios gRPC se hospedan en ASP.NET Core, que notifica eventos sobre las solicitudes HTTP entrantes. Los metadatos específicos de gRPC se agregan a los diagnósticos de solicitudes HTTP existentes que proporciona ASP.NET Core.
- El nombre del origen de diagnóstico es
Microsoft.AspNetCore
. - El nombre de la actividad es
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
grpc.method
. - Cuando se completa el código de estado de la llamada a gRPC, se agrega como una etiqueta con el nombre
grpc.status_code
.
- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
Seguimiento de clientes gRPC
El cliente gRPC de .NET usa HttpClient
para realizar llamadas de gRPC. Aunque HttpClient
escribe eventos de diagnóstico, el cliente gRPC de .NET proporciona un origen de diagnóstico, una actividad y eventos personalizados para que se pueda recopilar información completa sobre una llamada a gRPC.
- El nombre del origen de diagnóstico es
Grpc.Net.Client
. - El nombre de la actividad es
Grpc.Net.Client.GrpcOut
.- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
grpc.method
. - Cuando se completa el código de estado de la llamada a gRPC, se agrega como una etiqueta con el nombre
grpc.status_code
.
- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
Recopilación del seguimiento
La forma más fácil de usar DiagnosticSource
consiste en configurar una biblioteca de telemetría como OpenTelemetry o Application Insights en la aplicación. La biblioteca procesará información sobre las llamadas a gRPC junto a otra telemetría de la aplicación.
El seguimiento se puede ver en un servicio administrado como Application Insights, o ejecutarse como un sistema de seguimiento distribuido propio. OpenTelemetry admite la exportación de datos de seguimiento a Jaeger y Zipkin.
DiagnosticSource
puede consumir eventos de seguimiento en el código mediante DiagnosticListener
. Para obtener información sobre cómo escuchar un origen de diagnóstico con código, vea la Guía del usuario de DiagnosticSource.
Nota
En la actualidad, las bibliotecas de telemetría no capturan telemetría Grpc.Net.Client.GrpcOut
específica de gRPC. El trabajo para mejorar las bibliotecas de telemetría que capturan este seguimiento está en curso.
Métricas
Las métricas son una representación de medidas de datos a lo largo de intervalos de tiempo, por ejemplo, solicitudes por segundo. Los datos de las métricas permiten observar el estado de una aplicación en un general. Las métricas gRPC de .NET se emiten mediante EventCounter
.
Métricas de servicios gRPC
Las métricas de servicios gRPC se notifican en el origen del evento Grpc.AspNetCore.Server
.
NOMBRE | Descripción |
---|---|
total-calls |
Total de llamadas |
current-calls |
Llamadas actuales |
calls-failed |
Total de errores de llamadas |
calls-deadline-exceeded |
Fecha límite de llamadas totales superada |
messages-sent |
Total de mensajes enviados |
messages-received |
Total de mensajes recibidos |
calls-unimplemented |
Total de llamadas no implementadas |
ASP.NET Core también proporciona sus propias métricas en el origen del evento Microsoft.AspNetCore.Hosting
.
Métricas de clientes gRPC
Las métricas de clientes gRPC se notifican en el origen del evento Grpc.Net.Client
.
NOMBRE | Descripción |
---|---|
total-calls |
Total de llamadas |
current-calls |
Llamadas actuales |
calls-failed |
Total de errores de llamadas |
calls-deadline-exceeded |
Fecha límite de llamadas totales superada |
messages-sent |
Total de mensajes enviados |
messages-received |
Total de mensajes recibidos |
Observación de métricas
dotnet-counters es una herramienta de supervisión de rendimiento diseñada para la investigación del rendimiento y la supervisión del estado de primer nivel ad hoc. Puede supervisar una aplicación .NET con Grpc.AspNetCore.Server
o Grpc.Net.Client
como el nombre del proveedor.
> 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
Otra forma de observar las métricas de gRPC consiste en capturar los datos de contadores mediante el paquete Microsoft.ApplicationInsights.EventCounterCollector de Application Insights. Una vez realizada la instalación, Application Insights recopila contadores comunes de .NET en tiempo de ejecución. Los contadores de gRPC no se recopilan de forma predeterminada, pero App Insights se puede personalizar para incluir contadores adicionales.
Especifique en Startup.cs
los contadores de gRPC que Application Insights debe recopilar:
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 adicionales
En este artículo se proporcionan instrucciones para recopilar diagnósticos de una aplicación gRPC para ayudar a solucionar problemas. Temas cubiertos:
- Registro: registros estructurados escritos en el registro de .NET Core. Los marcos de trabajo de la aplicación usan ILogger para escribir registros, y los usuarios, para su propio registro en una aplicación.
- Seguimiento: eventos relacionados con una operación escrita mediante
DiaganosticSource
yActivity
. Los seguimientos del origen de diagnóstico se suelen usar para recopilar telemetría de la aplicación mediante bibliotecas como Application Insights y OpenTelemetry. - Métricas: representación de medidas de datos a lo largo de intervalos de tiempo, por ejemplo, solicitudes por segundo. Las métricas se emiten mediante
EventCounter
y se pueden observar con la herramienta de línea de comandos dotnet-counters o con Application Insights.
Registro
Los servicios gRPC y el cliente gRPC escriben registros mediante el registro de .NET Core. Los registros son un buen punto de inicio al depurar comportamientos inesperados en aplicaciones cliente y de servicio.
Registro de servicios gRPC
Advertencia
Los registros del lado servidor pueden contener información confidencial de la aplicación. Nunca publique registros sin procesar de las aplicaciones de producción en foros públicos como GitHub.
Como los servicios gRPC se hospedan en ASP.NET Core, usa el sistema de registro de ASP.NET Core. En la configuración predeterminada, gRPC registra la información mínima, pero el registro es algo que se puede configurar. Vea la documentación sobre el registro de ASP.NET Core para obtener más información sobre la configuración del registro de ASP.NET Core.
gRPC agrega registros en la categoría Grpc
. Para habilitar registros detallados de gRPC, configure los prefijos Grpc
en el nivel Debug
del archivo appsettings.json
mediante la adición de los siguientes elementos a la subsección LogLevel
de Logging
:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Grpc": "Debug"
}
}
}
También se puede configurar en Startup.cs
con ConfigureLogging
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Grpc", LogLevel.Debug);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Si no usa la configuración basada en JSON, establezca el siguiente valor de configuración en el sistema de configuración:
Logging:LogLevel:Grpc
=Debug
Consulte la documentación del sistema de configuración para determinar cómo especificar valores de configuración anidados. Por ejemplo, al usar variables de entorno, se usan dos caracteres _
en lugar de :
(por ejemplo, Logging__LogLevel__Grpc
).
Se recomienda usar el nivel Debug
al recopilar diagnósticos más detallados para la aplicación. El nivel Trace
genera diagnósticos de nivel bajo y rara vez es necesario para diagnosticar problemas.
Salida de registro de ejemplo
Este es un ejemplo de la salida de la consola en el nivel Debug
de un servicio 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
Acceso a los registros del lado servidor
La forma de acceder a los registros del lado servidor depende del entorno que se ejecute.
Como aplicación de consola
Si se ejecuta en una aplicación de consola, el registrador de la consola debe estar habilitado de forma predeterminada. Los registros de gRPC aparecerán en la consola.
Otros entornos
Si la aplicación se implementa en otro entorno (por ejemplo, Docker, Kubernetes o un servicio de Windows), vea Registros en .NET Core y ASP.NET Core para obtener más información sobre cómo configurar los proveedores de registro adecuados para el entorno.
Registro de clientes de gRPC
Advertencia
Los registros del lado cliente pueden contener información confidencial de la aplicación. Nunca publique registros sin procesar de las aplicaciones de producción en foros públicos como GitHub.
Para obtener los registros del cliente de .NET, establezca la propiedad GrpcChannelOptions.LoggerFactory
cuando se cree el canal del cliente. Al llamar a un servicio gRPC desde una aplicación ASP.NET Core, el generador del registrador se puede resolver desde la inserción de dependencias (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);
}
}
Una manera alternativa de habilitar el registro de cliente consiste en usar la fábrica de cliente de gRPC para crear el cliente. Un cliente gRPC registrado con la fábrica de cliente y resuelto a partir de la inserción de dependencias usará de forma automática el registro configurado de la aplicación.
Si la aplicación no usa inserción de dependencias, puede crear una instancia de ILoggerFactory
con LoggerFactory.Create. Para acceder a este método, agregue el paquete Microsoft.Extensions.Logging a la aplicación.
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);
Ámbitos de registro de cliente de gRPC
El cliente gRPC agrega un ámbito de registro a los registros realizados durante una llamada a gRPC. El ámbito tiene metadatos relacionados con la llamada a gRPC:
- GrpcMethodType: tipo de método de gRPC. Los valores posibles son los nombres de la enumeración
Grpc.Core.MethodType
. Por ejemplo,Unary
. - GrpcUri: URI relativo del método gRPC. Por ejemplo, /greet.Greeter/SayHellos.
Salida de registro de ejemplo
Este es un ejemplo de la salida de la consola en el nivel Debug
de un 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.
Traza
Los servicios y el cliente gRPC proporcionan información sobre las llamadas a gRPC mediante DiagnosticSource y Activity.
- gRPC de .NET usa una actividad para representar una llamada a gRPC.
- Los eventos de seguimiento se escriben en el origen de diagnóstico al iniciar y detener la actividad de la llamada a gRPC.
- El seguimiento no captura información sobre cuándo se envían los mensajes a lo largo de la duración de las llamadas de streaming de gRPC.
Seguimiento de servicios gRPC
Los servicios gRPC se hospedan en ASP.NET Core, que notifica eventos sobre las solicitudes HTTP entrantes. Los metadatos específicos de gRPC se agregan a los diagnósticos de solicitudes HTTP existentes que proporciona ASP.NET Core.
- El nombre del origen de diagnóstico es
Microsoft.AspNetCore
. - El nombre de la actividad es
Microsoft.AspNetCore.Hosting.HttpRequestIn
.- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
grpc.method
. - Cuando se completa el código de estado de la llamada a gRPC, se agrega como una etiqueta con el nombre
grpc.status_code
.
- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
Seguimiento de clientes gRPC
El cliente gRPC de .NET usa HttpClient
para realizar llamadas de gRPC. Aunque HttpClient
escribe eventos de diagnóstico, el cliente gRPC de .NET proporciona un origen de diagnóstico, una actividad y eventos personalizados para que se pueda recopilar información completa sobre una llamada a gRPC.
- El nombre del origen de diagnóstico es
Grpc.Net.Client
. - El nombre de la actividad es
Grpc.Net.Client.GrpcOut
.- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
grpc.method
. - Cuando se completa el código de estado de la llamada a gRPC, se agrega como una etiqueta con el nombre
grpc.status_code
.
- El nombre del método gRPC que invoca la llamada a gRPC se agrega como una etiqueta con el nombre
Recopilación del seguimiento
La forma más fácil de usar DiagnosticSource
consiste en configurar una biblioteca de telemetría como OpenTelemetry o Application Insights en la aplicación. La biblioteca procesará información sobre las llamadas a gRPC junto a otra telemetría de la aplicación.
El seguimiento se puede ver en un servicio administrado como Application Insights, o bien puede elegir ejecutar un sistema de seguimiento distribuido propio. OpenTelemetry admite la exportación de datos de seguimiento a Jaeger y Zipkin.
DiagnosticSource
puede consumir eventos de seguimiento en el código mediante DiagnosticListener
. Para obtener información sobre cómo escuchar un origen de diagnóstico con código, vea la Guía del usuario de DiagnosticSource.
Nota
En la actualidad, las bibliotecas de telemetría no capturan telemetría Grpc.Net.Client.GrpcOut
específica de gRPC. El trabajo para mejorar las bibliotecas de telemetría que capturan este seguimiento está en curso.
Métricas
Las métricas son una representación de medidas de datos a lo largo de intervalos de tiempo, por ejemplo, solicitudes por segundo. Los datos de las métricas permiten observar el estado de una aplicación en un general. Las métricas gRPC de .NET se emiten mediante EventCounter
.
Métricas de servicios gRPC
Las métricas de servicios gRPC se notifican en el origen del evento Grpc.AspNetCore.Server
.
NOMBRE | Descripción |
---|---|
total-calls |
Total de llamadas |
current-calls |
Llamadas actuales |
calls-failed |
Total de errores de llamadas |
calls-deadline-exceeded |
Fecha límite de llamadas totales superada |
messages-sent |
Total de mensajes enviados |
messages-received |
Total de mensajes recibidos |
calls-unimplemented |
Total de llamadas no implementadas |
ASP.NET Core también proporciona sus propias métricas en el origen del evento Microsoft.AspNetCore.Hosting
.
Métricas de clientes gRPC
Las métricas de clientes gRPC se notifican en el origen del evento Grpc.Net.Client
.
NOMBRE | Descripción |
---|---|
total-calls |
Total de llamadas |
current-calls |
Llamadas actuales |
calls-failed |
Total de errores de llamadas |
calls-deadline-exceeded |
Fecha límite de llamadas totales superada |
messages-sent |
Total de mensajes enviados |
messages-received |
Total de mensajes recibidos |
Observación de métricas
dotnet-counters es una herramienta de supervisión de rendimiento diseñada para la investigación del rendimiento y la supervisión del estado de primer nivel ad hoc. Puede supervisar una aplicación .NET con Grpc.AspNetCore.Server
o Grpc.Net.Client
como el nombre del proveedor.
> 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
Otra forma de observar las métricas de gRPC consiste en capturar los datos de contadores mediante el paquete Microsoft.ApplicationInsights.EventCounterCollector de Application Insights. Una vez realizada la instalación, Application Insights recopila contadores comunes de .NET en tiempo de ejecución. Los contadores de gRPC no se recopilan de forma predeterminada, pero App Insights se puede personalizar para incluir contadores adicionales.
Especifique en Startup.cs
los contadores de gRPC que Application Insights debe recopilar:
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"));
}
);
}