Skip to content

Commit afc0c97

Browse files
committed
add error handling, following instructions: open-telemetry/opentelemetry-rust#2260
1 parent eb4e26a commit afc0c97

File tree

3 files changed

+61
-15
lines changed

3 files changed

+61
-15
lines changed

Cargo.lock

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,8 @@ dependencies = [
352352
"num-traits 0.2.19",
353353
"oci-client",
354354
"once_cell",
355-
"opentelemetry",
355+
"opentelemetry 0.30.0",
356+
"opentelemetry-appender-tracing",
356357
"opentelemetry-aws",
357358
"opentelemetry-datadog",
358359
"opentelemetry-http",
@@ -4519,6 +4520,20 @@ version = "0.1.6"
45194520
source = "registry+https://github.com/rust-lang/crates.io-index"
45204521
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
45214522

4523+
[[package]]
4524+
name = "opentelemetry"
4525+
version = "0.27.1"
4526+
source = "registry+https://github.com/rust-lang/crates.io-index"
4527+
checksum = "ab70038c28ed37b97d8ed414b6429d343a8bbf44c9f79ec854f3a643029ba6d7"
4528+
dependencies = [
4529+
"futures-core",
4530+
"futures-sink",
4531+
"js-sys",
4532+
"pin-project-lite",
4533+
"thiserror 1.0.69",
4534+
"tracing",
4535+
]
4536+
45224537
[[package]]
45234538
name = "opentelemetry"
45244539
version = "0.30.0"
@@ -4533,13 +4548,25 @@ dependencies = [
45334548
"tracing",
45344549
]
45354550

4551+
[[package]]
4552+
name = "opentelemetry-appender-tracing"
4553+
version = "0.27.0"
4554+
source = "registry+https://github.com/rust-lang/crates.io-index"
4555+
checksum = "ab5feffc321035ad94088a7e5333abb4d84a8726e54a802e736ce9dd7237e85b"
4556+
dependencies = [
4557+
"opentelemetry 0.27.1",
4558+
"tracing",
4559+
"tracing-core",
4560+
"tracing-subscriber",
4561+
]
4562+
45364563
[[package]]
45374564
name = "opentelemetry-aws"
45384565
version = "0.18.0"
45394566
source = "registry+https://github.com/rust-lang/crates.io-index"
45404567
checksum = "6f3632d7494b282abac9039ef96e8619d86e8a3d0650dc6b9072920d25e2310a"
45414568
dependencies = [
4542-
"opentelemetry",
4569+
"opentelemetry 0.30.0",
45434570
"opentelemetry_sdk",
45444571
"tracing",
45454572
]
@@ -4554,7 +4581,7 @@ dependencies = [
45544581
"http 1.3.1",
45554582
"indexmap 2.11.0",
45564583
"itoa",
4557-
"opentelemetry",
4584+
"opentelemetry 0.30.0",
45584585
"opentelemetry-http",
45594586
"opentelemetry-semantic-conventions",
45604587
"opentelemetry_sdk",
@@ -4574,7 +4601,7 @@ dependencies = [
45744601
"async-trait",
45754602
"bytes",
45764603
"http 1.3.1",
4577-
"opentelemetry",
4604+
"opentelemetry 0.30.0",
45784605
"reqwest",
45794606
]
45804607

@@ -4584,7 +4611,7 @@ version = "0.30.0"
45844611
source = "registry+https://github.com/rust-lang/crates.io-index"
45854612
checksum = "090b8ec07bb2e304b529581aa1fe530d7861298c9ef549ebbf44a4a56472c539"
45864613
dependencies = [
4587-
"opentelemetry",
4614+
"opentelemetry 0.30.0",
45884615
]
45894616

45904617
[[package]]
@@ -4594,7 +4621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
45944621
checksum = "dbee664a43e07615731afc539ca60c6d9f1a9425e25ca09c57bc36c87c55852b"
45954622
dependencies = [
45964623
"http 1.3.1",
4597-
"opentelemetry",
4624+
"opentelemetry 0.30.0",
45984625
"opentelemetry-http",
45994626
"opentelemetry-proto",
46004627
"opentelemetry_sdk",
@@ -4611,7 +4638,7 @@ version = "0.29.1"
46114638
source = "git+https://github.com/sandhose/opentelemetry-rust.git?branch=otel-prometheus-0.30#a60122ce4d534631b70222d84a19bfcb8e9d69a2"
46124639
dependencies = [
46134640
"once_cell",
4614-
"opentelemetry",
4641+
"opentelemetry 0.30.0",
46154642
"opentelemetry_sdk",
46164643
"prometheus",
46174644
"tracing",
@@ -4625,7 +4652,7 @@ checksum = "2e046fd7660710fe5a05e8748e70d9058dc15c94ba914e7c4faa7c728f0e8ddc"
46254652
dependencies = [
46264653
"base64 0.22.1",
46274654
"hex",
4628-
"opentelemetry",
4655+
"opentelemetry 0.30.0",
46294656
"opentelemetry_sdk",
46304657
"prost",
46314658
"serde",
@@ -4645,7 +4672,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
46454672
checksum = "447191061af41c3943e082ea359ab8b64ff27d6d34d30d327df309ddef1eef6f"
46464673
dependencies = [
46474674
"chrono",
4648-
"opentelemetry",
4675+
"opentelemetry 0.30.0",
46494676
"opentelemetry_sdk",
46504677
]
46514678

@@ -4657,7 +4684,7 @@ checksum = "8823568a9abd4003d1acc564bcfec8e3406a8c73203f8f50bdfc88b44d7ecfb6"
46574684
dependencies = [
46584685
"http 1.3.1",
46594686
"once_cell",
4660-
"opentelemetry",
4687+
"opentelemetry 0.30.0",
46614688
"opentelemetry-http",
46624689
"opentelemetry_sdk",
46634690
"reqwest",
@@ -4676,7 +4703,7 @@ dependencies = [
46764703
"futures-channel",
46774704
"futures-executor",
46784705
"futures-util",
4679-
"opentelemetry",
4706+
"opentelemetry 0.30.0",
46804707
"percent-encoding",
46814708
"rand 0.9.2",
46824709
"serde_json",
@@ -7264,7 +7291,7 @@ checksum = "ddcf5959f39507d0d04d6413119c04f33b623f4f951ebcbdddddfad2d0623a9c"
72647291
dependencies = [
72657292
"js-sys",
72667293
"once_cell",
7267-
"opentelemetry",
7294+
"opentelemetry 0.30.0",
72687295
"opentelemetry_sdk",
72697296
"smallvec",
72707297
"tracing",

apollo-router/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ opentelemetry_sdk = { version = "0.30.0", default-features = false, features = [
160160
"experimental_metrics_custom_reader",
161161
"experimental_metrics_periodicreader_with_async_runtime",
162162
] }
163+
opentelemetry-appender-tracing = "0.27.0"
163164
opentelemetry-aws = "0.18.0"
164165
opentelemetry-datadog = { version = "0.18.0", features = ["agent-sampling", "reqwest-client"] }
165166
rmp = "0.8"

apollo-router/src/plugins/telemetry/mod.rs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use http::header;
2626
use metrics::apollo::studio::SingleLimitsStats;
2727
use metrics::local_type_stats::LocalTypeStatRecorder;
2828
use multimap::MultiMap;
29+
use opentelemetry::InstrumentationScope;
2930
use opentelemetry::Key;
3031
use opentelemetry::KeyValue;
3132
use opentelemetry::global::GlobalTracerProvider;
@@ -56,6 +57,9 @@ use tokio::runtime::Handle;
5657
use tower::BoxError;
5758
use tower::ServiceBuilder;
5859
use tower::ServiceExt;
60+
use tracing_subscriber::filter::filter_fn;
61+
use tracing_subscriber::fmt::Layer;
62+
use tracing_subscriber::prelude::*;
5963
use uuid::Uuid;
6064

6165
use self::apollo::ForwardValues;
@@ -365,7 +369,6 @@ impl PluginPrivate for Telemetry {
365369
type Config = config::Conf;
366370

367371
async fn new(init: PluginInit<Self::Config>) -> Result<Self, BoxError> {
368-
369372
let mut config = init.config;
370373
config.instrumentation.spans.update_defaults();
371374
config.instrumentation.instruments.update_defaults();
@@ -380,6 +383,19 @@ impl PluginPrivate for Telemetry {
380383
let metrics_builder = Self::create_metrics_builder(&config)?;
381384
let tracer_provider = Self::create_tracer_provider(&config)?;
382385

386+
// handle OpenTelemetry internal logs and stop them from propagating to tracing bridge/appender
387+
// capture logs with the opentelemetry prefix and print them to eprintln!
388+
let opentelemetry_layer = Layer::new()
389+
.with_writer(std::io::stderr)
390+
.with_filter(filter_fn(|metadata| {
391+
metadata.target().starts_with("opentelemetry")
392+
}));
393+
394+
// register layer in tracing registry
395+
tracing_subscriber::registry()
396+
.with(opentelemetry_layer) // OpenTelemetry internal logs (filtered out)
397+
.init();
398+
383399
if config.instrumentation.spans.mode == SpanMode::Deprecated {
384400
::tracing::warn!(
385401
"telemetry.instrumentation.spans.mode is currently set to 'deprecated', either explicitly or via defaulting. Set telemetry.instrumentation.spans.mode explicitly in your router.yaml to 'spec_compliant' for log and span attributes that follow OpenTelemetry semantic conventions. This option will be defaulted to 'spec_compliant' in a future release and eventually removed altogether"
@@ -1171,8 +1187,10 @@ impl PluginPrivate for Telemetry {
11711187
.take()
11721188
.expect("must have new tracer_provider");
11731189

1174-
let tracer = tracer_provider
1175-
.tracer(GLOBAL_TRACER_NAME);
1190+
let scope = InstrumentationScope::builder(GLOBAL_TRACER_NAME)
1191+
.with_version(env!("CARGO_PKG_VERSION"))
1192+
.build();
1193+
let tracer = tracer_provider.tracer_with_scope(scope);
11761194
hot_tracer.reload(tracer);
11771195

11781196
let last_provider = opentelemetry::global::set_tracer_provider(tracer_provider);

0 commit comments

Comments
 (0)