Skip to content

Commit f6bb6c9

Browse files
authored
Merge pull request #3062 from spinframework/update-otel-dependencies
Update otel dependencies
2 parents a97f5f3 + ceae72d commit f6bb6c9

File tree

9 files changed

+84
-99
lines changed

9 files changed

+84
-99
lines changed

Cargo.lock

Lines changed: 27 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ http = "1"
127127
http-body-util = "0.1"
128128
hyper = { version = "1", features = ["full"] }
129129
itertools = "0.13"
130-
opentelemetry = { version = "0.27", features = ["metrics", "trace", "logs"] }
131-
opentelemetry_sdk = { version = "0.27", features = ["rt-tokio", "spec_unstable_logs_enabled", "metrics"] }
130+
opentelemetry = { version = "0.28", features = ["metrics", "trace", "logs"] }
131+
opentelemetry_sdk = { version = "0.28", features = ["rt-tokio", "spec_unstable_logs_enabled", "metrics"] }
132132
rand = "0.8"
133133
regex = "1"
134134
reqwest = { version = "0.12", features = ["stream", "blocking"] }
@@ -144,13 +144,13 @@ thiserror = "1"
144144
tokio = "1"
145145
toml = "0.8"
146146
tracing = { version = "0.1", features = ["log"] }
147-
tracing-opentelemetry = { version = "0.28", default-features = false, features = ["metrics"] }
147+
tracing-opentelemetry = { version = "0.29", default-features = false, features = ["metrics"] }
148148
url = "2"
149149
wasi-common-preview1 = { version = "25.0.0", package = "wasi-common", features = [
150150
"tokio",
151151
] }
152-
wasm-pkg-common = "0.8"
153152
wasm-pkg-client = "0.8"
153+
wasm-pkg-common = "0.8"
154154
wasmtime = "29.0.1"
155155
wasmtime-wasi = "29.0.1"
156156
wasmtime-wasi-http = "29.0.1"

crates/telemetry/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ anyhow = { workspace = true }
99
http0 = { version = "0.2.9", package = "http" }
1010
http1 = { version = "1.0.0", package = "http" }
1111
opentelemetry = { workspace = true }
12-
opentelemetry-appender-tracing = "0.27"
13-
opentelemetry-otlp = { version = "0.27", features = ["http-proto", "http", "reqwest-client"] }
12+
opentelemetry-appender-tracing = "0.28"
13+
opentelemetry-otlp = { version = "0.28", features = ["grpc-tonic"] }
1414
opentelemetry_sdk = { workspace = true }
1515
terminal = { path = "../terminal" }
1616
tracing = { workspace = true }

crates/telemetry/src/detector.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{env, time::Duration};
1+
use std::env;
22

