Skip to content

Commit d8b417c

Browse files
committed
sync: opentelemetry
1 parent b17f65d commit d8b417c

File tree

3 files changed

+146
-47
lines changed

3 files changed

+146
-47
lines changed

Cargo.lock

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

rdrs-kernel/Cargo.toml

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,20 @@ rdrs-repository = { workspace = true }
1515
rdrs-gui = { workspace = true, optional = true }
1616
rdrs-domain-player = { workspace = true }
1717

18-
tokio = { workspace = true }
19-
serde = { workspace = true, features = ["derive"] }
20-
config = { workspace = true }
21-
derive_more = { version = "2.0", features = ["as_ref"] }
22-
tracing = { workspace = true }
23-
tracing-appender = { version = "0.2", optional = true }
24-
tracing-opentelemetry = { version = "0.26", optional = true }
25-
tracing-subscriber = { version = "0.3", features = ["env-filter", "time", "local-time"], optional = true }
26-
opentelemetry = { version = "0.25", optional = true }
27-
opentelemetry-otlp = { version = "0.25", optional = true }
28-
opentelemetry_sdk = { version = "0.25", features = ["rt-tokio"], optional = true }
29-
chrono = "0.4"
30-
time = "0.3"
18+
tokio = { workspace = true }
19+
serde = { workspace = true, features = ["derive"] }
20+
config = { workspace = true }
21+
derive_more = { version = "2.0", features = ["as_ref"] }
22+
tracing = { workspace = true }
23+
tracing-appender = { version = "0.2", optional = true }
24+
tracing-opentelemetry = { version = "0.29", optional = true }
25+
tracing-subscriber = { version = "0.3", features = ["env-filter", "time", "local-time"], optional = true }
26+
opentelemetry = { version = "0.28", optional = true }
27+
opentelemetry-otlp = { version = "0.28", features = ["grpc-tonic"], optional = true }
28+
opentelemetry_sdk = { version = "0.28", features = ["rt-tokio"], optional = true }
29+
opentelemetry-appender-tracing = { version = "0.28.1", optional = true }
30+
chrono = "0.4"
31+
time = "0.3"
3132

3233
[features]
3334
default = []
@@ -38,6 +39,7 @@ telemetry = [
3839
"dep:opentelemetry-otlp",
3940
"dep:opentelemetry_sdk",
4041
"dep:tracing-appender",
42+
"dep:opentelemetry-appender-tracing",
4143
]
4244
slint = ["dep:rdrs-gui", "rdrs-gui/slint"]
4345
server_only = []

rdrs-kernel/src/telemetry/mod.rs

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ pub mod config;
22

33
use std::{io::IsTerminal, path::Path, sync::OnceLock};
44

5-
use opentelemetry::trace::{TraceResult, TracerProvider};
6-
use opentelemetry_otlp::WithExportConfig;
5+
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
6+
use opentelemetry_otlp::{LogExporter, WithExportConfig};
7+
use opentelemetry_sdk::logs::SdkLoggerProvider;
78
use rdrs_tools::error::Result;
89
use time::UtcOffset;
910
use tracing_appender::rolling::RollingFileAppender;
@@ -20,6 +21,7 @@ static CONSOLE_RELOAD_HANDLE: OnceLock<ReloadHandle> = OnceLock::new();
2021
pub fn init_telemetry(config: &TelemetryConfig) -> Result<()> {
2122
let TelemetryConfig { ref app_name, enable, ref console, ref remote, ref file, timezone } =
2223
*config;
24+
let resource = opentelemetry_sdk::Resource::builder().with_service_name(app_name.clone()).build();
2325

2426
if !enable {
2527
return Ok(());
@@ -94,24 +96,19 @@ pub fn init_telemetry(config: &TelemetryConfig) -> Result<()> {
9496
.transpose()?;
9597

9698
let RemoteConfig { enable, ref collector_endpoint } = *remote;
97-
let remote = enable
98-
.then(|| {
99-
let mut exporter = opentelemetry_otlp::new_exporter().tonic();
100-
if !remote.collector_endpoint.is_empty() {
101-
exporter = exporter.with_endpoint(collector_endpoint);
102-
}
103-
104-
let tracer = opentelemetry_otlp::new_pipeline()
105-
.tracing()
106-
.with_exporter(exporter)
107-
.install_batch(opentelemetry_sdk::runtime::Tokio)?
108-
.tracer(app_name.clone());
109-
110-
TraceResult::Ok(tracing_opentelemetry::layer().with_tracer(tracer))
111-
})
112-
.transpose()?;
11399

114-
Registry::default().with(console).with(file).with(remote).try_init()?;
100+
if enable && !collector_endpoint.is_empty() {
101+
let exporter = LogExporter::builder().with_tonic().with_endpoint(collector_endpoint).build()?;
102+
let logger_provider =
103+
SdkLoggerProvider::builder().with_resource(resource).with_batch_exporter(exporter).build();
104+
// Create a new OpenTelemetryTracingBridge using the above LoggerProvider.
105+
let otel_layer = OpenTelemetryTracingBridge::new(&logger_provider);
106+
107+
tracing_subscriber::registry().with(console).with(file).with(otel_layer).try_init()?;
108+
} else {
109+
tracing_subscriber::registry().with(console).with(file).try_init()?;
110+
};
111+
115112
Ok(())
116113
}
117114

0 commit comments

Comments
 (0)