Skip to content

Commit f119cc5

Browse files
committed
Update tracing setup for compatibility with OpenTelemetry 0.27.0
- Updated tracing initialization to align with OpenTelemetry API (0.27.0) and SDK (0.26.0) requirements, moving from the older 0.18.0 version. - Adjusted the tracing configuration in tracing.rs to reflect changes in layer setup and API separation in the new versions, specifically adapting to the SDK and API split in OpenTelemetry. - Centralized layer creation in tracing.rs to maintain all tracing configuration in a single module, reducing tracing setup in main.rs for cleaner organization. - Updated Cargo.toml dependencies to reflect new versions and restructured OpenTelemetry and tracing crates.
1 parent 60af377 commit f119cc5

File tree

4 files changed

+58
-43
lines changed

4 files changed

+58
-43
lines changed

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ anyhow = "1.0.81"
1414
tokio = { version = "1", features = ["full"] }
1515
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
1616
tracing = "0.1.40"
17-
tracing-opentelemetry = "0.18.0"
1817
# We work fine with any version of 4, but 4.5 bumped MSRV to 1.74
1918
clap = { version = "<=4.4", features = ["derive", "cargo", "env"] }
2019
sysinfo = "0.27"

libazureinit/Cargo.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,21 @@ block-utils = "0.11.1"
2020
tracing = "0.1.40"
2121
strum = { version = "0.26.3", features = ["derive"] }
2222
fstab = "0.4.0"
23+
regex = "1"
24+
lazy_static = "1.4"
25+
tempfile = "3.3.0"
2326
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
24-
opentelemetry = "0.18.0"
27+
opentelemetry = "0.26"
28+
opentelemetry_sdk = "0.26"
29+
tracing-opentelemetry = "0.27"
2530
uuid = { version = "1.2", features = ["v4"] }
2631
anyhow = "1.0.81"
2732
sysinfo = "0.27"
2833
chrono = "0.4"
2934

3035
[dev-dependencies]
31-
tracing-test = { version = "0.2", features = ["no-env-filter"] }
3236
tempfile = "3"
37+
tracing-test = { version = "0.2", features = ["no-env-filter"] }
3338
tokio = { version = "1", features = ["full"] }
3439
tokio-util = "0.7.11"
3540
whoami = "1"

libazureinit/src/tracing.rs

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,54 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4-
use opentelemetry::{global, sdk::trace as sdktrace, trace::TracerProvider};
5-
6-
/// Initializes the tracing system by setting up a tracing provider and
7-
/// registering it globally. This function returns a tracer instance
8-
/// associated with the "azure-kvp" application.
9-
///
10-
/// # Returns
11-
/// A sdktrace::Tracer object that can be used to create and manage spans.
4+
use opentelemetry::{global, trace::TracerProvider};
5+
use opentelemetry_sdk::trace::{
6+
self as sdktrace, Config, Sampler, TracerProvider as SdkTracerProvider,
7+
};
8+
use tracing::{event, Level};
9+
use tracing_opentelemetry::OpenTelemetryLayer;
10+
use tracing_subscriber::fmt::format::FmtSpan;
11+
use tracing_subscriber::{
12+
fmt, layer::SubscriberExt, EnvFilter, Layer, Registry,
13+
};
14+
15+
use crate::EmitKVPLayer;
16+
1217
pub fn initialize_tracing() -> sdktrace::Tracer {
13-
let provider = sdktrace::TracerProvider::builder().build();
18+
let config = Config::default().with_sampler(Sampler::AlwaysOn);
19+
20+
let provider = SdkTracerProvider::builder().with_config(config).build();
21+
1422
global::set_tracer_provider(provider.clone());
1523
provider.tracer("azure-kvp")
1624
}
25+
26+
pub fn setup_layers(
27+
tracer: sdktrace::Tracer,
28+
) -> Result<(), Box<dyn std::error::Error>> {
29+
let otel_layer = OpenTelemetryLayer::new(tracer);
30+
31+
let emit_kvp_layer = match EmitKVPLayer::new(std::path::PathBuf::from(
32+
"/var/lib/hyperv/.kvp_pool_1",
33+
)) {
34+
Ok(layer) => Some(layer),
35+
Err(e) => {
36+
event!(Level::ERROR, "Failed to initialize EmitKVPLayer: {}. Continuing without KVP logging.", e);
37+
None
38+
}
39+
};
40+
41+
let stderr_layer = fmt::layer()
42+
.with_span_events(FmtSpan::NEW | FmtSpan::CLOSE)
43+
.with_writer(std::io::stderr)
44+
.with_filter(EnvFilter::from_env("AZURE_INIT_LOG"));
45+
46+
let subscriber = Registry::default()
47+
.with(stderr_layer)
48+
.with(otel_layer)
49+
.with(emit_kvp_layer);
50+
51+
tracing::subscriber::set_global_default(subscriber)?;
52+
53+
Ok(())
54+
}

src/main.rs

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use anyhow::Context;
44
use clap::Parser;
55
use libazureinit::imds::InstanceMetadata;
6+
use libazureinit::tracing::{initialize_tracing, setup_layers};
67
use libazureinit::User;
78
use libazureinit::{
89
error::Error as LibError,
@@ -16,14 +17,6 @@ use std::time::Duration;
1617
use sysinfo::{System, SystemExt};
1718
use tracing::instrument;
1819
use tracing::{event, Level};
19-
use tracing_opentelemetry::OpenTelemetryLayer;
20-
use tracing_subscriber::fmt::format::FmtSpan;
21-
use tracing_subscriber::{
22-
fmt, layer::SubscriberExt, EnvFilter, Layer, Registry,
23-
};
24-
25-
use libazureinit::tracing::initialize_tracing;
26-
use libazureinit::EmitKVPLayer;
2720

2821
const VERSION: &str = env!("CARGO_PKG_VERSION");
2922

@@ -100,29 +93,9 @@ fn get_username(
10093
async fn main() -> ExitCode {
10194
let tracer = initialize_tracing();
10295

103-
let otel_layer = OpenTelemetryLayer::new(tracer);
104-
let emit_kvp_layer = match EmitKVPLayer::new(std::path::PathBuf::from(
105-
"/var/lib/hyperv/.kvp_pool_1",
106-
)) {
107-
Ok(layer) => Some(layer),
108-
Err(e) => {
109-
event!(Level::ERROR, "Failed to initialize EmitKVPLayer: {}. Continuing without KVP logging.", e);
110-
None
111-
}
112-
};
113-
114-
let stderr_layer = fmt::layer()
115-
.with_span_events(FmtSpan::NEW | FmtSpan::CLOSE)
116-
.with_writer(std::io::stderr)
117-
.with_filter(EnvFilter::from_env("AZURE_INIT_LOG"));
118-
119-
let subscriber = Registry::default()
120-
.with(stderr_layer)
121-
.with(otel_layer)
122-
.with(emit_kvp_layer);
123-
124-
tracing::subscriber::set_global_default(subscriber)
125-
.expect("Failed to set global tracing subscriber");
96+
if let Err(e) = setup_layers(tracer) {
97+
eprintln!("Warning: Failed to set up tracing layers: {:?}", e);
98+
}
12699

127100
let result = provision().await;
128101

0 commit comments

Comments
 (0)