/// <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);
        }
示例#3
0
        /// <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);
        }