You can send custom metrics from your .NET Core application using Logzio.App.Metrics. Logzio.App.Metrics is an open-source and cross-platform .NET library used to record metrics within an application and forward the data to Logz.io.

These instructions show you how to:

  • Create a basic custom metrics export configuration with a hardcoded Logz.io exporter
  • Create a basic custom metrics export configuration with a Logz.io exporter defined by a configuration file
  • Add advanced settings to the basic custom metrics export configuration

Send custom metrics to Logz.io with a hardcoded Logz.io exporter

Before you begin, you’ll need:

  • An application in .NET Core 3.1 or higher
  • An active Logz.io account
Install the App.Metrics.Logzio package

Install the App.Metrics.Logzio package from the Package Manager Console:

Install-Package Logzio.App.Metrics

If you prefer to install the library manually, download the latest version from the NuGet Gallery.

Create MetricsBuilder

To create MetricsBuilder, copy and paste the following code into the function of the code that you need to export metrics from:

var metrics = new MetricsBuilder()
                .Report.ToLogzioHttp("<<LISTENER-HOST>>", "<<METRICS-SHIPPING-TOKEN>>")
                .Build();

Replace <<LISTENER-HOST>> with the host for your region. For example, listener.logz.io if your account is hosted on AWS US East, or listener-nl.logz.io if hosted on Azure West Europe. For HTTPS communication, use port 8053. For HTTP communication, use port 8052.

Replace <<METRICS-SHIPPING-TOKEN>> with a token for the Metrics account you want to ship to.
Look up your Metrics token.

Create Scheduler

To create the Scheduler, copy and paste the following code into the same function of the code as the MetricsBuilder:

var scheduler = new AppMetricsTaskScheduler(
                TimeSpan.FromSeconds(15),
                async () => { await Task.WhenAll(metrics.ReportRunner.RunAllAsync()); });
scheduler.Start();
Add required metrics to your code

You can send the following metrics from your code:

You must have at least one of the above metrics in your code to use the Logzio.App.Metrics. For example, to add a counter metric to your code, copy and paste the following code block into the same function of the code as the MetricsBuilder and Scheduler.

var counter = new CounterOptions {Name = "my_counter", Tags = new MetricTags("test", "my_test")};
metrics.Measure.Counter.Increment(counter);

In the example above, the metric has a name (“my_counter”), a tag key (“test”) and a tag value (“my_test”): These parameters are used to query data from this metric in your Logz.io dashboard.

Apdex

Apdex (Application Performance Index) allows you to monitor end-user satisfaction. For more information on this metric, refer to App Metrics documentation.

Counter

Counters are one of the most basic supported metrics types: They enable you to track how many times something has happened. For more information on this metric, refer to App Metrics documentation.

Gauge

A Gauge is an action that returns an instantaneous measurement for a value that abitrarily increases and decreases (for example, CPU usage). For more information on this metric, refer to App Metrics documentation.

Histogram

Histograms measure the statistical distribution of a set of values. For more information on this metric, refer to App Metrics documentation.

Meter

A Meter measures the rate at which an event occurs, along with the total count of the occurences. For more information on this metric, refer to App Metrics documentation.

Timer

A Timer is a combination of a histogram and a meter, which enables you to measure the duration of a type of event, the rate of its occurrence, and provide duration statistics. For more information on this metric, refer to App Metrics documentation.

Run your application

Run your application to start sending metrics to Logz.io.

Check Logz.io for your events

Give your events some time to get from your system to ours, and then open the Metrics dashboard.

Filter the metrics by labels

Once the metrics are in Logz.io, you can query the required metrics using labels. Each metric has the following labels:

App Metrics parameter name Description Logz.io parameter name
Name The name of the metric. Required for each metric. Metric name if not stated otherwise
MeasurementUnit The unit you use to measure. By default it is None. unit
Context The context which the metric belong to. By default it is Application. context
Tags Pairs of key and value of the metric. It is not required to have tags for a metric. Tags keys

Some of the metrics have custom labels, as described below.

Meter
App Metrics label name Logz.io label name
RateUnit rate_unit
App Metrics parameter name Logz.io parameter name
Count [[your_meter_name]]_count
One Min Rate [[your_meter_name]]_one_min_rate
Five Min Rate [[your_meter_name]]_five_min_rate
Fifteen Min Rate [[your_meter_name]]_fifteen_min_rate
Mean Rate [[your_meter_name]]_mean_rate

