ottotom

Crates.ioottotom
lib.rsottotom
version0.31.3
created_at2026-01-13 20:00:08.780653+00
updated_at2026-01-13 20:00:08.780653+00
descriptionConversion of OpenTelemetry metrics to OpenMetrics Text format
homepage
repositoryhttps://github.com/max-te/ottotom
max_upload_size
id2041075
size90,102
Maximilian Teegen (max-te)

documentation

README

Ottotom (OpenTelemetry to text OpenMetrics)

A Rust crate for exporting OpenTelemetry metrics in the OpenMetrics text format. This serves as a protobuf-free alternative to the discontinued opentelemetry-prometheus crate.

⚠️ Warning: This implementation is not fully spec-compliant for OpenTelemetry-to-OpenMetrics conversion. Some edge cases and complex metrics setups may not be handled correctly. This library is still in an experimental state.

Features

  • Conversion of opentelemetry-sdk metric data to OpenMetrics-compliant text.
  • Ready-to-use Exporter to register in opentelemetry, outputs metrics in the OpenMetrics text format.

Usage

use std::time::Duration;
use ottotom::exporter::OpenMetricsExporter;
use opentelemetry_sdk::metrics::PeriodicReader;
use opentelemetry_sdk::metrics::SdkMeterProvider;

pub fn init_openmetrics_exporter() -> OpenMetricsExporter {
    let exporter = OpenMetricsExporter::default();
    let reader = PeriodicReader::builder(exporter.clone())
        .with_interval(Duration::from_secs(1))
        .build();
    let meter_provider = SdkMeterProvider::builder()
        .with_reader(reader)
        .build();
    opentelemetry::global::set_meter_provider(meter_provider);
    exporter
}

let exporter = init_openmetrics_exporter();
// Retain the exporter in you app state. Register some opentelmetry meters and fill them with data.
// Later on (e.g. in a `/metrics` endpoint) read the current metrics:
async {
    let openmetrics = exporter.text().await;
    println!("{}", openmetrics);
};
Commit count: 59

cargo fmt