| Crates.io | nm_otel |
| lib.rs | nm_otel |
| version | 0.2.0 |
| created_at | 2026-01-07 06:38:20.494956+00 |
| updated_at | 2026-01-08 05:47:44.885605+00 |
| description | OpenTelemetry bridge for nm metrics |
| homepage | |
| repository | https://github.com/folo-rs/folo |
| max_upload_size | |
| id | 2027637 |
| size | 85,217 |
OpenTelemetry bridge for nm metrics.
This crate provides a bridge between nm metrics and OpenTelemetry,
enabling export of nm-collected metrics to any OpenTelemetry-compatible backend.
use std::time::Duration;
use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider};
use tick::Clock;
#[tokio::main]
async fn main() {
// Set up an OpenTelemetry meter provider with your exporter of choice.
let exporter = opentelemetry_stdout::MetricExporter::default();
let reader = PeriodicReader::builder(exporter).build();
let my_meter_provider = SdkMeterProvider::builder().with_reader(reader).build();
// Create and run the nm-to-OpenTelemetry publisher.
let mut nm_publisher = nm_otel::Publisher::builder()
.provider(my_meter_provider)
.clock(Clock::new_tokio())
.interval(Duration::from_secs(60))
.build();
nm_publisher.publish_forever().await;
}
Each nm::Event is exported as one or more OpenTelemetry metrics:
| nm data | OpenTelemetry type | Metric name |
|---|---|---|
| count | counter | {event} |
| sum | gauge | {event}_sum |
| histogram | counter per bucket | {event}_bucket with le attribute |
Histograms are exported as separate counter and gauge metrics because the OpenTelemetry Rust SDK does not yet support recording pre-aggregated histogram data.
The format uses cumulative bucket counts with a le (less-than-or-equal) attribute:
http_latency_ms_bucket{le="10"} → observations ≤ 10
http_latency_ms_bucket{le="50"} → observations ≤ 50
http_latency_ms_bucket{le="100"} → observations ≤ 100
http_latency_ms_bucket{le="+Inf"} → all observations
http_latency_ms → total observation count
http_latency_ms_sum → sum of all observed values
More details in the package documentation.
This is part of the Folo project that provides mechanisms for high-performance hardware-aware programming in Rust.