forked from Deuxfleurs/garage
38 lines
958 B
Rust
38 lines
958 B
Rust
|
use std::time::Duration;
|
||
|
|
||
|
use opentelemetry::sdk::{
|
||
|
trace::{self, IdGenerator, Sampler},
|
||
|
Resource,
|
||
|
};
|
||
|
use opentelemetry::KeyValue;
|
||
|
use opentelemetry_otlp::WithExportConfig;
|
||
|
|
||
|
use garage_util::data::*;
|
||
|
use garage_util::error::*;
|
||
|
|
||
|
pub fn init_tracing(export_to: &str, node_id: Uuid) -> Result<(), Error> {
|
||
|
let node_id = hex::encode(&node_id.as_slice()[..8]);
|
||
|
|
||
|
opentelemetry_otlp::new_pipeline()
|
||
|
.tracing()
|
||
|
.with_exporter(
|
||
|
opentelemetry_otlp::new_exporter()
|
||
|
.tonic()
|
||
|
.with_endpoint(export_to)
|
||
|
.with_timeout(Duration::from_secs(3)),
|
||
|
)
|
||
|
.with_trace_config(
|
||
|
trace::config()
|
||
|
.with_id_generator(IdGenerator::default())
|
||
|
.with_sampler(Sampler::TraceIdRatioBased(0.01f64))
|
||
|
.with_resource(Resource::new(vec![
|
||
|
KeyValue::new("service.name", "garage"),
|
||
|
KeyValue::new("service.instance.id", node_id),
|
||
|
])),
|
||
|
)
|
||
|
.install_batch(opentelemetry::runtime::Tokio)
|
||
|
.ok_or_message("Unable to initialize tracing")?;
|
||
|
|
||
|
Ok(())
|
||
|
}
|