Métricas de Prometheus en C# (.NET) — biblioteca prometheus-net
En el desarrollo moderno de aplicaciones web y microservicios en la plataforma .NET, el monitoreo y la observabilidad se han convertido en elementos obligatorios en entornos de producción. La biblioteca prometheus-net es la biblioteca cliente oficial para .NET, que permite exportar fácilmente las métricas de la aplicación en un formato comprensible para el servidor de monitoreo Prometheus.
Con prometheus-net puedes recopilar datos sobre el rendimiento (tiempo de respuesta, número de solicitudes, errores, uso de memoria) y transmitirlos a Prometheus para su posterior visualización en Grafana u otras herramientas. La biblioteca es compatible tanto con versiones antiguas de .NET Framework (4.6.1+) como con las modernas .NET Core / .NET 5/6/7/8.
Instalación
Puedes instalar la biblioteca a través del Administrador de paquetes NuGet o mediante la CLI de .NET:
dotnet add package prometheus-netPara aplicaciones ASP.NET Core, también se requiere el paquete prometheus-net.AspNetCore:
dotnet add package prometheus-net.AspNetCoreTipos principales de métricas
Prometheus admite cuatro tipos principales de métricas. En prometheus-net se implementan como fábricas estáticas en la clase Metrics:
- Counter — un contador que solo puede aumentar (por ejemplo, el número de solicitudes procesadas).
- Gauge — una métrica que puede tanto aumentar como disminuir (por ejemplo, el número de conexiones activas o la temperatura actual).
- Histogram — un histograma que cuenta el número de observaciones en intervalos definidos (buckets). Se utiliza para medir la distribución del tiempo de respuesta o el tamaño de los datos.
- Summary — una métrica resumida que calcula cuantiles (p50, p95, p99) basándose en un flujo de observaciones.
Ejemplo de uso de Counter
Creemos un contador simple para contar el número de solicitudes HTTP procesadas:
using Prometheus;
// Creamos un contador con nombre y descripciónprivate static readonly Counter RequestCount = Metrics .CreateCounter("myapp_requests_total", "Número total de solicitudes HTTP.");
// En el manejador de la solicitud incrementamos el contadorpublic IActionResult Index(){ RequestCount.Inc(); // incrementar en 1 // O RequestCount.Inc(5); // incrementar en 5 return View();}Ejemplo de uso de Gauge
Gauge es útil para rastrear el estado actual, por ejemplo, el número de usuarios activos:
private static readonly Gauge ActiveUsers = Metrics .CreateGauge("myapp_active_users", "Número de usuarios activos.");
// Al iniciar sesión de un usuarioActiveUsers.Inc();
// Al cerrar sesión de un usuarioActiveUsers.Dec();Ejemplo de uso de Histogram
El histograma es ideal para medir el tiempo de ejecución de las solicitudes:
private static readonly Histogram RequestDuration = Metrics .CreateHistogram("myapp_request_duration_seconds", "Histograma de la duración de las solicitudes.", new HistogramConfiguration { // Configuramos los límites de los buckets Buckets = new[] { 0.1, 0.25, 0.5, 1.0, 2.5 } });
// En un middleware o en una acción de controladorusing (RequestDuration.NewTimer()){ // ejecución de la solicitud await Next(context);}Integración con ASP.NET Core
Para que tu endpoint /metrics comience a entregar datos en formato Prometheus, basta con agregar el middleware en Program.cs:
using Prometheus;
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// Agregamos el middleware para recopilar mét