Skip to content

Commit d01d476

Browse files
committed
Upgrade to OTel v0.23.0
This required re-working how the spin-telemetry logging layer works. Signed-off-by: Caleb Schoepp <caleb.schoepp@fermyon.com>
1 parent 4770c9f commit d01d476

File tree

4 files changed

+35
-38
lines changed

4 files changed

+35
-38
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,15 @@ anyhow = "1.0.75"
127127
conformance-tests = { git = "https://github.com/fermyon/conformance-tests", rev = "387b7f375df59e6254a7c29cf4a53507a9f46d32" }
128128
http-body-util = "0.1.0"
129129
hyper = { version = "1.0.0", features = ["full"] }
130-
opentelemetry = { version = "0.22.0", features = ["metrics", "trace", "logs"] }
131-
opentelemetry_sdk = { version = "0.22.1", features = ["rt-tokio", "logs_level_enabled", "metrics"] }
130+
opentelemetry = { version = "0.23.0", features = ["metrics", "trace", "logs"] }
131+
opentelemetry_sdk = { version = "0.23.0", features = ["rt-tokio", "logs_level_enabled", "metrics"] }
132132
reqwest = { version = "0.12", features = ["stream", "blocking"] }
133133
# In `rustls` turn off the `aws_lc_rs` default feature and turn on `ring`.
134134
# If both `aws_lc_rs` and `ring` are enabled, a panic at runtime will occur.
135135
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "logging", "tls12"] }
136136
test-environment = { git = "https://github.com/fermyon/conformance-tests", rev = "387b7f375df59e6254a7c29cf4a53507a9f46d32" }
137137
tracing = { version = "0.1", features = ["log"] }
138-
tracing-opentelemetry = { version = "0.23.0", default-features = false, features = ["metrics"] }
138+
tracing-opentelemetry = { version = "0.24.0", default-features = false, features = ["metrics"] }
139139

140140
wasi-common-preview1 = { version = "22.0.0", package = "wasi-common", features = [
141141
"tokio",

crates/telemetry/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ edition = { workspace = true }
88
anyhow = { workspace = true }
99
http0 = { version = "0.2.9", package = "http" }
1010
http1 = { version = "1.0.0", package = "http" }
11+
once_cell = "1.19.0"
1112
opentelemetry = { workspace = true }
12-
opentelemetry-otlp = { version = "0.15.0", default-features = false, features = ["http-proto", "trace", "http", "reqwest-client", "metrics", "grpc-tonic", "logs"] }
13-
opentelemetry-semantic-conventions = "0.14.0"
1413
opentelemetry_sdk = { workspace = true }
14+
opentelemetry-otlp = { version = "0.16.0", default-features = false, features = ["http-proto", "trace", "http", "reqwest-client", "metrics", "grpc-tonic", "logs"] }
15+
opentelemetry-semantic-conventions = "0.14.0"
1516
terminal = { path = "../terminal" }
1617
tracing = { version = "0.1.37", features = ["log"] }
1718
tracing-appender = "0.2.2"

crates/telemetry/src/logs.rs

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

33
use anyhow::bail;
4-
use opentelemetry::{
5-
global,
6-
logs::{Logger, LoggerProvider},
7-
};
4+
use opentelemetry::logs::{LogRecord, Logger, LoggerProvider};
85
use opentelemetry_otlp::LogExporterBuilder;
96
use opentelemetry_sdk::{
10-
logs::{BatchConfigBuilder, BatchLogProcessor},
7+
logs::{BatchConfigBuilder, BatchLogProcessor, Logger as SdkLogger},
118
resource::{EnvResourceDetector, TelemetryResourceDetector},
129
Resource,
1310
};
@@ -17,6 +14,8 @@ use crate::{
1714
env::{self, otel_logs_enabled, OtlpProtocol},
1815
};
1916

17+
static LOGGER: OnceLock<SdkLogger> = OnceLock::new();
18+
2019
/// Handle an application log. Has the potential to both forward the log to OTel and to emit it as a
2120
/// tracing event.
2221
pub fn handle_app_log(buf: &[u8]) {
@@ -30,20 +29,16 @@ fn app_log_to_otel(buf: &[u8]) {
3029
return;
3130
}
3231

33-
let logger = global::logger_provider().logger("spin");
32+
let logger = LOGGER.get().unwrap();
3433
if let Ok(s) = std::str::from_utf8(buf) {
35-
logger.emit(
36-
opentelemetry::logs::LogRecord::builder()
37-
.with_body(s.to_owned())
38-
.build(),
39-
);
34+
let mut record = logger.create_log_record();
35+
record.set_body(s.to_string().into());
36+
logger.emit(record);
4037
} else {
41-
logger.emit(
42-
opentelemetry::logs::LogRecord::builder()
43-
.with_body(escape_non_utf8_buf(buf))
44-
.with_attribute("app_log_non_utf8", true)
45-
.build(),
46-
);
38+
let mut record = logger.create_log_record();
39+
record.set_body(escape_non_utf8_buf(buf).into());
40+
record.add_attribute("app_log_non_utf8", true);
41+
logger.emit(record);
4742
}
4843
}
4944

@@ -106,7 +101,9 @@ pub(crate) fn init_otel_logging_backend(spin_version: String) -> anyhow::Result<
106101
)
107102
.build();
108103

109-
global::set_logger_provider(provider);
104+
LOGGER
105+
.set(provider.logger("spin"))
106+
.expect("should set logger");
110107

111108
Ok(())
112109
}

0 commit comments

Comments
 (0)