aboutsummaryrefslogtreecommitdiff
path: root/src/admin/tracing_setup.rs
blob: 83fa5622e36ebbc6f93e7ebdfa202320b61c2880 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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(())
}