App Metrics 1.0 Fork me on GitHub
Show / Hide Table of Contents

Filtering Metrics

Report Filtering

App Metrics allows you to filter Metrics per reporter.

Below is an example reporting configuration which provides a filter to a console reporter filtering Metrics containing a tag key of "filter-tag1" and are Counters

private static void ConfigureMetrics(IServiceCollection services)
{
	services
		.AddMetrics(options =>
		{                    
			options.ReportingEnabled = true;
			options.GlobalTags.Add("env", "uat");
		})
		.AddReporting(factory =>
		{
			var filter = new DefaultMetricsFilter()
				.WhereType(MetricType.Counter)
				.WhereMetricTaggedWithKey("filter-tag1", "filter-tag2")
				.WithHealthChecks(true)
				.WithEnvironmentInfo(true);

			factory.AddConsole(new ConsoleReporterSettings
			{
				ReportInterval = TimeSpan.FromSeconds(10),
			}, filter);
		});
}

Globally Filtering

Metrics can also be set at a global level which would apply to all Metric data queries.

Below is an example of how to apply a global filter in a Web Host.

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddLogging()
        .AddRouting(options => { options.LowercaseUrls = true; });

    services.AddMvc();

    var filter = new DefaultMetricsFilter().WhereType(MetricType.Counter);

    services
        .AddMetrics()
        .AddGlobalFilter(filter)
        .AddJsonSerialization()
        .AddHealthChecks()
        .AddMetricsMiddleware();
}

Requesting the /metrics endpoint with the above configuration would result in only Counter Metrics being shown in the response.

Overriding the Global Filter

In cases where a global filter is set as well as a filter on a reporter, the reporter's filter will be used instead.

It is also possible to override the global filter if you where to retrieve a snapshot of the current metrics data via the Advanced Metric contract.

public class MyService
{
    private readonly IMetrics _metrics;

    public MyService(IMetrics metrics)
    {
        _metrics = metrics;
    }

    public MetricsDataValueSource DoSomething()
    {
        var filter = new DefaultMetricsFilter().WhereMetricNameStartsWith("test_");
        return _metrics.Snapshot.Get(filter);
    }
}

Supported Filtering

Metrics can be filtered by:

  • Metric Type
  • Tags
  • Context
  • Metric Name (Exact match or where name starts with)
Tip

Custom Metric Filters can be implemented rather than using the DefaultMetricsFilter by implementing IMetricsFilter.

Next Steps

  • Metric Types
  • Organizing Metrics - Contexts and Tagging
  • Edit this Doc
Back to top Copyright © 2017 Allan Hardy
Generated by DocFX