| Crates.io | opentelemetry-prometheus-text-exporter |
| lib.rs | opentelemetry-prometheus-text-exporter |
| version | 0.2.0 |
| created_at | 2025-08-16 22:45:28.614397+00 |
| updated_at | 2025-08-16 23:05:11.255948+00 |
| description | OpenTelemetry metrics exporter for Prometheus text exposition format |
| homepage | https://github.com/sandhose/opentelemetry-prometheus-text-exporter |
| repository | https://github.com/sandhose/opentelemetry-prometheus-text-exporter |
| max_upload_size | |
| id | 1798959 |
| size | 146,749 |
A high-performance OpenTelemetry metrics exporter that converts metrics to Prometheus text exposition format.
Add this to your Cargo.toml:
[dependencies]
opentelemetry-prometheus-text-exporter = "0.1.0"
opentelemetry = "0.30"
opentelemetry_sdk = "0.30"
use opentelemetry::{KeyValue, metrics::MeterProvider};
use opentelemetry_sdk::metrics::SdkMeterProvider;
use opentelemetry_prometheus_text_exporter::PrometheusExporter;
// Create exporter with default configuration
let exporter = PrometheusExporter::new();
// Set up metrics provider
let provider = SdkMeterProvider::builder()
.with_resource(
opentelemetry_sdk::Resource::builder_empty()
.with_attribute(KeyValue::new("service.name", "my-service"))
.with_attribute(KeyValue::new("service.version", "1.0.0"))
.build()
)
.with_reader(exporter.clone())
.build();
// Create and use meters
let meter = provider.meter("my-meter");
let counter = meter.u64_counter("requests_total").build();
counter.add(1, &[KeyValue::new("method", "GET")]);
// Export metrics to Prometheus format
let mut output = Vec::new();
exporter.export(&mut output).unwrap();
println!("{}", String::from_utf8(output).unwrap());
The exporter supports extensive configuration through the builder pattern:
use opentelemetry_prometheus_text_exporter::PrometheusExporter;
let exporter = PrometheusExporter::builder()
.without_units() // Disable unit suffixes in metric names
.without_counter_suffixes() // Disable _total suffixes on counters
.without_target_info() // Disable target_info metric from resources
.without_scope_info() // Disable otel_scope_info metrics
.build();
| Option | Description | Default |
|---|---|---|
without_units() |
Disables automatic unit suffixes (e.g., _seconds, _bytes) |
Units enabled |
without_counter_suffixes() |
Disables _total suffix on counter metrics |
Suffixes enabled |
without_target_info() |
Disables target_info metric generation from resource attributes |
target_info enabled |
without_scope_info() |
Disables otel_scope_info metric with instrumentation scope labels |
scope_info enabled |
The exporter generates standard Prometheus text exposition format:
# HELP target_info Target metadata
# TYPE target_info gauge
target_info{service_name="my-service",service_version="1.0.0"} 1
# HELP requests_total Total number of requests
# TYPE requests_total counter
requests_total{method="GET"} 1
This implementation is optimized for high-throughput scenarios:
Run benchmarks to measure performance on your system:
# Quick benchmark
cargo bench --bench serialize -- --quick
# Full benchmark suite
cargo bench --bench serialize
# Compare against opentelemetry-prometheus
cargo bench --bench comparison
This crate was created to provide:
Contributions are welcome! Please feel free to submit issues and pull requests.
Licensed under the Apache License, Version 2.0. See LICENSE for details.