33
use opentelemetry::{Key, KeyValue, Value};
44
use opentelemetry_sdk::{
@@ -28,20 +28,22 @@ impl SpinResourceDetector {
2828
}
2929

3030
impl ResourceDetector for SpinResourceDetector {
31-
fn detect(&self, _timeout: Duration) -> Resource {
31+
fn detect(&self) -> Resource {
3232
let service_name = env::var(OTEL_SERVICE_NAME)
3333
.ok()
3434
.filter(|s| !s.is_empty())
3535
.map(Value::from)
3636
.or_else(|| {
3737
EnvResourceDetector::new()
38-
.detect(Duration::from_secs(0))
39-
.get(Key::new("service.name"))
38+
.detect()
39+
.get(&Key::new("service.name"))
4040
})
4141
.unwrap_or_else(|| "spin".into());
42-
Resource::new(vec![
43-
KeyValue::new("service.name", service_name),
44-
KeyValue::new("service.version", self.spin_version.clone()),
45-
])
42+
Resource::builder()
43+
.with_attributes(vec![
44+
KeyValue::new("service.name", service_name),
45+
KeyValue::new("service.version", self.spin_version.clone()),
46+
])
47+
.build()
4648
}
4749
}

crates/telemetry/src/lib.rs

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::io::IsTerminal;
22

3+
use anyhow::Context;
34
use env::otel_logs_enabled;
45
use env::otel_metrics_enabled;
56
use env::otel_tracing_enabled;
@@ -47,7 +48,7 @@ pub use propagation::inject_trace_context;
4748
/// ```no_run
4849
/// spin_telemetry::metrics::monotonic_counter!(spin.metric_name = 1, metric_attribute = "value");
4950
/// ```
50-
pub fn init(spin_version: String) -> anyhow::Result<ShutdownGuard> {
51+
pub fn init(spin_version: String) -> anyhow::Result<()> {
5152
// This layer will print all tracing library log messages to stderr.
5253
let fmt_layer = fmt::layer()
5354
.with_writer(std::io::stderr)
@@ -65,13 +66,19 @@ pub fn init(spin_version: String) -> anyhow::Result<ShutdownGuard> {
6566
);
6667

6768
let otel_tracing_layer = if otel_tracing_enabled() {
68-
Some(traces::otel_tracing_layer(spin_version.clone())?)
69+
Some(
70+
traces::otel_tracing_layer(spin_version.clone())
71+
.context("failed to initialize otel tracing")?,
72+
)
6973
} else {
7074
None
7175
};
7276

7377
let otel_metrics_layer = if otel_metrics_enabled() {
74-
Some(metrics::otel_metrics_layer(spin_version.clone())?)
78+
Some(
79+
metrics::otel_metrics_layer(spin_version.clone())
80+
.context("failed to initialize otel metrics")?,
81+
)
7582
} else {
7683
None
7784
};
@@ -88,21 +95,9 @@ pub fn init(spin_version: String) -> anyhow::Result<ShutdownGuard> {
8895
opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new());
8996

9097
if otel_logs_enabled() {
91-
logs::init_otel_logging_backend(spin_version)?;
98+
logs::init_otel_logging_backend(spin_version)
99+
.context("failed to initialize otel logging")?;
92100
}
93101

94-
Ok(ShutdownGuard)
95-
}
96-
97-
/// An RAII implementation for connection to open telemetry services.
98-
///
99-
/// Shutdown of the open telemetry services will happen on `Drop`.
100-
#[must_use]
101-
pub struct ShutdownGuard;
102-
103-
impl Drop for ShutdownGuard {
104-
fn drop(&mut self) {
105-
// Give tracer provider a chance to flush any pending traces.
106-
opentelemetry::global::shutdown_tracer_provider();
107-
}
102+
Ok(())
108103
}

crates/telemetry/src/logs.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
use std::{ascii::escape_default, sync::OnceLock, time::Duration};
1+
use std::{ascii::escape_default, sync::OnceLock};
22

33
use anyhow::bail;
44
use opentelemetry::logs::{LogRecord, Logger, LoggerProvider};
55
use opentelemetry_sdk::{
6-
logs::{BatchConfigBuilder, BatchLogProcessor, Logger as SdkLogger},
7-
resource::{EnvResourceDetector, TelemetryResourceDetector},
6+
logs::{BatchConfigBuilder, BatchLogProcessor, SdkLogger},
7+
resource::{EnvResourceDetector, ResourceDetector, TelemetryResourceDetector},
88
Resource,
99
};
1010

@@ -68,18 +68,17 @@ fn escape_non_utf8_buf(buf: &[u8]) -> String {
6868

6969
/// Initialize the OTel logging backend.
7070
pub(crate) fn init_otel_logging_backend(spin_version: String) -> anyhow::Result<()> {
71-
let resource = Resource::from_detectors(
72-
Duration::from_secs(5),
73-
vec![
71+
let resource = Resource::builder()
72+
.with_detectors(&[
7473
// Set service.name from env OTEL_SERVICE_NAME > env OTEL_RESOURCE_ATTRIBUTES > spin
7574
// Set service.version from Spin metadata
76-
Box::new(SpinResourceDetector::new(spin_version)),
75+
Box::new(SpinResourceDetector::new(spin_version)) as Box<dyn ResourceDetector>,
7776
// Sets fields from env OTEL_RESOURCE_ATTRIBUTES
7877
Box::new(EnvResourceDetector::new()),
7978
// Sets telemetry.sdk{name, language, version}
8079
Box::new(TelemetryResourceDetector),
81-
],
82-
);
80+
])
81+
.build();
8382

8483
// This will configure the exporter based on the OTEL_EXPORTER_* environment variables. We
8584
// currently default to using the HTTP exporter but in the future we could select off of the
@@ -95,10 +94,10 @@ pub(crate) fn init_otel_logging_backend(spin_version: String) -> anyhow::Result<
9594
OtlpProtocol::HttpJson => bail!("http/json OTLP protocol is not supported"),
9695
};
9796

98-
let provider = opentelemetry_sdk::logs::LoggerProvider::builder()
97+
let provider = opentelemetry_sdk::logs::SdkLoggerProvider::builder()
9998
.with_resource(resource)
10099
.with_log_processor(
101-
BatchLogProcessor::builder(exporter, opentelemetry_sdk::runtime::Tokio)
100+
BatchLogProcessor::builder(exporter)
102101
.with_batch_config(BatchConfigBuilder::default().build())
103102
.build(),
104103
)

0 commit comments

Comments
 (0)