diff --git a/Cargo.lock b/Cargo.lock index 4c72bb910b..4282a8e27d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2873,9 +2873,9 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570074cc999d1a58184080966e5bd3bf3a9a4af650c3b05047c2621e7405cd17" +checksum = "0f3cebff57f7dbd1255b44d8bddc2cebeb0ea677dbaa2e25a3070a91b318f660" dependencies = [ "futures-core", "futures-sink", @@ -2898,9 +2898,9 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c627d9f4c9cdc1f21a29ee4bfbd6028fcb8bcf2a857b43f3abdf72c9c862f3" +checksum = "27b742c1cae4693792cc564e58d75a2a0ba29421a34a85b50da92efa89ecb2bc" dependencies = [ "async-trait", "futures-channel", diff --git a/linkerd/opentelemetry/Cargo.toml b/linkerd/opentelemetry/Cargo.toml index c8becc0ec6..ebdcce3161 100644 --- a/linkerd/opentelemetry/Cargo.toml +++ b/linkerd/opentelemetry/Cargo.toml @@ -13,8 +13,8 @@ http-body = "0.4" linkerd-error = { path = "../error" } linkerd-metrics = { path = "../metrics" } linkerd-trace-context = { path = "../trace-context" } -opentelemetry = { version = "0.26", default-features = false, features = ["trace"] } -opentelemetry_sdk = { version = "0.26", default-features = false, features = ["trace"] } +opentelemetry = { version = "0.27", default-features = false, features = ["trace"] } +opentelemetry_sdk = { version = "0.27", default-features = false, features = ["trace"] } opentelemetry-proto = { path = "../../opentelemetry-proto" } tonic = { version = "0.10", default-features = false, features = [ "prost", diff --git a/linkerd/opentelemetry/src/lib.rs b/linkerd/opentelemetry/src/lib.rs index 10bcc6ad42..8f6fe2934e 100644 --- a/linkerd/opentelemetry/src/lib.rs +++ b/linkerd/opentelemetry/src/lib.rs @@ -257,6 +257,6 @@ fn convert_span(span: ExportSpan) -> Result { TraceState::NONE, ), events: Default::default(), - instrumentation_lib: Default::default(), + instrumentation_scope: Default::default(), }) } diff --git a/opentelemetry-proto/Cargo.toml b/opentelemetry-proto/Cargo.toml index 024935a9e7..94009ad322 100644 --- a/opentelemetry-proto/Cargo.toml +++ b/opentelemetry-proto/Cargo.toml @@ -14,11 +14,11 @@ Vendored from https://github.com/open-telemetry/opentelemetry-rust/. [dependencies] tonic = { version = "0.10", features = ["codegen", "prost", "transport"] } prost = "0.12" -opentelemetry = { version = "0.26", default-features = false, features = ["trace"] } -opentelemetry_sdk = { version = "0.26", default-features = false, features = ["trace"] } +opentelemetry = { version = "0.27", default-features = false, features = ["trace"] } +opentelemetry_sdk = { version = "0.27", default-features = false, features = ["trace"] } [dev-dependencies] -opentelemetry = { version = "0.26", default-features = false, features = ["trace", "testing"] } +opentelemetry = { version = "0.27", default-features = false, features = ["trace", "testing"] } tonic-build = { version = "0.10", default-features = false, features = ["prost"] } [lib] diff --git a/opentelemetry-proto/src/transform/common.rs b/opentelemetry-proto/src/transform/common.rs index d5e3230d37..b6f1be7573 100644 --- a/opentelemetry-proto/src/transform/common.rs +++ b/opentelemetry-proto/src/transform/common.rs @@ -27,17 +27,17 @@ impl From<&opentelemetry_sdk::Resource> for ResourceAttributesWithSchema { impl From<( - opentelemetry_sdk::InstrumentationLibrary, + opentelemetry::InstrumentationScope, Option>, )> for InstrumentationScope { fn from( data: ( - opentelemetry_sdk::InstrumentationLibrary, + opentelemetry::InstrumentationScope, Option>, ), ) -> Self { - let (library, target) = data; + let (scope, target) = data; if let Some(t) = target { InstrumentationScope { name: t.to_string(), @@ -46,10 +46,12 @@ impl ..Default::default() } } else { + let Attributes(attributes) = + Attributes::from(scope.attributes().cloned().collect::>()); InstrumentationScope { - name: library.name.into_owned(), - version: library.version.map(Cow::into_owned).unwrap_or_default(), - attributes: Attributes::from(library.attributes).0, + name: scope.name().to_string(), + version: scope.version().map(ToString::to_string).unwrap_or_default(), + attributes, ..Default::default() } } @@ -58,17 +60,17 @@ impl impl From<( - &opentelemetry_sdk::InstrumentationLibrary, + &opentelemetry::InstrumentationScope, Option>, )> for InstrumentationScope { fn from( data: ( - &opentelemetry_sdk::InstrumentationLibrary, + &opentelemetry::InstrumentationScope, Option>, ), ) -> Self { - let (library, target) = data; + let (scope, target) = data; if let Some(t) = target { InstrumentationScope { name: t.to_string(), @@ -77,14 +79,12 @@ impl ..Default::default() } } else { + let Attributes(attributes) = + Attributes::from(scope.attributes().cloned().collect::>()); InstrumentationScope { - name: library.name.to_string(), - version: library - .version - .as_ref() - .map(ToString::to_string) - .unwrap_or_default(), - attributes: Attributes::from(library.attributes.clone()).0, + name: scope.name().to_string(), + version: scope.version().map(ToString::to_string).unwrap_or_default(), + attributes, ..Default::default() } } @@ -121,7 +121,9 @@ impl From for AnyValue { Array::I64(vals) => array_into_proto(vals), Array::F64(vals) => array_into_proto(vals), Array::String(vals) => array_into_proto(vals), + _ => ArrayValue::default(), })), + _ => None, }, } } diff --git a/opentelemetry-proto/src/transform/trace.rs b/opentelemetry-proto/src/transform/trace.rs index 249c8a8f63..33fc7efae2 100644 --- a/opentelemetry-proto/src/transform/trace.rs +++ b/opentelemetry-proto/src/transform/trace.rs @@ -96,12 +96,11 @@ impl ResourceSpans { schema_url: resource.schema_url.clone().unwrap_or_default(), scope_spans: vec![ScopeSpans { schema_url: source_span - .instrumentation_lib - .schema_url - .as_ref() + .instrumentation_scope + .schema_url() .map(ToString::to_string) .unwrap_or_default(), - scope: Some((source_span.instrumentation_lib, None).into()), + scope: Some((source_span.instrumentation_scope, None).into()), spans: vec![Span { trace_id: source_span.span_context.trace_id().to_bytes().to_vec(), span_id: source_span.span_context.span_id().to_bytes().to_vec(), @@ -153,9 +152,8 @@ pub fn group_spans_by_resource_and_scope( // Group spans by their instrumentation library let scope_map = spans.iter().fold( HashMap::new(), - |mut scope_map: HashMap<&opentelemetry_sdk::InstrumentationLibrary, Vec<&SpanData>>, - span| { - let instrumentation = &span.instrumentation_lib; + |mut scope_map: HashMap<&opentelemetry::InstrumentationScope, Vec<&SpanData>>, span| { + let instrumentation = &span.instrumentation_scope; scope_map.entry(instrumentation).or_default().push(span); scope_map }, @@ -192,11 +190,10 @@ mod tests { use opentelemetry::trace::{ SpanContext, SpanId, SpanKind, Status, TraceFlags, TraceId, TraceState, }; - use opentelemetry::KeyValue; + use opentelemetry::{InstrumentationScope, KeyValue}; use opentelemetry_sdk::export::trace::SpanData; use opentelemetry_sdk::resource::Resource; use opentelemetry_sdk::trace::{SpanEvents, SpanLinks}; - use opentelemetry_sdk::InstrumentationLibrary; use std::borrow::Cow; use std::time::{Duration, SystemTime}; @@ -221,7 +218,7 @@ mod tests { events: SpanEvents::default(), links: SpanLinks::default(), status: Status::Unset, - instrumentation_lib: InstrumentationLibrary::builder(instrumentation_name).build(), + instrumentation_scope: InstrumentationScope::builder(instrumentation_name).build(), } }