/// <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); }
/// <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>(); }
/// <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); }