Replace [[your_meter_name]] with the name that you assigned to the meter metric.

Histogram
App Metrics label name Logz.io label name
Last User Value last_user_value
Max User Value max_user_value
Min User Value min_user_value
App Metrics parameter name Logz.io parameter name
Count [[your_histogram_name]]_count
Sum [[your_histogram_name]]_sum
Last Value [[your_histogram_name]]_lastValue
Max [[your_histogram_name]]_max
Mean [[your_histogram_name]]_mean
Median [[your_histogram_name]]_median
Min [[your_histogram_name]]_min
Percentile 75 [[your_histogram_name]]_percentile75
Percentile 95 [[your_histogram_name]]_percentile95
Percentile 98 [[your_histogram_name]]_percentile98
Percentile 99 [[your_histogram_name]]_percentile99
Percentile 999 [[your_histogram_name]]_percentile999
Sample Size [[your_histogram_name]]_sample_size
Std Dev [[your_histogram_name]]_std_dev

Replace [[your_histogram_name]] with the name that you assigned to the histogram metric.

Timer
App Metrics label name Logz.io label name
Duration Unit duration_unit
Rate Unit rate_unit
App Metrics parameter name Logz.io parameter name
Count [[your_timer_name]]_count
Histogram Active Session [[your_timer_name]]_histogram_active_session
Histogram Sum [[your_timer_name]]_histogram_sum
Histogram Last Value [[your_timer_name]]_histogram_lastValue
Histogram Max [[your_timer_name]]_histogram_max
Histogram Median [[your_timer_name]]_histogram_median
Histogram Percentile 75 [[your_timer_name]]_histogram_percentile75
Histogram Percentile 95 [[your_timer_name]]_histogram_percentile95
Histogram Percentile 98 [[your_timer_name]]_histogram_percentile98
Histogram Percentile 99 [[your_timer_name]]_histogram_percentile99
Histogram Percentile 999 [[your_timer_name]]_histogram_percentile999
Histogram Sample Size [[your_timer_name]]_histogram_sample_size
Histogram Std Dev [[your_timer_name]]_histogram_std_dev
Rate One Min Rate [[your_timer_name]]_rate_one_min_rate
Rate Five Min Rate [[your_timer_name]]_rate_five_min_rate
Rate Fifteen Min Rate [[your_timer_name]]_rate_fifteen_min_rate
Rate Mean Rate [[your_timer_name]]_rate_mean_rate

Replace [[your_timer_name]] with the name that you assigned to the timer metric.

Apdex
App Metrics parameter name Logz.io parameter name
Sample Size [[your_apdex_name]]_sample_size
Score [[your_apdex_name]]_score
Frustrating [[your_apdex_name]]_frustrating
Satisfied [[your_apdex_name]]_satisfied
Tolerating [[your_apdex_name]]_tolerating

Replace [[your_apdex_name]] with the name that you assigned to the timer metric.

Send custom metrics to Logz.io with a Logz.io exporter defined by a config file

Before you begin, you’ll need:

  • An application in .NET Core 3.1 or higher
  • An active Logz.io account
Install the App.Metrics.Logzio package

Install the App.Metrics.Logzio package from the Package Manager Console:

Install-Package Logzio.App.Metrics

If you prefer to install the library manually, download the latest version from NuGet Gallery.

Create MetricsBuilder

To create MetricsBuilder, copy and paste the following code into the function of the code that you need to export metrics from:

var metrics = new MetricsBuilder()
                .Report.ToLogzioHttp("<<path_to_the_config_file>>")
                .Build();

Add the following code to the configuration file:

<?xml version="1.0" encoding="utf-8"?>

<Configuration>
    <LogzioConnection>
        <Endpoint> <<LISTENER-HOST>> </Endpoint>
        <Token> <<METRICS-SHIPPING-TOKEN>> </Token>
    </LogzioConnection>
</Configuration>

Replace <<LISTENER-HOST>> with the host for your region. For example, listener.logz.io if your account is hosted on AWS US East, or listener-nl.logz.io if hosted on Azure West Europe. For HTTPS communication, use port 8053. For HTTP communication, use port 8052.

Replace <<METRICS-SHIPPING-TOKEN>> with a token for the Metrics account you want to ship to.
Look up your Metrics token.

Create Scheduler

To create a Scheduler, copy and paste the following code into the same function of the code as the MetricsBuilder:

var scheduler = new AppMetricsTaskScheduler(
                TimeSpan.FromSeconds(15),
                async () => { await Task.WhenAll(metrics.ReportRunner.RunAllAsync()); });
