Monitoreo de aplicaciones C# (.NET) con AppMetrics

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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.Client


Luego, 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

Recommendations