Biblioteca AppMetrics para el monitoreo de aplicaciones C# (.NET)
Al desarrollar aplicaciones .NET modernas, es fundamental monitorear su estado, rendimiento e identificar cuellos de botella. La biblioteca AppMetrics es una herramienta potente y flexible para la recopilación, agregación y exportación de métricas en tiempo real. Permite a desarrolladores y administradores obtener una visión completa del funcionamiento del servicio: desde el tiempo de ejecución de las solicitudes hasta la frecuencia de errores.
AppMetrics admite múltiples backends para el almacenamiento de métricas: Prometheus, InfluxDB, Graphite, Elasticsearch y otros. Gracias a los Health Checks integrados, no solo puede recopilar estadísticas, sino también verificar el estado de las dependencias (bases de datos, API externas).
Funcionalidades principales
- Contadores (Counters) — número de solicitudes, errores, eventos.
- Histogramas (Histograms) — distribución del tiempo de ejecución de operaciones.
- Temporizadores (Timers) — medición de la duración de la ejecución del código.
- Medidores (Meters) — velocidad de eventos por segundo.
- Health Checks — verificación de disponibilidad de servicios externos.
- Exportación de métricas — a Prometheus (formato /metrics), InfluxDB y otros.
Instalación y configuración
Instale el paquete a través de NuGet:
dotnet add package AppMetrics.AspNetCore.Mvcdotnet add package AppMetrics.Reporting.Prometheus.ClientLuego, agregue los servicios en Program.cs (o Startup.cs):
using App.Metrics;using App.Metrics.AspNetCore;using App.Metrics.Formatters.Prometheus;
var builder = WebApplication.CreateBuilder(args);
// Configuración de métricasvar metrics = AppMetrics.CreateDefaultBuilder() .OutputMetrics.AsPrometheusPlainText() .Build();
builder.Services.AddMetrics(metrics);builder.Services.AddMetricsTrackingMiddleware();builder.Services.AddMetricsEndpoints();
var app = builder.Build();
app.UseMetricsAllMiddleware();app.UseMetricsAllEndpoints();
app.MapGet("/", () => "Hello World!");
app.Run();Después de iniciar la aplicación, las métricas estarán disponibles en la dirección /metrics en formato Prometheus.
Creación de métricas personalizadas
Defina una clase para almacenar las métricas:
public class MyMetrics{ private readonly IMetrics _metrics;
public MyMetrics(IMetrics metrics) { _metrics = metrics; }
// Contador de solicitudes private readonly CounterOptions _requestCounter = new CounterOptions { Name = "myapp_requests_total", MeasurementUnit = Unit.Requests };
// Temporizador para medir el tiempo de ejecución private readonly TimerOptions _requestTimer = new TimerOptions { Name = "myapp_request_duration_seconds", MeasurementUnit = Unit.Requests, DurationUnit = TimeUnit.Seconds };
public void TrackRequest() { _metrics.Measure.Counter.Increment(_requestCounter); }
public IDisposable MeasureRequestDuration() { return _metrics.Measure.Timer.Time(_requestTimer); }}Utilice las métricas en los controladores:
[ApiController][Route("api/[controller]")]public class SampleController : ControllerBase{ private readonly MyMetrics _myMetrics;
public SampleController(MyMetrics myMetrics) { _myMetrics = myMetrics; }
[HttpGet] public IActionResult Get() { _myMetrics.TrackRequest();
using (_myMetrics.MeasureRequestDuration()) { // Simulación de trabajo Thread.Sleep(100); }
return Ok("Metrics tracked"); }}Health Checks
También en la biblioteca
inversify para TypeScript: guía completa con ejemplos
Geolocalización y mapas en Go (Golang): bibliotecas y ejemplos de código
Trabajo con fechas en Java: revisión de las bibliotecas java.time, Joda-Time y Apache Commons
gRPC para C++: bibliotecas, configuración y ejemplos de código
Trabajo con CSV en C# (.NET): Guía Completa