diff --git a/Cargo.lock b/Cargo.lock index de657f1731..c8330cf499 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2094,6 +2094,7 @@ dependencies = [ "dashmap", "hashbrown", "observability_deps", + "opentelemetry", "opentelemetry-prometheus", "parking_lot", "prometheus", @@ -2464,7 +2465,6 @@ dependencies = [ name = "observability_deps" version = "0.1.0" dependencies = [ - "opentelemetry", "tracing", ] @@ -4719,6 +4719,7 @@ dependencies = [ "http-body", "itertools 0.10.1", "observability_deps", + "opentelemetry", "parking_lot", "pin-project 1.0.8", "rand 0.8.4", @@ -4855,6 +4856,7 @@ version = "0.1.0" dependencies = [ "logfmt", "observability_deps", + "opentelemetry", "opentelemetry-jaeger", "opentelemetry-otlp", "regex", diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 82f894787e..307de9a204 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -17,6 +17,7 @@ edition = "2018" dashmap = { version = "4.0.1" } hashbrown = "0.11" observability_deps = { path = "../observability_deps" } +opentelemetry = "0.15" opentelemetry-prometheus = "0.8" parking_lot = "0.11.1" prometheus = "0.12" diff --git a/metrics/src/gauge.rs b/metrics/src/gauge.rs index db8454905a..920a311e9b 100644 --- a/metrics/src/gauge.rs +++ b/metrics/src/gauge.rs @@ -6,7 +6,7 @@ use hashbrown::HashMap; use crate::KeyValue; use hashbrown::hash_map::RawEntryMut; -use observability_deps::opentelemetry::labels::{DefaultLabelEncoder, LabelSet}; +use opentelemetry::labels::{DefaultLabelEncoder, LabelSet}; /// A `Gauge` allows tracking multiple usize values by label set /// diff --git a/metrics/src/lib.rs b/metrics/src/lib.rs index 74da5c912c..97d6380641 100644 --- a/metrics/src/lib.rs +++ b/metrics/src/lib.rs @@ -14,18 +14,16 @@ use opentelemetry_prometheus::PrometheusExporter; use parking_lot::Mutex; use prometheus::{Encoder, Registry, TextEncoder}; -use observability_deps::{ - opentelemetry::metrics::Meter as OTMeter, - opentelemetry::{ - metrics::{ - registry::RegistryMeterProvider, MeterProvider, ObserverResult, ValueRecorderBuilder, - }, - sdk::{ - export::metrics::ExportKindSelector, - metrics::{controllers, selectors::simple::Selector}, - }, +use observability_deps::tracing::*; +use opentelemetry::{ + metrics::{ + registry::RegistryMeterProvider, Meter as OTMeter, MeterProvider, ObserverResult, + ValueRecorderBuilder, + }, + sdk::{ + export::metrics::ExportKindSelector, + metrics::{controllers, selectors::simple::Selector}, }, - tracing::*, }; pub use crate::gauge::*; @@ -537,7 +535,7 @@ pub struct TaggedObserverResult<'a, T> { impl<'a, T> TaggedObserverResult<'a, T> where - T: Into, + T: Into, { fn with_callback( labels: Vec, diff --git a/metrics/src/metrics.rs b/metrics/src/metrics.rs index e83ab00656..63ced04928 100644 --- a/metrics/src/metrics.rs +++ b/metrics/src/metrics.rs @@ -4,11 +4,9 @@ use std::{ time::{Duration, Instant}, }; -use observability_deps::opentelemetry::metrics::{ - Counter as OTCounter, ValueRecorder as OTHistogram, -}; +use opentelemetry::metrics::{Counter as OTCounter, ValueRecorder as OTHistogram}; -pub use observability_deps::opentelemetry::KeyValue; +pub use opentelemetry::KeyValue; const RED_REQUEST_STATUS_LABEL: &str = "status"; diff --git a/metrics/src/observer.rs b/metrics/src/observer.rs index f4e83a8e96..454ef8803d 100644 --- a/metrics/src/observer.rs +++ b/metrics/src/observer.rs @@ -9,7 +9,7 @@ use std::sync::Arc; use parking_lot::Mutex; -use observability_deps::opentelemetry::metrics::{Meter, ObserverResult}; +use opentelemetry::metrics::{Meter, ObserverResult}; type CallbackFunc = Box) + Send + Sync + 'static>; diff --git a/observability_deps/Cargo.toml b/observability_deps/Cargo.toml index 24df60babb..4b66765661 100644 --- a/observability_deps/Cargo.toml +++ b/observability_deps/Cargo.toml @@ -6,5 +6,4 @@ edition = "2018" description = "Observability ecosystem dependencies for InfluxDB IOx, to ensure consistent versions and unified updates" [dependencies] # In alphabetical order -opentelemetry = { version = "0.15", default-features = false, features = ["trace", "metrics", "rt-tokio"] } tracing = { version = "0.1", features = ["max_level_trace", "release_max_level_debug"] } diff --git a/observability_deps/src/lib.rs b/observability_deps/src/lib.rs index 334bca97a7..1d1079ed08 100644 --- a/observability_deps/src/lib.rs +++ b/observability_deps/src/lib.rs @@ -1,8 +1,3 @@ -//! This crate exists to coordinate versions of `opentelemetry`, `tracing`, -//! `prometheus` and related crates so that we can manage their updates in a -//! single crate. - // Export these crates publicly so we can have a single reference -pub use opentelemetry; pub use tracing; pub use tracing::instrument; diff --git a/src/influxdb_ioxd/http.rs b/src/influxdb_ioxd/http.rs index 322b1824ab..8957fd52e8 100644 --- a/src/influxdb_ioxd/http.rs +++ b/src/influxdb_ioxd/http.rs @@ -33,10 +33,8 @@ use chrono::Utc; use futures::{self, StreamExt}; use http::header::{CONTENT_ENCODING, CONTENT_TYPE}; use hyper::{http::HeaderValue, Body, Method, Request, Response, StatusCode}; -use observability_deps::{ - opentelemetry::KeyValue, - tracing::{self, debug, error}, -}; +use metrics::KeyValue; +use observability_deps::tracing::{self, debug, error}; use routerify::{prelude::*, Middleware, RequestInfo, Router, RouterError, RouterService}; use serde::Deserialize; use snafu::{OptionExt, ResultExt, Snafu}; diff --git a/trace/Cargo.toml b/trace/Cargo.toml index 6fd4ab092a..5423f875b5 100644 --- a/trace/Cargo.toml +++ b/trace/Cargo.toml @@ -13,6 +13,7 @@ futures = "0.3" http = "0.2" http-body = "0.4" itertools = "0.10" +opentelemetry = "0.15" observability_deps = { path = "../observability_deps" } parking_lot = "0.11" pin-project = "1.0" diff --git a/trace/src/otel.rs b/trace/src/otel.rs index 6ee3e9e727..2d08da83ca 100644 --- a/trace/src/otel.rs +++ b/trace/src/otel.rs @@ -11,10 +11,8 @@ use tokio::sync::mpsc; use tokio::task::JoinError; use tokio_util::sync::CancellationToken; -use observability_deps::{ - opentelemetry::sdk::export::trace::{ExportResult, SpanData, SpanExporter}, - tracing::{error, info, warn}, -}; +use observability_deps::tracing::{error, info, warn}; +use opentelemetry::sdk::export::trace::{ExportResult, SpanData, SpanExporter}; use crate::ctx::{SpanContext, SpanId, TraceId}; use crate::span::{MetaValue, SpanEvent, SpanStatus}; @@ -148,10 +146,10 @@ async fn exporter_loop( impl From for SpanData { fn from(span: Span) -> Self { - use observability_deps::opentelemetry::sdk::trace::{EvictedHashMap, EvictedQueue}; - use observability_deps::opentelemetry::sdk::InstrumentationLibrary; - use observability_deps::opentelemetry::trace::{SpanId, SpanKind}; - use observability_deps::opentelemetry::{Key, KeyValue}; + use opentelemetry::sdk::trace::{EvictedHashMap, EvictedQueue}; + use opentelemetry::sdk::InstrumentationLibrary; + use opentelemetry::trace::{SpanId, SpanKind}; + use opentelemetry::{Key, KeyValue}; let parent_span_id = match span.ctx.parent_span_id { Some(id) => id.into(), @@ -187,7 +185,7 @@ impl From for SpanData { } } -impl<'a> From<&'a SpanContext> for observability_deps::opentelemetry::trace::SpanContext { +impl<'a> From<&'a SpanContext> for opentelemetry::trace::SpanContext { fn from(ctx: &'a SpanContext) -> Self { Self::new( ctx.trace_id.into(), @@ -199,7 +197,7 @@ impl<'a> From<&'a SpanContext> for observability_deps::opentelemetry::trace::Spa } } -impl From for observability_deps::opentelemetry::trace::Event { +impl From for opentelemetry::trace::Event { fn from(event: SpanEvent) -> Self { Self { name: event.msg, @@ -210,7 +208,7 @@ impl From for observability_deps::opentelemetry::trace::Event { } } -impl From for observability_deps::opentelemetry::trace::StatusCode { +impl From for opentelemetry::trace::StatusCode { fn from(status: SpanStatus) -> Self { match status { SpanStatus::Unknown => Self::Unset, @@ -220,19 +218,19 @@ impl From for observability_deps::opentelemetry::trace::StatusCode { } } -impl From for observability_deps::opentelemetry::trace::SpanId { +impl From for opentelemetry::trace::SpanId { fn from(id: SpanId) -> Self { Self::from_u64(id.0.get()) } } -impl From for observability_deps::opentelemetry::trace::TraceId { +impl From for opentelemetry::trace::TraceId { fn from(id: TraceId) -> Self { Self::from_u128(id.0.get()) } } -impl From for observability_deps::opentelemetry::Value { +impl From for opentelemetry::Value { fn from(v: MetaValue) -> Self { match v { MetaValue::String(v) => Self::String(v), @@ -246,7 +244,7 @@ impl From for observability_deps::opentelemetry::Value { mod tests { use super::*; use chrono::{TimeZone, Utc}; - use observability_deps::opentelemetry::{Key, Value}; + use opentelemetry::{Key, Value}; use std::time::{Duration, UNIX_EPOCH}; #[test] diff --git a/trogging/Cargo.toml b/trogging/Cargo.toml index 58fb604377..217c8e90f7 100644 --- a/trogging/Cargo.toml +++ b/trogging/Cargo.toml @@ -10,6 +10,7 @@ description = "(TR)acing and l(OGGING) configuration" [dependencies] logfmt = { path = "../logfmt" } observability_deps = { path = "../observability_deps" } +opentelemetry = "0.15" opentelemetry-jaeger = { version = "0.14", features = ["tokio"], optional = true } opentelemetry-otlp = { version = "0.8", optional = true } thiserror = "1.0.23" @@ -23,5 +24,5 @@ synchronized-writer = "1" regex = "1" [features] -jaeger = ["opentelemetry-jaeger"] -otlp = ["opentelemetry-otlp"] +jaeger = ["opentelemetry-jaeger", "opentelemetry/rt-tokio"] +otlp = ["opentelemetry-otlp", "opentelemetry/rt-tokio"] diff --git a/trogging/src/lib.rs b/trogging/src/lib.rs index a473ed5a77..4858d0da64 100644 --- a/trogging/src/lib.rs +++ b/trogging/src/lib.rs @@ -21,12 +21,11 @@ pub use config::*; // Re-export tracing_subscriber pub use tracing_subscriber; -use observability_deps::{ - opentelemetry, - opentelemetry::sdk::trace, - opentelemetry::sdk::Resource, - opentelemetry::KeyValue, - tracing::{self, Subscriber}, +use observability_deps::tracing::{self, Subscriber}; +use opentelemetry::{ + self, + sdk::{trace, Resource}, + KeyValue, }; use std::cmp::min; use std::io;