Métricas de Prometheus en C# (.NET): integración y configuración

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

Métricas de Prometheus en C# (.NET): guía completa de integración



Prometheus es un sistema de monitoreo de código abierto que recopila y almacena métricas en forma de series temporales. Para desarrolladores de C# (.NET), la integración con Prometheus abre la posibilidad de rastrear el rendimiento de las aplicaciones, indicadores comerciales y el estado del sistema en tiempo real. En este artículo, analizaremos cómo conectar Prometheus a una aplicación .NET, qué librerías usar y cómo configurar correctamente las métricas.



¿Por qué son necesarias las métricas de Prometheus en .NET?

El monitoreo con Prometheus permite:

  • Rastrear la cantidad de solicitudes, errores y tiempo de respuesta.
  • Recopilar métricas de rendimiento (CPU, memoria, GC).
  • Crear métricas de negocio personalizadas (usuarios activos, pedidos).
  • Integrarse con Grafana para visualizar paneles.
  • Configurar alertas basadas en valores umbral.


Librería prometheus-net

La librería principal para trabajar con Prometheus en .NET es prometheus-net. Soporta ASP.NET Core, .NET Core, .NET Framework y gRPC. Instalación a través de NuGet:

dotnet add package prometheus-net

Para ASP.NET Core, instale adicionalmente:

dotnet add package prometheus-net.AspNetCore


Tipos de métricas en Prometheus

La librería soporta todos los tipos estándar de métricas:

  • Counter — contador que solo aumenta (número de solicitudes).
  • Gauge — valor que puede aumentar y disminuir (temperatura actual).
  • Histogram — histograma para medir la distribución de valores (tiempo de respuesta).
  • Summary — cuantiles para agregar datos (p95, p99).


Ejemplo: Counter básico

Creemos una métrica que cuente el número de solicitudes a un endpoint:

using Prometheus;

public class MetricsService{ private static readonly Counter RequestCount = Metrics .CreateCounter("app_requests_total", "Total number of requests", new CounterConfiguration { LabelNames = new[] { "method", "endpoint" } });

public void RecordRequest(string method, string endpoint) { RequestCount.WithLabels(method, endpoint).Inc(); }}

En el controlador de ASP.NET Core, la llamada se verá así:

[ApiController][Route("api/order")]public class OrderController : ControllerBase{    private readonly MetricsService _metrics;

public OrderController(MetricsService metrics) => _metrics = metrics;

[HttpGet] public IActionResult GetOrders() { _metrics.RecordRequest("GET", "/api/order"); return Ok(new { orders = new[] { "order1", "order2" } }); }}


Ejemplo: Gauge para usuarios activos

private static readonly Gauge ActiveUsers = Metrics    .CreateGauge("app_active_users", "Number of active users");

public void UserLoggedIn() => ActiveUsers.Inc();public void UserLoggedOut() => ActiveUsers.Dec();


Ejemplo: Histogram para tiempo de respuesta

private static readonly Histogram RequestDuration = Metrics    .CreateHistogram("app_request_duration_seconds", "Request duration in seconds",        new HistogramConfiguration        {            Buckets = Histogram.ExponentialBuckets(0.001, 2, 10) // de 1ms a ~1s        });

public void RecordRequestDuration(double seconds){ RequestDuration.Observe(seconds);}


Exportación de métricas en ASP.NET Core

Para que Prometheus pueda recopilar métricas, es necesario agregar un endpoint /metrics. En Program.cs:

using Prometheus;

var builder = WebApplication.CreateBuilder(args);builder.Services.AddCont

Recommendations