From dddc3de838c42865bc74e83f5dc40a0ef6767ce5 Mon Sep 17 00:00:00 2001 From: yjhmelody Date: Mon, 24 Jun 2024 18:45:31 +0800 Subject: [PATCH] update `opentelemetry` deps and support `otlp` --- Cargo.lock | 98 +++++++++++++++++++++++++-------- Cargo.toml | 9 +-- src/extensions/telemetry/mod.rs | 19 +++++++ 3 files changed, 98 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ab34c3..b019bd3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -603,7 +603,7 @@ dependencies = [ "futures-core", "prost", "prost-types", - "tonic", + "tonic 0.10.2", "tracing-core", ] @@ -625,7 +625,7 @@ dependencies = [ "thread_local", "tokio", "tokio-stream", - "tonic", + "tonic 0.10.2", "tracing", "tracing-core", "tracing-subscriber", @@ -2285,30 +2285,30 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "opentelemetry" -version = "0.21.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" +checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" dependencies = [ "futures-core", "futures-sink", - "indexmap 2.2.6", "js-sys", "once_cell", "pin-project-lite", "thiserror", - "urlencoding", ] [[package]] name = "opentelemetry-datadog" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e09667367cb509f10d7cf5960a83f9c4d96e93715f750b164b4b98d46c3cbf4" +checksum = "c22ae4b7a629f09b09307530e4dda7c37c37631c3d2ce27ce29d1402f57a0265" dependencies = [ + "ahash", "futures-core", "http 0.2.12", "indexmap 2.2.6", "itertools 0.11.0", + "itoa", "once_cell", "opentelemetry", "opentelemetry-http", @@ -2316,15 +2316,16 @@ dependencies = [ "opentelemetry_sdk", "reqwest", "rmp", + "ryu", "thiserror", "url", ] [[package]] name = "opentelemetry-http" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f51189ce8be654f9b5f7e70e49967ed894e84a06fc35c6c042e64ac1fc5399e" +checksum = "b0ba633e55c5ea6f431875ba55e71664f2fa5d3a90bd34ec9302eecc41c865dd" dependencies = [ "async-trait", "bytes 1.6.0", @@ -2335,9 +2336,9 @@ dependencies = [ [[package]] name = "opentelemetry-jaeger" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e617c66fd588e40e0dbbd66932fdc87393095b125d4459b1a3a10feb1712f8a1" +checksum = "501b471b67b746d9a07d4c29f8be00f952d1a2eca356922ede0098cbaddff19f" dependencies = [ "async-trait", "futures-core", @@ -2350,25 +2351,52 @@ dependencies = [ ] [[package]] -name = "opentelemetry-semantic-conventions" -version = "0.13.0" +name = "opentelemetry-otlp" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a94c69209c05319cdf7460c6d4c055ed102be242a0a6245835d7bc42c6ec7f54" +dependencies = [ + "async-trait", + "futures-core", + "http 0.2.12", + "opentelemetry", + "opentelemetry-proto", + "opentelemetry_sdk", + "prost", + "thiserror", + "tokio", + "tonic 0.11.0", +] + +[[package]] +name = "opentelemetry-proto" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5774f1ef1f982ef2a447f6ee04ec383981a3ab99c8e77a1a7b30182e65bbc84" +checksum = "984806e6cf27f2b49282e2a05e288f30594f3dbc74eb7a6e99422bc48ed78162" dependencies = [ "opentelemetry", + "opentelemetry_sdk", + "prost", + "tonic 0.11.0", ] +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1869fb4bb9b35c5ba8a1e40c9b128a7b4c010d07091e864a29da19e4fe2ca4d7" + [[package]] name = "opentelemetry_sdk" -version = "0.21.2" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f16aec8a98a457a52664d69e0091bac3a0abd18ead9b641cb00202ba4e0efe4" +checksum = "ae312d58eaa90a82d2e627fd86e075cf5230b3f11794e2ed74199ebbe572d4fd" dependencies = [ "async-trait", - "crossbeam-channel", "futures-channel", "futures-executor", "futures-util", + "lazy_static", "once_cell", "opentelemetry", "ordered-float 4.2.0", @@ -3402,6 +3430,7 @@ dependencies = [ "opentelemetry", "opentelemetry-datadog", "opentelemetry-jaeger", + "opentelemetry-otlp", "opentelemetry_sdk", "pprof", "rand 0.8.5", @@ -3710,6 +3739,33 @@ dependencies = [ "tracing", ] +[[package]] +name = "tonic" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.21.7", + "bytes 1.6.0", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower" version = "0.4.13" @@ -3926,12 +3982,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "utf8parse" version = "0.2.1" diff --git a/Cargo.toml b/Cargo.toml index de1cfb2..00f94d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,10 +31,11 @@ http-body-util = "0.1" hyper = "1.3" jsonrpsee = { version = "0.23", features = ["full"] } moka = { version = "0.12", features = ["future"] } -opentelemetry = { version = "0.21.0" } -opentelemetry-datadog = { version = "0.9.0", features = ["reqwest-client"] } -opentelemetry-jaeger = { version = "0.20.0", features = ["rt-tokio"] } -opentelemetry_sdk = { version = "0.21.1", features = ["rt-tokio", "trace"] } +opentelemetry = { version = "0.23" } +opentelemetry-datadog = { version = "0.11", features = ["reqwest-client"] } +opentelemetry-jaeger = { version = "0.22", features = ["rt-tokio"] } +opentelemetry-otlp = { version = "0.16" } +opentelemetry_sdk = { version = "0.23", features = ["rt-tokio", "trace"] } rand = "0.8.5" regex = "1.10.4" serde = "1.0.152" diff --git a/src/extensions/telemetry/mod.rs b/src/extensions/telemetry/mod.rs index c046f3c..2ef1c45 100644 --- a/src/extensions/telemetry/mod.rs +++ b/src/extensions/telemetry/mod.rs @@ -2,6 +2,7 @@ use std::env; use async_trait::async_trait; use opentelemetry::{global, trace::TraceError}; +use opentelemetry_otlp::WithExportConfig; use opentelemetry_sdk::trace::Tracer; use serde::Deserialize; @@ -11,6 +12,8 @@ use super::{Extension, ExtensionRegistry}; #[serde(rename_all = "snake_case")] pub enum TelemetryProvider { None, + #[serde(rename = "otlp")] + OTLP, Datadog, Jaeger, } @@ -58,7 +61,23 @@ pub fn setup_telemetry(options: &TelemetryConfig) -> Result, Trac let service_name = options.service_name.clone().unwrap_or_else(|| "subway".into()); let tracer = match options.provider { + TelemetryProvider::OTLP => { + let tracer = opentelemetry_otlp::new_pipeline().tracing(); + + let mut exporter = opentelemetry_otlp::new_exporter().tonic(); + + if let Some(ref agent_endpoint) = options.agent_endpoint { + exporter = exporter.with_endpoint(agent_endpoint.clone()); + } + + let tracer = tracer + .with_exporter(exporter) + .install_batch(opentelemetry_sdk::runtime::Tokio)?; + + Some(tracer) + } TelemetryProvider::Jaeger => { + #[allow(deprecated)] let mut tracer = opentelemetry_jaeger::new_agent_pipeline().with_service_name(service_name); if let Some(ref agent_endpoint) = options.agent_endpoint {