metrics-exporter-otel

Crates.iometrics-exporter-otel
lib.rsmetrics-exporter-otel
version0.1.0-fork.3
created_at2025-07-15 05:59:26.715289+00
updated_at2025-08-01 00:56:45.929096+00
descriptionA metrics-compatible exporter for sending metrics to OpenTelemetry collectors.
homepagehttps://github.com/palindrom615/metrics
repositoryhttps://github.com/palindrom615/metrics
max_upload_size
id1752628
size64,219
Whoemoon Jang (palindrom615)

documentation

https://docs.rs/metrics-exporter-otel

README

metrics-exporter-otel

WARNING

This crate is not affiliated to [metrics] crate (yet). Use it at your own risk. See PR

docs-badge crates-badge license-badge

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

Overview

A metrics-compatible exporter for OpenTelemetry collectors and OTLP endpoints.

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.1"
opentelemetry = "0.30"
opentelemetry_sdk = "0.30"

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 Type OpenTelemetry Instrument
Counter ObservableCounter (u64)
Gauge ObservableGauge (f64)
Histogram Histogram (f64)
Commit count: 0

cargo fmt