/// <summary> /// Configures the ASP.NET Core request pipeline to collect Prometheus metrics on processed HTTP requests. /// /// If using ASP.NET Core 3 or newer, call this after .UseRouting(). /// </summary> public static IApplicationBuilder UseHttpMetrics(this IApplicationBuilder app, HttpMiddlewareExporterOptions?options = null) { if (options == null) { options = new HttpMiddlewareExporterOptions(); } app.UseMiddleware <CaptureRouteDataMiddleware>(); if (options.InProgress.Enabled) { app.UseMiddleware <HttpInProgressMiddleware>(options.InProgress.Gauge); } if (options.RequestCount.Enabled) { app.UseMiddleware <HttpRequestCountMiddleware>(options.RequestCount.Counter); } if (options.RequestDuration.Enabled) { app.UseMiddleware <HttpRequestDurationMiddleware>(options.RequestDuration.Histogram); } return(app); }
/// <summary> /// Configures the ASP.NET Core request pipeline to collect Prometheus metrics on processed HTTP requests. /// </summary> public static IApplicationBuilder UseHttpMetrics(this IApplicationBuilder app, Action <HttpMiddlewareExporterOptions> configure) { var options = new HttpMiddlewareExporterOptions(); configure?.Invoke(options); app.UseHttpMetrics(options); return(app); }
/// <summary> /// Application Monitoring - Configures (prometheus) monitoring middleware to IApplicationBuilder instance /// </summary> /// <param name="app">IApplicationBuilder instance.</param> /// <param name="configuration">IConfiguration instance.</param> /// <param name="logger">ILogger instance.</param> /// <returns>Same IApplicationBuilder instance after configuring MonitoringMiddleware</returns> public static IApplicationBuilder UseMonitoringService(this IApplicationBuilder app, IConfiguration configuration, Microsoft.Extensions.Logging.ILogger logger) { var traceConfiguration = new TraceConfiguration(); configuration.Bind(SerilogTrace, traceConfiguration); Metrics.SuppressDefaultMetrics(); var options = new HttpMiddlewareExporterOptions(); options.RequestDuration.Histogram = Metrics.CreateHistogram("http_request_duration", "The duration of HTTP requests processed by an ASP.NET Core application", new HistogramConfiguration() { // 500 ms to 2000 ms and infinite buckets Buckets = Histogram.ExponentialBuckets(0.500, 2, 3), LabelNames = new[] { "code", "method", "controller", "action" }, SuppressInitialValue = true, }); logger.LogInformation(AddingMonitoringMiddleware); var pattern = traceConfiguration.ExcludePattern; if (options.InProgress.Enabled) { app.UseMiddleware <HttpMetricsInProgressMiddleware>(options.InProgress.Gauge, pattern); } if (options.RequestCount.Enabled) { app.UseMiddleware <HttpMetricsCountMiddleware>(options.RequestCount.Counter, pattern); } if (options.RequestDuration.Enabled) { app.UseMiddleware <HttpMetricsDurationMiddleware>(options.RequestDuration.Histogram, pattern); } app.UseMetricServer(); logger.LogInformation(MonitoringMiddlewareAdded); return(app); }
/// <summary> /// Configures the ASP.NET Core request pipeline to collect Prometheus metrics on processed HTTP requests. /// </summary> public static IApplicationBuilder UseHttpMetrics(this IApplicationBuilder app, HttpMiddlewareExporterOptions options = null) { if (options == null) { options = new HttpMiddlewareExporterOptions(); } if (options.InFlight.Enabled) { app.UseMiddleware <HttpInFlightMiddleware>(options.InFlight.Gauge); } if (options.RequestCount.Enabled) { app.UseMiddleware <HttpRequestCountMiddleware>(options.RequestCount.Counter); } if (options.RequestDuration.Enabled) { app.UseMiddleware <HttpRequestDurationMiddleware>(options.RequestDuration.Histogram); } return(app); }