diff --git a/Cargo.lock b/Cargo.lock index 05a71c85..44161f62 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2282,18 +2282,6 @@ dependencies = [ "tokio-rustls", ] -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - [[package]] name = "iana-time-zone" version = "0.1.60" @@ -2666,12 +2654,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - [[package]] name = "io-lifetimes" version = "1.0.11" @@ -3026,12 +3008,11 @@ dependencies = [ "oauth2-types", "opentelemetry", "opentelemetry-http", - "opentelemetry-jaeger", + "opentelemetry-jaeger-propagator", "opentelemetry-otlp", "opentelemetry-prometheus", "opentelemetry-semantic-conventions", "opentelemetry-stdout", - "opentelemetry-zipkin", "opentelemetry_sdk", "prometheus", "rand 0.8.5", @@ -3933,13 +3914,12 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "opentelemetry" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" +checksum = "900d57987be3f2aeb70d385fff9b27fb74c5723cc9a52d904d4f9c807a0667bf" dependencies = [ "futures-core", "futures-sink", - "indexmap 2.2.2", "js-sys", "once_cell", "pin-project-lite", @@ -3949,9 +3929,9 @@ dependencies = [ [[package]] name = "opentelemetry-http" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f51189ce8be654f9b5f7e70e49967ed894e84a06fc35c6c042e64ac1fc5399e" +checksum = "7cbfa5308166ca861434f0b0913569579b8e587430a3d6bcd7fd671921ec145a" dependencies = [ "async-trait", "bytes", @@ -3962,47 +3942,37 @@ dependencies = [ ] [[package]] -name = "opentelemetry-jaeger" -version = "0.20.0" +name = "opentelemetry-jaeger-propagator" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e617c66fd588e40e0dbbd66932fdc87393095b125d4459b1a3a10feb1712f8a1" +checksum = "beb4ec62efc537b60aaa89b92624f986f2523d3a609079f3511cc8ee73490826" dependencies = [ - "async-trait", - "futures-core", - "futures-util", - "http 0.2.11", "opentelemetry", - "opentelemetry-http", - "opentelemetry-semantic-conventions", - "opentelemetry_sdk", - "thrift", - "tokio", ] [[package]] name = "opentelemetry-otlp" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f24cda83b20ed2433c68241f918d0f6fdec8b1d43b7a9590ab4420c5095ca930" +checksum = "1a016b8d9495c639af2145ac22387dcb88e44118e45320d9238fbf4e7889abcb" dependencies = [ "async-trait", "futures-core", "http 0.2.11", "opentelemetry", + "opentelemetry-http", "opentelemetry-proto", "opentelemetry-semantic-conventions", "opentelemetry_sdk", "prost", "thiserror", - "tokio", - "tonic", ] [[package]] name = "opentelemetry-prometheus" -version = "0.14.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8f082da115b0dcb250829e3ed0b8792b8f963a1ad42466e48422fbe6a079bd" +checksum = "30bbcf6341cab7e2193e5843f0ac36c446a5b3fccb28747afaeda17996dcd02e" dependencies = [ "once_cell", "opentelemetry", @@ -4013,9 +3983,9 @@ dependencies = [ [[package]] name = "opentelemetry-proto" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e155ce5cc812ea3d1dffbd1539aed653de4bf4882d60e6e04dcf0901d674e1" +checksum = "3a8fddc9b68f5b80dae9d6f510b88e02396f006ad48cac349411fbecc80caae4" dependencies = [ "opentelemetry", "opentelemetry_sdk", @@ -4025,54 +3995,31 @@ dependencies = [ [[package]] name = "opentelemetry-semantic-conventions" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5774f1ef1f982ef2a447f6ee04ec383981a3ab99c8e77a1a7b30182e65bbc84" -dependencies = [ - "opentelemetry", -] +checksum = "f9ab5bd6c42fb9349dcf28af2ba9a0667f697f9bdcca045d39f2cec5543e2910" [[package]] name = "opentelemetry-stdout" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13b2df4cd59c176099ac82806725ba340c8fa7b1a7004c0912daad30470f63e" +checksum = "4bdf28b381f23afcd150afc0b38a4183dd321fc96320c1554752b6b761648f78" dependencies = [ "async-trait", "chrono", "futures-util", "opentelemetry", "opentelemetry_sdk", - "ordered-float 4.2.0", + "ordered-float", "serde", "serde_json", ] -[[package]] -name = "opentelemetry-zipkin" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2bee3ec1be4d0088378e0eb1dd54c113cbd7ec5622cc4f26181debf1d4d7b5" -dependencies = [ - "async-trait", - "futures-core", - "http 0.2.11", - "once_cell", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-semantic-conventions", - "opentelemetry_sdk", - "serde", - "serde_json", - "thiserror", - "typed-builder", -] - [[package]] name = "opentelemetry_sdk" -version = "0.21.2" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f16aec8a98a457a52664d69e0091bac3a0abd18ead9b641cb00202ba4e0efe4" +checksum = "9e90c7113be649e31e9a0f8b5ee24ed7a16923b322c3c5ab6367469c049d6b7e" dependencies = [ "async-trait", "crossbeam-channel", @@ -4082,7 +4029,7 @@ dependencies = [ "glob", "once_cell", "opentelemetry", - "ordered-float 4.2.0", + "ordered-float", "percent-encoding", "rand 0.8.5", "thiserror", @@ -4090,15 +4037,6 @@ dependencies = [ "tokio-stream", ] -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "4.2.0" @@ -4589,9 +4527,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.9" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" dependencies = [ "bytes", "prost-derive", @@ -4599,15 +4537,15 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.9" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" dependencies = [ "anyhow", "itertools 0.10.5", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] @@ -6026,28 +5964,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float 2.10.1", - "threadpool", -] - [[package]] name = "time" version = "0.3.34" @@ -6123,16 +6039,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-macros" version = "2.2.0" @@ -6221,27 +6127,20 @@ dependencies = [ [[package]] name = "tonic" -version = "0.9.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" dependencies = [ "async-trait", - "axum", "base64 0.21.7", "bytes", - "futures-core", - "futures-util", - "h2", "http 0.2.11", "http-body", - "hyper", - "hyper-timeout", "percent-encoding", "pin-project", "prost", "tokio", "tokio-stream", - "tower", "tower-layer", "tower-service", "tracing", @@ -6255,11 +6154,8 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand 0.8.5", - "slab", "tokio", "tokio-util", "tower-layer", @@ -6376,9 +6272,9 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596" +checksum = "a9be14ba1bbe4ab79e9229f7f89fab8d120b865859f10527f31c033e599d2284" dependencies = [ "js-sys", "once_cell", @@ -6387,7 +6283,7 @@ dependencies = [ "tracing", "tracing-core", "tracing-subscriber", - "web-time 0.2.4", + "web-time", ] [[package]] @@ -6414,17 +6310,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "typed-builder" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6179333b981641242a768f30f371c9baccbfcc03749627000c500ab88bf4528b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "typenum" version = "1.17.0" @@ -6447,7 +6332,7 @@ dependencies = [ "rand 0.8.5", "serde", "uuid", - "web-time 1.0.0", + "web-time", ] [[package]] @@ -7006,16 +6891,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-time" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "web-time" version = "1.0.0" diff --git a/Cargo.toml b/Cargo.toml index eb77e56a..f2e128ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,10 @@ mas-templates = { path = "./crates/templates/", version = "=0.8.0" } mas-tower = { path = "./crates/tower/", version = "=0.8.0" } oauth2-types = { path = "./crates/oauth2-types/", version = "=0.8.0" } +# Utility to write and implement async traits +[workspace.dependencies.async-trait] +version = "0.1.77" + # High-level error handling [workspace.dependencies.anyhow] version = "1.0.79" @@ -132,12 +136,15 @@ version = "0.3.18" # OpenTelemetry [workspace.dependencies.opentelemetry] -version = "0.21.0" -features = ["trace", "metrics"] -[workspace.dependencies.opentelemetry-semantic-conventions] -version = "0.13.0" -[workspace.dependencies.tracing-opentelemetry] version = "0.22.0" +features = ["trace", "metrics"] +[workspace.dependencies.opentelemetry-http] +version = "0.11.0" +features = ["hyper", "tokio"] +[workspace.dependencies.opentelemetry-semantic-conventions] +version = "0.14.0" +[workspace.dependencies.tracing-opentelemetry] +version = "0.23.0" default-features = false # URL manipulation diff --git a/crates/axum-utils/Cargo.toml b/crates/axum-utils/Cargo.toml index 90396712..f1822a19 100644 --- a/crates/axum-utils/Cargo.toml +++ b/crates/axum-utils/Cargo.toml @@ -12,7 +12,7 @@ publish = false workspace = true [dependencies] -async-trait = "0.1.77" +async-trait.workspace = true axum = { version = "0.6.20", features = ["headers"] } axum-extra = { version = "0.8.0", features = ["cookie-private", "cookie-key-expansion"] } chrono.workspace = true diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 84f1bb29..bf1e7267 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -39,14 +39,13 @@ tracing-appender = "0.2.3" tracing-subscriber = { workspace = true, features = ["env-filter"] } tracing-opentelemetry.workspace = true opentelemetry.workspace = true -opentelemetry-http = { version = "0.10.0", features = ["tokio", "hyper"] } -opentelemetry-jaeger = { version = "0.20.0", features = ["rt-tokio", "collector_client"] } -opentelemetry-otlp = { version = "0.14.0", features = ["trace", "metrics"] } -opentelemetry-prometheus = "0.14.1" +opentelemetry-http.workspace = true +opentelemetry-jaeger-propagator = "0.1.0" +opentelemetry-otlp = { version = "0.15.0", default-features = false, features = ["trace", "metrics", "http-proto"] } +opentelemetry-prometheus = "0.15.0" opentelemetry-semantic-conventions.workspace = true -opentelemetry-stdout = { version = "0.2.0", features = ["trace", "metrics"] } -opentelemetry_sdk = { version = "0.21.2", features = ["trace", "metrics", "rt-tokio"] } -opentelemetry-zipkin = { version = "0.19.0", default-features = false } +opentelemetry-stdout = { version = "0.3.0", features = ["trace", "metrics"] } +opentelemetry_sdk = { version = "0.22.1", features = ["trace", "metrics", "rt-tokio"] } prometheus = "0.13.3" sentry = { version = "0.31.8", default-features = false, features = ["backtrace", "contexts", "panic", "tower"] } sentry-tracing = "0.31.8" diff --git a/crates/cli/src/server.rs b/crates/cli/src/server.rs index 0880274d..3e43a73e 100644 --- a/crates/cli/src/server.rs +++ b/crates/cli/src/server.rs @@ -160,16 +160,22 @@ fn make_http_span(req: &Request) -> Span { fn on_http_request_labels(request: &Request) -> Vec { vec![ - NETWORK_PROTOCOL_NAME.string("http"), - NETWORK_PROTOCOL_VERSION.string(otel_net_protocol_version(request)), - HTTP_REQUEST_METHOD.string(otel_http_method(request)), - HTTP_ROUTE.string(otel_http_route(request).unwrap_or("FALLBACK").to_owned()), - URL_SCHEME.string(otel_url_scheme(request).as_ref()), + KeyValue::new(NETWORK_PROTOCOL_NAME, "http"), + KeyValue::new(NETWORK_PROTOCOL_VERSION, otel_net_protocol_version(request)), + KeyValue::new(HTTP_REQUEST_METHOD, otel_http_method(request)), + KeyValue::new( + HTTP_ROUTE, + otel_http_route(request).unwrap_or("FALLBACK").to_owned(), + ), + KeyValue::new(URL_SCHEME, otel_url_scheme(request)), ] } fn on_http_response_labels(res: &Response) -> Vec { - vec![HTTP_RESPONSE_STATUS_CODE.i64(res.status().as_u16().into())] + vec![KeyValue::new( + HTTP_RESPONSE_STATUS_CODE, + i64::from(res.status().as_u16()), + )] } pub fn build_router( diff --git a/crates/cli/src/telemetry.rs b/crates/cli/src/telemetry.rs index 731fcb3a..cf6cb664 100644 --- a/crates/cli/src/telemetry.rs +++ b/crates/cli/src/telemetry.rs @@ -16,31 +16,31 @@ use std::time::Duration; use anyhow::Context as _; use hyper::{header::CONTENT_TYPE, Body, Response}; -use mas_config::{ - JaegerExporterProtocolConfig, MetricsExporterConfig, Propagator, TelemetryConfig, - TracingExporterConfig, +use mas_config::{MetricsExporterConfig, Propagator, TelemetryConfig, TracingExporterConfig}; +use opentelemetry::{ + global, + propagation::{TextMapCompositePropagator, TextMapPropagator}, + trace::TracerProvider as _, + KeyValue, }; -use opentelemetry::{global, propagation::TextMapPropagator, trace::TracerProvider as _}; -use opentelemetry_jaeger::Propagator as JaegerPropagator; use opentelemetry_otlp::MetricsExporterBuilder; use opentelemetry_prometheus::PrometheusExporter; use opentelemetry_sdk::{ self, metrics::{ reader::{DefaultAggregationSelector, DefaultTemporalitySelector}, - ManualReader, MeterProvider, PeriodicReader, + ManualReader, PeriodicReader, SdkMeterProvider, }, - propagation::{BaggagePropagator, TextMapCompositePropagator, TraceContextPropagator}, + propagation::{BaggagePropagator, TraceContextPropagator}, trace::{Sampler, Tracer, TracerProvider}, Resource, }; use opentelemetry_semantic_conventions as semcov; -use opentelemetry_zipkin::{B3Encoding, Propagator as ZipkinPropagator}; use prometheus::Registry; use tokio::sync::OnceCell; use url::Url; -static METER_PROVIDER: OnceCell = OnceCell::const_new(); +static METER_PROVIDER: OnceCell = OnceCell::const_new(); static PROMETHEUS_REGISTRY: OnceCell = OnceCell::const_new(); pub fn setup(config: &TelemetryConfig) -> anyhow::Result> { @@ -72,9 +72,7 @@ fn match_propagator(propagator: Propagator) -> Box Box::new(TraceContextPropagator::new()), P::Baggage => Box::new(BaggagePropagator::new()), - P::Jaeger => Box::new(JaegerPropagator::new()), - P::B3 => Box::new(ZipkinPropagator::with_encoding(B3Encoding::SingleHeader)), - P::B3Multi => Box::new(ZipkinPropagator::with_encoding(B3Encoding::MultipleHeader)), + P::Jaeger => Box::new(opentelemetry_jaeger_propagator::Propagator::new()), } } @@ -99,7 +97,9 @@ fn stdout_tracer_provider() -> TracerProvider { fn otlp_tracer(endpoint: Option<&Url>) -> anyhow::Result { use opentelemetry_otlp::WithExportConfig; - let mut exporter = opentelemetry_otlp::new_exporter().tonic(); + let mut exporter = opentelemetry_otlp::new_exporter() + .http() + .with_http_client(http_client()); if let Some(endpoint) = endpoint { exporter = exporter.with_endpoint(endpoint.to_string()); } @@ -114,65 +114,6 @@ fn otlp_tracer(endpoint: Option<&Url>) -> anyhow::Result { Ok(tracer) } -fn jaeger_agent_tracer_provider(host: &str, port: u16) -> anyhow::Result { - let pipeline = opentelemetry_jaeger::new_agent_pipeline() - .with_service_name(env!("CARGO_PKG_NAME")) - .with_trace_config(trace_config()) - .with_endpoint(format!("{host}:{port}")); - - let tracer_provider = pipeline - .build_batch(opentelemetry_sdk::runtime::Tokio) - .context("Failed to configure Jaeger agent exporter")?; - - Ok(tracer_provider) -} - -fn jaeger_collector_tracer_provider( - endpoint: &str, - username: Option<&str>, - password: Option<&str>, -) -> anyhow::Result { - let http_client = http_client(); - let mut pipeline = opentelemetry_jaeger::new_collector_pipeline() - .with_service_name(env!("CARGO_PKG_NAME")) - .with_trace_config(trace_config()) - .with_http_client(http_client) - .with_endpoint(endpoint); - - if let Some(username) = username { - pipeline = pipeline.with_username(username); - } - - if let Some(password) = password { - pipeline = pipeline.with_password(password); - } - - let tracer_provider = pipeline - .build_batch(opentelemetry_sdk::runtime::Tokio) - .context("Failed to configure Jaeger collector exporter")?; - - Ok(tracer_provider) -} - -fn zipkin_tracer(collector_endpoint: &Option) -> anyhow::Result { - let http_client = http_client(); - - let mut pipeline = opentelemetry_zipkin::new_pipeline() - .with_http_client(http_client) - .with_service_name(env!("CARGO_PKG_NAME")) - .with_trace_config(trace_config()); - - if let Some(collector_endpoint) = collector_endpoint { - pipeline = pipeline.with_collector_endpoint(collector_endpoint.as_str()); - } - - let tracer = pipeline - .install_batch(opentelemetry_sdk::runtime::Tokio) - .context("Failed to configure Zipkin exporter")?; - - Ok(tracer) -} - fn tracer(config: &TracingExporterConfig) -> anyhow::Result> { let tracer_provider = match config { TracingExporterConfig::None => return Ok(None), @@ -181,19 +122,6 @@ fn tracer(config: &TracingExporterConfig) -> anyhow::Result> { // The OTLP exporter already creates a tracer and installs it return Ok(Some(otlp_tracer(endpoint.as_ref())?)); } - TracingExporterConfig::Jaeger(JaegerExporterProtocolConfig::UdpThriftCompact { - agent_host, - agent_port, - }) => jaeger_agent_tracer_provider(agent_host, *agent_port)?, - TracingExporterConfig::Jaeger(JaegerExporterProtocolConfig::HttpThriftBinary { - endpoint, - username, - password, - }) => jaeger_collector_tracer_provider(endpoint, username.as_deref(), password.as_deref())?, - TracingExporterConfig::Zipkin { collector_endpoint } => { - // The Zipkin exporter already creates a tracer and installs it - return Ok(Some(zipkin_tracer(collector_endpoint)?)); - } }; let tracer = tracer_provider.versioned_tracer( @@ -210,7 +138,9 @@ fn tracer(config: &TracingExporterConfig) -> anyhow::Result> { fn otlp_metric_reader(endpoint: Option<&url::Url>) -> anyhow::Result { use opentelemetry_otlp::WithExportConfig; - let mut exporter = opentelemetry_otlp::new_exporter().tonic(); + let mut exporter = opentelemetry_otlp::new_exporter() + .http() + .with_http_client(http_client()); if let Some(endpoint) = endpoint { exporter = exporter.with_endpoint(endpoint.to_string()); } @@ -279,7 +209,7 @@ fn prometheus_metric_reader() -> anyhow::Result { } fn init_meter(config: &MetricsExporterConfig) -> anyhow::Result<()> { - let meter_provider_builder = MeterProvider::builder(); + let meter_provider_builder = SdkMeterProvider::builder(); let meter_provider_builder = match config { MetricsExporterConfig::None => meter_provider_builder.with_reader(ManualReader::default()), MetricsExporterConfig::Stdout => meter_provider_builder.with_reader(stdout_metric_reader()), @@ -306,9 +236,9 @@ fn trace_config() -> opentelemetry_sdk::trace::Config { } fn resource() -> Resource { - let resource = Resource::new(vec![ - semcov::resource::SERVICE_NAME.string(env!("CARGO_PKG_NAME")), - semcov::resource::SERVICE_VERSION.string(env!("CARGO_PKG_VERSION")), + let resource = Resource::new([ + KeyValue::new(semcov::resource::SERVICE_NAME, env!("CARGO_PKG_NAME")), + KeyValue::new(semcov::resource::SERVICE_VERSION, env!("CARGO_PKG_VERSION")), ]); let detected = Resource::from_detectors( diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index f00c781d..4244045f 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -14,7 +14,7 @@ workspace = true [dependencies] tokio = { version = "1.35.1", features = ["fs", "rt"] } tracing.workspace = true -async-trait = "0.1.77" +async-trait.workspace = true thiserror.workspace = true anyhow.workspace = true diff --git a/crates/config/src/sections/mod.rs b/crates/config/src/sections/mod.rs index ac24acc7..81706cde 100644 --- a/crates/config/src/sections/mod.rs +++ b/crates/config/src/sections/mod.rs @@ -46,8 +46,8 @@ pub use self::{ policy::PolicyConfig, secrets::SecretsConfig, telemetry::{ - JaegerExporterProtocolConfig, MetricsConfig, MetricsExporterConfig, Propagator, - TelemetryConfig, TracingConfig, TracingExporterConfig, + MetricsConfig, MetricsExporterConfig, Propagator, TelemetryConfig, TracingConfig, + TracingExporterConfig, }, templates::TemplatesConfig, upstream_oauth2::{ diff --git a/crates/config/src/sections/telemetry.rs b/crates/config/src/sections/telemetry.rs index d6ada1b3..6a7dcef4 100644 --- a/crates/config/src/sections/telemetry.rs +++ b/crates/config/src/sections/telemetry.rs @@ -12,14 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::num::NonZeroU16; - use async_trait::async_trait; use rand::Rng; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; -use thiserror::Error; use url::Url; use super::ConfigurationSection; @@ -36,138 +33,10 @@ pub enum Propagator { /// Propagate trace context with Jaeger compatible headers Jaeger, - - /// Propagate trace context with Zipkin compatible headers (single `b3` - /// header variant) - B3, - - /// Propagate trace context with Zipkin compatible headers (multiple - /// `x-b3-*` headers variant) - B3Multi, } fn otlp_endpoint_example() -> &'static str { - "https://localhost:4317" -} - -fn zipkin_collector_endpoint_example() -> &'static str { - "http://127.0.0.1:9411/api/v2/spans" -} - -/// The protocol to use by the Jaeger exporter -/// -/// Defaults to `udp/thrift.compact` -#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] -#[serde(tag = "protocol", try_from = "JaegerExporterKitchenSink")] -pub enum JaegerExporterProtocolConfig { - /// Thrift over HTTP - #[serde(rename = "http/thrift.binary")] - HttpThriftBinary { - /// Full URL of the Jaeger HTTP endpoint - /// - /// Defaults to `http://localhost:14268/api/traces` - endpoint: String, - - /// Username to be used for HTTP basic authentication - username: Option, - - /// Password to be used for HTTP basic authentication - password: Option, - }, - - /// Thrift with compact encoding over UDP - #[serde(rename = "udp/thrift.compact")] - UdpThriftCompact { - /// Hostname of the Jaeger agent - /// - /// Defaults to `localhost` - agent_host: String, - - /// `udp/thrift.compact` port of the Jaeger agent - /// - /// Defaults to `6831` - agent_port: u16, - }, -} - -#[derive(Clone, Debug, Deserialize)] -enum JaegerProtocol { - #[serde(rename = "http/thrift.binary")] - HttpThriftBinary, - - #[serde(rename = "grpc")] - Grpc, - - #[serde(rename = "udp/thrift.compact")] - UdpThriftCompact, - - #[serde(rename = "udp/thrift.binary")] - UdpThriftBinary, -} - -#[derive(Clone, Debug, Deserialize)] -#[serde(deny_unknown_fields)] -struct JaegerExporterKitchenSink { - protocol: Option, - endpoint: Option, - username: Option, - password: Option, - agent_host: Option, - agent_port: Option, -} - -#[derive(Error, Debug)] -#[error("Invalid Jaeger exporter config")] -enum InvalidJaegerConfig { - UnsupportedProtocol, - UnsupportedField, -} - -impl TryFrom for JaegerExporterProtocolConfig { - type Error = InvalidJaegerConfig; - - fn try_from(value: JaegerExporterKitchenSink) -> Result { - match value { - JaegerExporterKitchenSink { - protocol: Some(JaegerProtocol::UdpThriftCompact) | None, - endpoint: None, - username: None, - password: None, - agent_host: host, - agent_port: port, - } => Ok(Self::UdpThriftCompact { - agent_host: host.unwrap_or_else(|| "localhost".into()), - agent_port: port.map_or(6831, u16::from), - }), - - JaegerExporterKitchenSink { - protocol: Some(JaegerProtocol::HttpThriftBinary), - endpoint, - username, - password, - agent_host: None, - agent_port: None, - } => Ok(Self::HttpThriftBinary { - endpoint: endpoint.map_or_else( - || "http://localhost:14268/api/traces".into(), - |u| u.to_string(), - ), - username, - password, - }), - - JaegerExporterKitchenSink { - protocol: - Some(JaegerProtocol::HttpThriftBinary | JaegerProtocol::UdpThriftCompact) | None, - .. - } => Err(InvalidJaegerConfig::UnsupportedField), - - JaegerExporterKitchenSink { - protocol: Some(JaegerProtocol::Grpc | JaegerProtocol::UdpThriftBinary), - .. - } => Err(InvalidJaegerConfig::UnsupportedProtocol), - } - } + "https://localhost:4318" } /// Exporter to use when exporting traces @@ -188,17 +57,6 @@ pub enum TracingExporterConfig { #[serde(default)] endpoint: Option, }, - - /// Export traces to a Jaeger agent - Jaeger(JaegerExporterProtocolConfig), - - /// Export traces to a Zipkin collector - Zipkin { - /// Zipkin collector endpoint - #[schemars(url, example = "zipkin_collector_endpoint_example")] - #[serde(default)] - collector_endpoint: Option, - }, } impl Default for TracingExporterConfig { diff --git a/crates/email/Cargo.toml b/crates/email/Cargo.toml index 60fe34f9..b27b5d24 100644 --- a/crates/email/Cargo.toml +++ b/crates/email/Cargo.toml @@ -12,7 +12,7 @@ publish = false workspace = true [dependencies] -async-trait = "0.1.77" +async-trait.workspace = true tracing.workspace = true thiserror.workspace = true headers = "0.3.9" diff --git a/crates/graphql/Cargo.toml b/crates/graphql/Cargo.toml index 198e9150..226aab05 100644 --- a/crates/graphql/Cargo.toml +++ b/crates/graphql/Cargo.toml @@ -14,7 +14,7 @@ workspace = true [dependencies] anyhow.workspace = true async-graphql = { version = "6.0.11", features = ["chrono", "url"] } -async-trait = "0.1.77" +async-trait.workspace = true chrono.workspace = true lettre = { version = "0.11.4", default-features = false } serde.workspace = true diff --git a/crates/iana-codegen/Cargo.toml b/crates/iana-codegen/Cargo.toml index dd18549c..8932d4a8 100644 --- a/crates/iana-codegen/Cargo.toml +++ b/crates/iana-codegen/Cargo.toml @@ -13,7 +13,7 @@ workspace = true [dependencies] anyhow.workspace = true -async-trait = "0.1.77" +async-trait.workspace = true camino.workspace = true convert_case = "0.6.0" csv = "1.3.0" diff --git a/crates/matrix-synapse/Cargo.toml b/crates/matrix-synapse/Cargo.toml index a0e6aacc..302f36e3 100644 --- a/crates/matrix-synapse/Cargo.toml +++ b/crates/matrix-synapse/Cargo.toml @@ -13,7 +13,7 @@ workspace = true [dependencies] anyhow.workspace = true -async-trait = "0.1.77" +async-trait.workspace = true http.workspace = true serde.workspace = true tower.workspace = true diff --git a/crates/matrix/Cargo.toml b/crates/matrix/Cargo.toml index 29b65e3f..a9e069ea 100644 --- a/crates/matrix/Cargo.toml +++ b/crates/matrix/Cargo.toml @@ -14,7 +14,7 @@ workspace = true [dependencies] anyhow.workspace = true serde.workspace = true -async-trait = "0.1.77" +async-trait.workspace = true http.workspace = true tokio = { version = "1.35.1", features = ["sync", "macros", "rt"] } url.workspace = true diff --git a/crates/storage-pg/Cargo.toml b/crates/storage-pg/Cargo.toml index 8284792c..0f34be44 100644 --- a/crates/storage-pg/Cargo.toml +++ b/crates/storage-pg/Cargo.toml @@ -12,7 +12,7 @@ publish = false workspace = true [dependencies] -async-trait = "0.1.77" +async-trait.workspace = true sqlx = { version = "0.7.3", features = ["runtime-tokio-rustls", "postgres", "migrate", "chrono", "json", "uuid", "ipnetwork"] } sea-query = { version = "0.30.7", features = ["derive", "attr", "with-uuid", "with-chrono", "postgres-array"] } sea-query-binder = { version = "0.5.0", features = ["sqlx-postgres", "with-uuid", "with-chrono", "postgres-array"] } diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 3bead140..ff82e5ea 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -12,7 +12,7 @@ publish = false workspace = true [dependencies] -async-trait = "0.1.77" +async-trait.workspace = true chrono.workspace = true thiserror.workspace = true futures-util = "0.3.30" diff --git a/crates/tasks/Cargo.toml b/crates/tasks/Cargo.toml index c498d7a1..3e1212f6 100644 --- a/crates/tasks/Cargo.toml +++ b/crates/tasks/Cargo.toml @@ -16,7 +16,7 @@ anyhow.workspace = true apalis-core = { version = "0.4.9", features = ["extensions", "tokio-comp", "storage"] } apalis-cron = "0.4.9" async-stream = "0.3.5" -async-trait = "0.1.77" +async-trait.workspace = true chrono.workspace = true event-listener = "4.0.3" futures-lite = "2.2.0" diff --git a/crates/tower/Cargo.toml b/crates/tower/Cargo.toml index 00cb825f..de4f66be 100644 --- a/crates/tower/Cargo.toml +++ b/crates/tower/Cargo.toml @@ -18,6 +18,6 @@ tracing-opentelemetry.workspace = true tower.workspace = true tokio = { version = "1.35.1", features = ["time"] } opentelemetry.workspace = true -opentelemetry-http = "0.10.0" +opentelemetry-http.workspace = true opentelemetry-semantic-conventions.workspace = true pin-project-lite = "0.2.13" diff --git a/deny.toml b/deny.toml index 74cfa8ee..bdf025b5 100644 --- a/deny.toml +++ b/deny.toml @@ -64,7 +64,6 @@ skip = [ { name = "event-listener", version = "2.5.3" }, # async-channel (wiremock) and sqlx-core depend on the old version { name = "regex-syntax", version = "0.6.29" }, # tracing-subscriber[env-filter] -> matchers depends on the old version { name = "regex-automata", version = "0.1.10" }, # ^ - { name = "ordered-float", version = "2.10.0" }, # opentelemetry-jaeger -> thrift depends on the old version { name = "itertools", version = "0.10.5" }, # wasmtime & others depends on the old version { name = "bitflags", version = "1.3.2" }, # axum depends on an old version { name = "hashbrown" }, # Too many versions :( diff --git a/docs/config.schema.json b/docs/config.schema.json index eb358ccf..da92962c 100644 --- a/docs/config.schema.json +++ b/docs/config.schema.json @@ -1253,104 +1253,7 @@ "endpoint": { "description": "OTLP compatible endpoint", "examples": [ - "https://localhost:4317" - ], - "type": "string", - "format": "uri" - } - }, - "additionalProperties": false - }, - { - "description": "Export traces to a Jaeger agent", - "type": "object", - "oneOf": [ - { - "description": "Thrift over HTTP", - "type": "object", - "required": [ - "endpoint", - "protocol" - ], - "properties": { - "protocol": { - "type": "string", - "enum": [ - "http/thrift.binary" - ] - }, - "endpoint": { - "description": "Full URL of the Jaeger HTTP endpoint\n\nDefaults to `http://localhost:14268/api/traces`", - "type": "string" - }, - "username": { - "description": "Username to be used for HTTP basic authentication", - "type": "string" - }, - "password": { - "description": "Password to be used for HTTP basic authentication", - "type": "string" - } - } - }, - { - "description": "Thrift with compact encoding over UDP", - "type": "object", - "required": [ - "agent_host", - "agent_port", - "protocol" - ], - "properties": { - "protocol": { - "type": "string", - "enum": [ - "udp/thrift.compact" - ] - }, - "agent_host": { - "description": "Hostname of the Jaeger agent\n\nDefaults to `localhost`", - "type": "string" - }, - "agent_port": { - "description": "`udp/thrift.compact` port of the Jaeger agent\n\nDefaults to `6831`", - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - } - ], - "required": [ - "exporter" - ], - "properties": { - "exporter": { - "type": "string", - "enum": [ - "jaeger" - ] - } - }, - "additionalProperties": false - }, - { - "description": "Export traces to a Zipkin collector", - "type": "object", - "required": [ - "exporter" - ], - "properties": { - "exporter": { - "type": "string", - "enum": [ - "zipkin" - ] - }, - "collector_endpoint": { - "description": "Zipkin collector endpoint", - "examples": [ - "http://127.0.0.1:9411/api/v2/spans" + "https://localhost:4318" ], "type": "string", "format": "uri" @@ -1395,20 +1298,6 @@ "enum": [ "jaeger" ] - }, - { - "description": "Propagate trace context with Zipkin compatible headers (single `b3` header variant)", - "type": "string", - "enum": [ - "b3" - ] - }, - { - "description": "Propagate trace context with Zipkin compatible headers (multiple `x-b3-*` headers variant)", - "type": "string", - "enum": [ - "b3multi" - ] } ] }, @@ -1462,7 +1351,7 @@ "endpoint": { "description": "OTLP compatible endpoint", "examples": [ - "https://localhost:4317" + "https://localhost:4318" ], "type": "string", "format": "uri" diff --git a/docs/usage/configuration.md b/docs/usage/configuration.md index 7d1694d7..e4bf7fe4 100644 --- a/docs/usage/configuration.md +++ b/docs/usage/configuration.md @@ -293,30 +293,13 @@ telemetry: - baggage # Propagate trace context with Jaeger compatible headers - jaeger - # Propagate trace context with Zipkin compatible headers (single `b3` header variant) - - b3 - # Propagate trace context with Zipkin compatible headers (multiple `x-b3-*` headers variant) - - b3multi # The default: don't export traces exporter: none # Export traces to an OTLP-compatible endpoint #exporter: otlp - #endpoint: https://localhost:4317 - - # Export traces to a Jaeger endpoint - #exporter: jaeger - #protocol: http/thrift.binary | udp/thrift.compact - #endpoint: http://localhost:14268/api/traces # for http/thrift.binary - #username: username # for http/thrift.binary - #password: password # for http/thrift.binary - #agent_host: localhost # for udp/thrift.compact - #agent_port: 6831 # for udp/thrift.compact - - # Export traces to a Zipkin endpoint - #exporter: zipkin - #collector_endpoint: http://localhost:9411/api/v2/spans + #endpoint: https://localhost:4318 metrics: # The default: don't export metrics