Service Collection
Esta extensión proporciona un método para configurar y agregar servicios de observabilidad a una aplicación .NET utilizando OpenTelemetry. Permite la configuración de métricas y rastreo (tracing) para monitorear el rendimiento y diagnosticar problemas en la aplicación.
Dependencias y Requisitos Previos
Microsoft.Extensions.DependencyInjection
: Necesario para la interfazIServiceCollection
.Microsoft.Extensions.Configuration
: Necesario para la interfazIConfiguration
.Microsoft.Extensions.Options
: Necesario para la configuración de opciones.Microsoft.Extensions.Hosting
: Necesario para la interfazIHostEnvironment
OpenTelemetry
: Necesario para las funcionalidades de observabilidad.CodeDesignPlus.Net.Core
: Necesario para la configuración del core.Confluent.Kafka.Extensions.OpenTelemetry
: Necesario para la instrumentación de Kafka.
Escenarios de uso
Este método de extensión es particularmente útil en aplicaciones que:
- Requieren monitoreo del rendimiento en tiempo real.
- Necesitan rastrear la propagación de solicitudes a través de múltiples servicios.
- Utilizan gRPC, bases de datos SQL, Redis o Kafka y quieren tener telemetría de estas integraciones.
- Necesitan exportar datos de observabilidad a herramientas como Jaeger o Prometheus.
- Quieren una configuración centralizada y flexible para la observabilidad.
Beneficios
- Configuración Simplificada: Facilita la configuración de OpenTelemetry, reduciendo la cantidad de código boilerplate necesario.
- Integración con Múltiples Fuentes de Datos: Permite instrumentar fácilmente componentes ASP.NET Core, clientes gRPC, bases de datos SQL, Redis, Kafka y la propia SDK de CodeDesignPlus.
- Flexibilidad: Permite personalizar la configuración de métricas y tracing a través de acciones opcionales.
- Estandarización: Fomenta el uso de OpenTelemetry, un estándar de la industria para la observabilidad.
- Extensibilidad: Facilita la incorporación de instrumentaciones adicionales.
Ejemplo Práctico
using CodeDesignPlus.Net.Observability.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddObservability(builder.Configuration, builder.Environment);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
En este ejemplo:
- Se crea un
WebApplication
con el métodoCreateBuilder
. - Se agrega la observabilidad a la colección de servicios utilizando el método
AddObservability
. - Se construye la aplicación y se define una ruta de prueba.
- Se ejecuta la aplicación.
Métodos de extensión
La clase ServiceCollectionExtensions
proporciona un único método de extensión para configurar y agregar servicios de observabilidad a una aplicación .NET. Este método agrega los servicios necesarios para monitorear el rendimiento y diagnosticar problemas en la aplicación.
AddObservability
Type: public static IOpenTelemetryBuilder AddObservability(this IServiceCollection services, IConfiguration configuration, IHostEnvironment environment, Action<MeterProviderBuilder> metricsBuilder = null, Action<TracerProviderBuilder> traceBuilder = null)
Agrega los servicios de observabilidad a la colección de servicios, configurando tanto las métricas como el rastreo (tracing) utilizando OpenTelemetry. Este método es el punto de entrada principal para habilitar la observabilidad en la aplicación.
-
Parámetros
services
(IServiceCollection
): Colección de servicios a la cual se agregarán los servicios de observabilidad.configuration
(IConfiguration
): Configuración de la aplicación.environment
(IHostEnvironment
): Entorno de ejecución de la aplicación.metricsBuilder
(Action<MeterProviderBuilder>
): Acción opcional para personalizar la configuración de métricas. Permite modificar elMeterProviderBuilder
antes de que se construya el proveedor de métricas.traceBuilder
(Action<TracerProviderBuilder>
): Acción opcional para personalizar la configuración de tracing. Permite modificar elTracerProviderBuilder
antes de que se construya el proveedor de tracing.
-
Tipo de retorno
IOpenTelemetryBuilder
: El builder de OpenTelemetry, que permite realizar más configuraciones de OpenTelemetry.
-
Excepciones
ObservabilityException
: Se lanza si la sección de configuraciónObservabilityOptions.Section
no existe en la configuración.
Conclusiones
La extensión ServiceCollectionExtensions
facilita la configuración de observabilidad en aplicaciones .NET al proporcionar el método AddObservability
que integra y configura OpenTelemetry. Permite personalizar métricas y tracing, instrumentar componentes clave y exportar datos a herramientas de monitoreo.
Es recomendable usar esta extensión en cualquier proyecto .NET que requiera monitoreo y rastreo de rendimiento, ya que simplifica la configuración de OpenTelemetry y mejora la observabilidad de la aplicación. Para la correcta configuración, es importante tener una sección de configuración en el appsettings.json
llamada Observability
y las propiedades necesarias.