scheduler.Start();
Add the required metrics to your code

You can send the following metrics from your code:

You must have at least one of the above metrics in your code to use the Logzio.App.Metrics. For example, to add a counter metric to your code, copy and paste the following code block into the same function of the code as the MetricsBuilder and Scheduler:

var counter = new CounterOptions {Name = "my_counter", Tags = new MetricTags("test", "my_test")};
metrics.Measure.Counter.Increment(counter);

In the example above, the metric has a name (“my_counter”), a tag key (“test”) and a tag value (“my_test”). These parameters are used to query data from this metric in your Logz.io dashboard.

Apdex

Apdex (Application Performance Index) allows you to monitor end-user satisfaction. For more information on this metric, refer to App Metrics documentation.

Counter

Counters are one of the most basic supported metrics types: They enable you to track how many times something has happened. For more information on this metric, refer to App Metrics documentation.

Gauge

A Gauge is an action that returns an instantaneous measurement for a value that abitrarily increases and decreases (for example, CPU usage). For more information on this metric, refer to App Metrics documentation.

Histogram

Histograms measure the statistical distribution of a set of values. For more information on this metric, refer to App Metrics documentation.

Meter

A Meter measures the rate at which an event occurs, along with the total count of the occurences. For more information on this metric, refer to App Metrics documentation.

Timer

A Timer is a combination of a histogram and a meter, which enables you to measure the duration of a type of event, the rate of its occurrence, and provide duration statistics. For more information on this metric, refer to App Metrics documentation.

Run your application

Run your application to start sending metrics to Logz.io.

Check Logz.io for your events

Give your events some time to get from your system to ours, and then open Metrics dashboard.

Filter the metrics by labels

Once the metrics are in Logz.io, you can query the required metrics using labels. Each metric has the following labels:

App Metrics parameter name Description Logz.io parameter name
Name The name of the metric. Required for each metric. Metric name if not stated otherwise
MeasurementUnit The unit you use to measure. By default it is None. unit
Context The context which the metric belong to. By default it is Application. context
Tags Pairs of key and value of the metric. It is not required to have tags for a metric. Tags keys

Some of the metrics have custom labels as described below.

Meter
App Metrics label name Logz.io label name
RateUnit rate_unit
App Metrics parameter name Logz.io parameter name
Count [[your_meter_name]]_count
One Min Rate [[your_meter_name]]_one_min_rate
Five Min Rate [[your_meter_name]]_five_min_rate
Fifteen Min Rate [[your_meter_name]]_fifteen_min_rate
Mean Rate [[your_meter_name]]_mean_rate

Replace [[your_meter_name]] with the name that you assigned to the meter metric.

Histogram
App Metrics label name Logz.io label name
Last User Value last_user_value
Max User Value max_user_value
Min User Value min_user_value
App Metrics parameter name Logz.io parameter name
Count [[your_histogram_name]]_count
Sum [[your_histogram_name]]_sum
Last Value [[your_histogram_name]]_lastValue
Max [[your_histogram_name]]_max
Mean [[your_histogram_name]]_mean
Median [[your_histogram_name]]_median
Min [[your_histogram_name]]_min
Percentile 75 [[your_histogram_name]]_percentile75
Percentile 95 [[your_histogram_name]]_percentile95
Percentile 98 [[your_histogram_name]]_percentile98
Percentile 99 [[your_histogram_name]]_percentile99
Percentile 999 [[your_histogram_name]]_percentile999
Sample Size [[your_histogram_name]]_sample_size
Std Dev [[your_histogram_name]]_std_dev

Replace [[your_histogram_name]] with the name that you assigned to the histogram metric.

Timer
App Metrics label name Logz.io label name
Duration Unit duration_unit
Rate Unit rate_unit
App Metrics parameter name Logz.io parameter name
Count [[your_timer_name]]_count
Histogram Active Session [[your_timer_name]]_histogram_active_session
Histogram Sum [[your_timer_name]]_histogram_sum
Histogram Last Value [[your_timer_name]]_histogram_lastValue
Histogram Max [[your_timer_name]]_histogram_max
Histogram Median [[your_timer_name]]_histogram_median
Histogram Percentile 75 [[your_timer_name]]_histogram_percentile75
Histogram Percentile 95 [[your_timer_name]]_histogram_percentile95
Histogram Percentile 98 [[your_timer_name]]_histogram_percentile98
Histogram Percentile 99 [[your_timer_name]]_histogram_percentile99
Histogram Percentile 999 [[your_timer_name]]_histogram_percentile999
Histogram Sample Size [[your_timer_name]]_histogram_sample_size
Histogram Std Dev [[your_timer_name]]_histogram_std_dev
Rate One Min Rate [[your_timer_name]]_rate_one_min_rate
Rate Five Min Rate [[your_timer_name]]_rate_five_min_rate
Rate Fifteen Min Rate [[your_timer_name]]_rate_fifteen_min_rate
Rate Mean Rate [[your_timer_name]]_rate_mean_rate

