diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 52ece9528..674e9e192 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -31,9 +31,7 @@ opentelemetry-otlp = { version = "0.27.0", optional = true, default-features = f "reqwest-client", "trace", ] } -# NOTE: If the version of `opentelemetry_sdk` is changed/updated, remember up update the -# `telemetry.sdk.version` value in `src/trace.rs:373` -opentelemetry_sdk = { version = "=0.27.1", optional = true, default-features = false, features = [ +opentelemetry_sdk = { version = "0.27.0", optional = true, default-features = false, features = [ "http", "logs", "metrics", diff --git a/runtime/src/telemetry.rs b/runtime/src/telemetry.rs index 3a19b03d7..3981c4f3c 100644 --- a/runtime/src/telemetry.rs +++ b/runtime/src/telemetry.rs @@ -16,15 +16,12 @@ use opentelemetry_sdk::{ logs::{LogRecord, Logger, LoggerProvider}, metrics::{MeterProviderBuilder, PeriodicReader, SdkMeterProvider, Temporality}, propagation::TraceContextPropagator, + resource::{Resource, ResourceDetector, TelemetryResourceDetector}, runtime, trace::TracerProvider, - Resource, }; use opentelemetry_semantic_conventions::{ - attribute::{ - CODE_FILEPATH, CODE_LINENO, SERVICE_NAME, SERVICE_VERSION, TELEMETRY_SDK_LANGUAGE, - TELEMETRY_SDK_NAME, TELEMETRY_SDK_VERSION, - }, + attribute::{CODE_FILEPATH, CODE_LINENO, SERVICE_NAME, SERVICE_VERSION}, SCHEMA_URL, }; use tracing::Event as TracingEvent; @@ -367,32 +364,35 @@ pub(crate) fn log_level_as_severity(level: log::Level) -> Severity { pub fn resource(crate_name: &'static str, package_version: &'static str) -> Resource { let project_name = std::env::var("SHUTTLE_PROJECT_NAME").ok(); - Resource::from_schema_url( - [ - Some(KeyValue::new( - SERVICE_NAME, - project_name.clone().unwrap_or_else(|| crate_name.into()), - )), - Some(KeyValue::new(SERVICE_VERSION, package_version)), - Some(KeyValue::new(TELEMETRY_SDK_NAME, "opentelemetry")), - Some(KeyValue::new(TELEMETRY_SDK_VERSION, "0.27.1")), - Some(KeyValue::new(TELEMETRY_SDK_LANGUAGE, "rust")), - Some(KeyValue::new("shuttle.project.crate.name", crate_name)), - Some(KeyValue::new( - "shuttle.deployment.env", - std::env::var("SHUTTLE_ENV") + // `TelemetryResourceDetector::detect()` automatically provides: + // - telemetry.sdk.name + // - telemetry.sdk.version + // - telemetry.sdk.language + TelemetryResourceDetector + .detect(Default::default()) + .merge(Box::new(Resource::from_schema_url( + [ + Some(KeyValue::new( + SERVICE_NAME, + project_name.clone().unwrap_or_else(|| crate_name.into()), + )), + Some(KeyValue::new(SERVICE_VERSION, package_version)), + Some(KeyValue::new("shuttle.project.crate.name", crate_name)), + Some(KeyValue::new( + "shuttle.deployment.env", + std::env::var("SHUTTLE_ENV") + .ok() + .unwrap_or("unknown".into()), + )), + std::env::var("SHUTTLE_PROJECT_ID") .ok() - .unwrap_or("unknown".into()), - )), - std::env::var("SHUTTLE_PROJECT_ID") - .ok() - .map(|value| KeyValue::new("shuttle.project.id", value)), - project_name.map(|value| KeyValue::new("shuttle.project.name", value)), - ] - .into_iter() - .flatten(), - SCHEMA_URL, - ) + .map(|value| KeyValue::new("shuttle.project.id", value)), + project_name.map(|value| KeyValue::new("shuttle.project.name", value)), + ] + .into_iter() + .flatten(), + SCHEMA_URL, + ))) } pub fn init_log_subscriber(endpoint: &Option, resource: Resource) -> LoggerProvider {