/// <summary>
        /// Configures sending message handlers, tasks, system and GC events metrics
        /// over http and into InfluxDb.
        /// </summary>
        /// <param name="services">IServiceCollection to add the services to.</param>
        /// <param name="hostContext">Context containing the common services on the IHost.</param>
        /// <returns>The Microsoft.Extensions.DependencyInjection.IServiceCollection so that additional
        /// calls can be chained.</returns>
        public static IServiceCollection AddConsoleMetrics(this IServiceCollection services, HostBuilderContext hostContext)
        {
            var metricsBuilder = AppMetrics.CreateDefaultBuilder()
                                 .Configuration.Configure(options =>
            {
                options.Enabled          = true;
                options.ReportingEnabled = true;
            });

            metricsBuilder.OutputMetrics.AsPrometheusPlainText();

            var metricsConfig  = hostContext.Configuration.GetSection(MicroserviceConstants.MetricsConfiguration.Metrics);
            var metricsOptions = new MetricsConfigurationOptions();

            metricsConfig.Bind(metricsOptions);

            metricsBuilder.AddInfluxDb(metricsOptions.ReportingInfluxDb);
            metricsBuilder.AddOverHttp(hostContext.HostingEnvironment, metricsOptions.ReportingOverHttp);

            var metrics = metricsBuilder.Build();

            services.AddSingleton(metrics.OutputEnvFormatters);
            services.AddSingleton <IMetrics>(metrics);
            services.AddSingleton(metrics);
            services.AddMetricsReporter(metricsOptions);

            if (metricsOptions.AddSystemMetrics)
            {
                services.AddAppMetricsCollectors();
            }

            return(services);
        }
Example #2
0
        /// <summary>
        /// Configures the metrics and health checks.
        /// </summary>
        /// <param name="hostBuilder">The host builder.</param>
        public static IWebHostBuilder ConfigureMetricsAndHealth(this IWebHostBuilder hostBuilder)
        {
            hostBuilder
            .ConfigureHealthWithDefaults(builder => { })
            .ConfigureMetricsWithDefaults((builderContext, metricsBuilder) =>
            {
                metricsBuilder.OutputMetrics.AsPrometheusPlainText();

                var metricsConfig  = builderContext.Configuration.GetSection(MicroserviceConstants.MetricsConfiguration.Metrics);
                var metricsOptions = new MetricsConfigurationOptions();
                metricsConfig.Bind(metricsOptions);

                if (metricsOptions.ReportingInfluxDb.InfluxDb.BaseUri != null)
                {
                    metricsBuilder.Report.ToInfluxDb(metricsOptions.ReportingInfluxDb);
                }
            })
            .UseMetricsWebTracking()
            .UseMetrics(options =>
            {
                options.EndpointOptions = endpointsOptions =>
                {
                    endpointsOptions.MetricsTextEndpointOutputFormatter = Metrics.Instance.OutputMetricsFormatters.OfType <MetricsPrometheusTextOutputFormatter>().First();
                    endpointsOptions.MetricsEndpointOutputFormatter     = Metrics.Instance.OutputMetricsFormatters.OfType <MetricsPrometheusTextOutputFormatter>().First();
                };
            })
            .UseSystemMetrics();

            return(hostBuilder);
        }
        /// <summary>
        /// Add metrics reporter.
        /// </summary>
        /// <param name="services">IServiceCollection to add the services to.</param>
        /// <param name="metricsOptions">Metrics configuration options.</param>
        /// <returns></returns>
        static void AddMetricsReporter(this IServiceCollection services, MetricsConfigurationOptions metricsOptions)
        {
            var metricsReporterOptions = new MetricsReporterOptions(metricsOptions);

            services.AddSingleton(metricsReporterOptions);
            services.AddHostedService <MetricsReporterService>();
        }
Example #4
0
        /// <summary>
        /// Add GC metrics, CPU metrics and memory usage metrics.
        /// </summary>
        /// <param name="hostBuilder">The host builder.</param>
        /// <returns></returns>
        static IWebHostBuilder UseSystemMetrics(this IWebHostBuilder hostBuilder)
        {
            hostBuilder
            .ConfigureServices((builderContext, services) =>
            {
                var metricsConfig  = builderContext.Configuration.GetSection(MicroserviceConstants.MetricsConfiguration.Metrics);
                var metricsOptions = new MetricsConfigurationOptions();
                metricsConfig.Bind(metricsOptions);

                if (metricsOptions.AddSystemMetrics)
                {
                    services.AddAppMetricsCollectors();
                }
            });

            return(hostBuilder);
        }