https://github.com/max-te/ottotom
Conversion of opentelemetry-rust metrics into openmetrics text format to replace opetelemetry-prometheus
https://github.com/max-te/ottotom
openmetrics opentelemetry prometheus rust
Last synced: 5 months ago
JSON representation
Conversion of opentelemetry-rust metrics into openmetrics text format to replace opetelemetry-prometheus
- Host: GitHub
- URL: https://github.com/max-te/ottotom
- Owner: max-te
- License: apache-2.0
- Created: 2026-01-13T19:43:28.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-01-13T20:40:44.000Z (5 months ago)
- Last Synced: 2026-01-13T22:21:53.620Z (5 months ago)
- Topics: openmetrics, opentelemetry, prometheus, rust
- Language: Rust
- Homepage:
- Size: 84 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Ottotom (OpenTelemetry to text OpenMetrics)
A Rust crate for exporting OpenTelemetry metrics in the [OpenMetrics](https://github.com/prometheus/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](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.45.0/specification/compatibility/prometheus_and_openmetrics.md). 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
```rust,no_run
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);
};
```