Replace [[your_timer_name]] with the name that you assigned to the timer metric.

Apdex
App Metrics parameter name Logz.io parameter name
Sample Size [[your_apdex_name]]_sample_size
Score [[your_apdex_name]]_score
Frustrating [[your_apdex_name]]_frustrating
Satisfied [[your_apdex_name]]_satisfied
Tolerating [[your_apdex_name]]_tolerating

Replace [[your_apdex_name]] with the name that you assigned to the apdex metric.

Export using ToLogzioHttp exporter

You can configure MetricsBuilder to use ToLogzioHttp exporter, which allows you to export metrics via HTTP using additional export settings. To enable this exporter, add the following code block to define the MetricsBuilder:

var metrics = new MetricsBuilder()
                .Report.ToLogzioHttp(options =>
                {
                    options.Logzio.EndpointUri = new Uri("<<LISTENER-HOST>>");
                    options.Logzio.Token = "<<METRICS-SHIPPING-TOKEN>>";
                    options.FlushInterval = TimeSpan.FromSeconds(15);
                    options.Filter = new MetricsFilter().WhereType(MetricType.Counter);
                    options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
                    options.HttpPolicy.FailuresBeforeBackoff = 5;
                    options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
                })
                .Build();
  • Replace <<LISTENER-HOST>> with the host for your region. For example, listener.logz.io if your account is hosted on AWS US East, or listener-nl.logz.io if hosted on Azure West Europe. For HTTPS communication use port 8053. For HTTP communication use port 8052.
  • Replace <<METRICS-SHIPPING-TOKEN>> with a token for the Metrics account you want to ship to.
    Look up your Metrics token.
  • FlushInterval is the value in seconds defining delay between reporting metrics.
  • Filteris used to filter metrics for this reporter.
  • HttpPolicy.BackoffPeriod is the value in seconds defining the TimeSpan to back-off when metrics are failing to report to the metrics ingress endpoint.
  • HttpPolicy.FailuresBeforeBackoff is the value defining the number of failures before backing-off when metrics are failing to report to the metrics ingress endpoint.
  • HttpPolicy.Timeout is the value in seconds defining the HTTP timeout duration when attempting to report metrics to the metrics ingress endpoint.

.NET Core runtime metrics

The runtime metrics are additional parameters that will be sent from your code. These parameters include:

  • Garbage collection frequencies and timings by generation/type, pause timings and GC CPU consumption ratio.
  • Heap size by generation.
  • Bytes allocated by small/large object heap.
  • JIT compilations and JIT CPU consumption ratio.
  • Thread pool size, scheduling delays and reasons for growing/shrinking.
  • Lock contention.

To enable collection of these metrics with default settings, add the following code block after the MetricsBuilder:

// metrics is the MetricsBuilder
IDisposable collector = DotNetRuntimeStatsBuilder.Default(metrics).StartCollecting();

To enable collection of these metrics with custom settings, add the following code block after the MetricsBuilder:

IDisposable collector = DotNetRuntimeStatsBuilder
    .Customize()
    .WithContentionStats()
    .WithJitStats()
    .WithThreadPoolSchedulingStats()
    .WithThreadPoolStats()
    .WithGcStats()
    .StartCollecting(metrics);          // metrics is the MetricsBuilder

Data collected from these metrics is found in Logz.io, under the Contexts labels process and dotnet.

Get current snapshot

The current snapshot creates a preview of the metrics in Logz.io format. To enable this option, add the following code block to the MetricsBuilder:

var metrics = new MetricsBuilder()
                .OutputMetrics.AsLogzioCompressedProtobuf()
                .Build();

var snapshot = metrics.Snapshot.Get();
            
using (var stream = new MemoryStream())
{
    await metrics.DefaultOutputMetricsFormatter.WriteAsync(stream, snapshot);

    // Your code here...
}