Skip to main content

Crate metrics_exporter_otel

Crate metrics_exporter_otel 

Source
Expand description

§metrics-exporter-otel

docs-badge crates-badge license-badge

A metrics-compatible exporter for sending metrics to OpenTelemetry collectors.

§Features

  • Counters, gauges, and histograms
  • Custom histogram bucket boundaries
  • Metric descriptions and units
  • Lock-free concurrent data structures
  • Works with any OpenTelemetry Meter

§Quick Start

Add this to your Cargo.toml:

[dependencies]
metrics = "0.24"
metrics-exporter-otel = "0.3"
opentelemetry = "0.31"
opentelemetry_sdk = "0.31"

Basic usage:

use metrics_exporter_otel::OpenTelemetryRecorder;
use opentelemetry::metrics::MeterProvider;
use opentelemetry_sdk::metrics::SdkMeterProvider;

// Create an OpenTelemetry meter
let provider = SdkMeterProvider::default();
let meter = provider.meter("my_application");

// Create and install the recorder
let recorder = OpenTelemetryRecorder::new(meter);
metrics::set_global_recorder(recorder).expect("failed to install recorder");

// Use metrics as normal
metrics::counter!("requests_total", "method" => "GET").increment(1);
metrics::gauge!("cpu_usage", "core" => "0").set(45.2);
metrics::histogram!("response_time", "endpoint" => "/api/users").record(0.123);

§Custom Histogram Boundaries

let recorder = OpenTelemetryRecorder::new(meter);

recorder.set_histogram_bounds(
    &metrics::KeyName::from("response_time"),
    vec![0.001, 0.005, 0.01, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0]
);

metrics::set_global_recorder(recorder).expect("failed to install recorder");

§Metric Descriptions and Units

You can provide descriptions and units for your metrics using the describe_* macros.

CAUTION: These macros must be called before the metrics are recorded. The instruments created before calling these macros will not have descriptions or units.

use metrics::{describe_counter, describe_histogram, Unit};

describe_counter!("requests_total", Unit::Count, "Total HTTP requests");
describe_histogram!("response_time", Unit::Seconds, "Response time distribution");

metrics::counter!("requests_total").increment(1);
metrics::histogram!("response_time").record(0.045);

§Compatibility

§Metric Type Mapping

metrics TypeOpenTelemetry Instrument
CounterObservableCounter (u64)
GaugeObservableGauge (f64)
HistogramHistogram (f64)

Structs§

OpenTelemetryRecorder
A Recorder that exports metrics to OpenTelemetry.