otel adaptation for sphinx instrumentation

This commit is contained in:
Floriane TUERNAL SABOTINOV
2025-10-02 15:54:46 +02:00
parent 44a7df511a
commit afb2467afc
5 changed files with 58 additions and 3 deletions
Generated
+1
View File
@@ -4964,6 +4964,7 @@ dependencies = [
"opentelemetry-semantic-conventions",
"opentelemetry-stdout",
"opentelemetry_sdk",
"rand 0.8.5",
"schemars 0.8.22",
"serde",
"serde_json",
+3 -1
View File
@@ -20,6 +20,7 @@ opentelemetry-otlp = { workspace = true,features=["metrics", "grpc-tonic", "tls"
opentelemetry-semantic-conventions = { workspace = true, features = ["semconv_experimental"], optional = true }
opentelemetry-stdout = { workspace = true, features = ["trace", "metrics"], optional = true }
opentelemetry_sdk = { workspace = true, optional = true }
rand = { workspace = true, optional = true }
schemars = { workspace = true, features = ["preserve_order"], optional = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true, optional = true }
@@ -53,12 +54,13 @@ tracing = [
"tracing-tree",
]
otel = [
"tracing",
"opentelemetry",
"opentelemetry-otlp",
"opentelemetry-semantic-conventions",
"opentelemetry-stdout",
"opentelemetry_sdk",
"rand",
"tracing",
]
clap = ["dep:clap", "dep:clap_complete", "dep:clap_complete_fig"]
models = []
@@ -0,0 +1,46 @@
use opentelemetry_sdk::trace::IdGenerator;
use opentelemetry::trace::{TraceId, SpanId};
use rand::RngCore;
#[derive(Clone, Debug)]
pub struct Compact13BytesIdGenerator;
impl IdGenerator for Compact13BytesIdGenerator {
fn new_trace_id(&self) -> TraceId {
let mut rng = rand::thread_rng();
let mut bytes = [0u8; 16];
// Fill the first 13 bytes with random data
rng.fill_bytes(&mut bytes[0..13]);
// Set the last 3 bytes to zero
bytes[13] = 0;
bytes[14] = 0;
bytes[15] = 0;
TraceId::from_bytes(bytes)
}
fn new_span_id(&self) -> SpanId {
let mut rng = rand::thread_rng();
let mut bytes = [0u8; 8];
rng.fill_bytes(&mut bytes);
SpanId::from_bytes(bytes)
}
}
pub fn compress_trace_id(trace_id: &TraceId) -> [u8; 13] {
let bytes = trace_id.to_bytes();
let mut compressed = [0u8; 13];
compressed.copy_from_slice(&bytes[0..13]);
compressed
}
pub fn decompress_trace_id(compressed: &[u8; 13]) -> TraceId {
let mut bytes = [0u8; 16];
bytes[0..13].copy_from_slice(compressed);
TraceId::from_bytes(bytes)
}
@@ -56,6 +56,10 @@ impl ContextCarrier {
})
}
pub fn extract_trace_id_into_bytes(&self) -> Option<[u8; 16]> {
self.extract_trace_id().map(|id| id.to_bytes())
}
pub fn extract_traceparent(&self) -> Option<String> {
self.get("traceparent").map(|s| s.to_string())
}
+4 -2
View File
@@ -1,5 +1,6 @@
pub mod context;
pub mod error;
mod compact_id_generator;
mod trace_id_format;
use tracing::{info, Level};
@@ -10,13 +11,14 @@ use tracing_subscriber::fmt;
use crate::logging::{default_tracing_env_filter, default_tracing_fmt_layer};
use crate::opentelemetry::error::TracingError;
use crate::opentelemetry::compact_id_generator::Compact13BytesIdGenerator;
use opentelemetry::trace::TracerProvider;
use opentelemetry::{global, KeyValue};
use opentelemetry_otlp::tonic_types::metadata::MetadataMap;
use opentelemetry_otlp::tonic_types::transport::ClientTlsConfig;
use opentelemetry_otlp::{WithExportConfig, WithTonicConfig};
use opentelemetry_sdk::metrics::{MeterProviderBuilder, PeriodicReader, SdkMeterProvider};
use opentelemetry_sdk::trace::{RandomIdGenerator, SdkTracerProvider};
use opentelemetry_sdk::trace::SdkTracerProvider;
use opentelemetry_sdk::{trace::Sampler, Resource};
use opentelemetry_semantic_conventions::resource::{DEPLOYMENT_ENVIRONMENT_NAME, SERVICE_VERSION};
use opentelemetry_semantic_conventions::SCHEMA_URL;
@@ -145,7 +147,7 @@ fn init_tracer_provider(metadata: MetadataMap, service_name: String) -> Result<S
.with_sampler(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
1.0,
))))
.with_id_generator(RandomIdGenerator::default())
.with_id_generator(Compact13BytesIdGenerator)
.with_resource(resource(service_name))
.with_batch_exporter(exporter)
.build();