Recording metrics

Overview

The observability plugin provides different functions depending on what kind of data you want to record.

The recorded data is available as an $ld:telemetry:metric event. To learn more, read Observability autogenerated metrics.

You can view all metrics sent to LaunchDarkly under Metrics in the LaunchDarkly user interface. To learn more, read Metrics.

How metrics are aggregated and exported

The observability SDK plugins use the OpenTelemetry SDK to aggregate and export metrics. Understanding when and how metrics are aggregated can help you tune performance and interpret metric data correctly.

Aggregation temporality

All LaunchDarkly observability SDKs use cumulative aggregation temporality, which is the OpenTelemetry SDK default. This means each export includes the cumulative value since the SDK was initialized, rather than a delta since the last export. LaunchDarkly’s backend handles the conversion to display rate-based or windowed views in the UI.

How metrics roll up

Metrics with the same name and identical attribute sets are automatically aggregated by the OpenTelemetry SDK before export. The aggregation strategy depends on the instrument type:

Metric typeOTel instrumentAggregation
recordMetric / recordGaugeGaugeLast value wins
recordCountCounterSum of all recorded values
recordIncrCounterSum of increments
recordHistogramHistogramDistribution (bucket counts, sum, min, max)
recordUpDownCounterUpDownCounterNet sum (increments and decrements)

This means if you record two recordCount calls with the name "page-views" and the same attributes within a single export interval, the SDK exports a single aggregated data point with the sum of both values.

To learn more, read the OpenTelemetry documentation about the Metrics Data Model.

Export intervals by SDK

Each SDK periodically flushes aggregated metrics to LaunchDarkly. The export interval varies by SDK:

SDKMetrics export intervalTraces/logs export interval
JavaScript (browser)30 seconds30 seconds
Node.js (server-side)5 seconds5 seconds
Python5 seconds5 seconds
Go5 seconds1 second (traces)
.NET (server-side)5 seconds5 seconds
Ruby60 seconds1 second
React Native10 seconds500 milliseconds
Android10 seconds1 second
Browser SDKs use longer intervals

Client-side browser SDKs use a 30-second export interval to reduce network overhead for end users. Server-side SDKs use shorter intervals (typically 5 seconds) for more real-time visibility. These intervals are not currently configurable through the plugin options.

Details about each SDK’s configuration are available in the SDK-specific sections below:

Client-side SDKs

This feature is available in the observability plugin for the following client-side SDKs:

iOS

When you record a metric with the observability plugin, it must include a name and value. Optionally, it can also include attributes and a timestamp. To construct the attributes, use Attributes from the @opentelemetry/api.

Here are the options for recording metrics:

1 LDObserve.shared.recordMetric(metric: .init(name: "elapsedTimeMs", value: 2200))

To learn more, read Observe.

Android

When you record a metric with the observability plugin, it must include a name and value. Optionally, it can also include attributes and a timestamp. To construct the attributes, use Attributes from the @opentelemetry/api.

Here are the options for recording metrics:

1 LDObserve.recordMetric(Metric("elapsedTimeMs", 2200))

To learn more, read LDObserve.

JavaScript

Here are the options for recording metrics:

1const onClick = () => {
2 const start = Date.now();
3 doInterestingWork();
4 const elapsed = Date.now() - start;
5 LDObserve.recordGauge({name: "elapsedTimeMs", value: elapsed});
6};

To learn more, read Observe.

React Native

When you record a metric with the observability plugin, it must include a name and value. Optionally, it can also include attributes and a timestamp. To construct the attributes, use Attributes from the @opentelemetry/api.

Here are the options for recording metrics:

1 LDObserve.recordMetric({name: "elapsedTimeMs", value: 2200});

To learn more, read Observe.

React Web

To record metrics with the React Web SDK, follow the example for JavaScript.

Vue

To record metrics with the Vue SDK, follow the example for JavaScript.

Server-side SDKs

This feature is available in the observability plugin for the following server-side SDKs:

.NET (server-side)

Here are the options for recording metrics:

1 Observe.RecordMetric(name, value, attributes);

To learn more, read Observe.

Go

To record a metric, pass the Go context.Context, as well as the name, value, and optional attributes of the metric to the appropriate Record* function. For example, you might want to record the value for a point-in-time measurement, such as the current CPU utilization percentage, or for a counter, such as the number of cache hits. The optional attributes may include any attributes from the OpenTelemetry specification.

Metrics with the same name and attributes are aggregated using the OpenTelemetry SDK. To learn more, read the OTel documentation on the Metrics Data Model.

Here are the options for recording metrics:

1 ldobserve.RecordMetric(ctx, "example-metric-name", 3.7)

To learn more, read RecordMetric, RecordCount, and RecordHistogram.

Node.js (server-side)

To record a metric, first create the metric within your application. The Metric interface includes a name, value, and optional tags. For example, you might create a metric for a point-in-time measurement, such as the current CPU utilization percentage, or for a counter, such as the number of cache hits.

Values with the same metric name and attributes are aggregated using the OpenTelemetry SDK. To learn more, read the OTel documentation on the Metrics Data Model.

Create OTel metric
1const metric = {
2 name: "exampleMetric",
3 value: 42
4}

Here are the options for recording metrics:

1 LDObserve.recordMetric(metric);

To learn more, read Observe.

Python

To record a metric, pass the name, value, and optional attributes to the appropriate record_* function. For example, you might want to record the value for a point-in-time measurement, such as the current CPU utilization percentage, or for a counter, such as the number of cache hits. The optional attributes may include any attributes from the OpenTelemetry specification.

Metrics with the same name and attributes are aggregated using the OpenTelemetry SDK. To learn more, read the OTel documentation on the Metrics Data Model.

Here are the options for recording metrics:

1 observe.record_metric("example-metric-name", 3.7)

To learn more, read ldobserve.