diff --git a/bottlecap/Cargo.lock b/bottlecap/Cargo.lock index 61b5cf23d..3aff1591e 100644 --- a/bottlecap/Cargo.lock +++ b/bottlecap/Cargo.lock @@ -501,6 +501,7 @@ dependencies = [ "datadog-fips", "datadog-opentelemetry", "datadog-protos", + "datadog-serverless-logging", "ddsketch-agent", "dogstatsd", "figment", @@ -868,7 +869,7 @@ dependencies = [ [[package]] name = "datadog-agent-config" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=8156757470d0843a99fc5d19809ae021cd2c7178#8156757470d0843a99fc5d19809ae021cd2c7178" +source = "git+https://github.com/DataDog/serverless-components?rev=9538fc7f08811e8912a7ce32c2ee7b887f90e9e2#9538fc7f08811e8912a7ce32c2ee7b887f90e9e2" dependencies = [ "datadog-opentelemetry", "dogstatsd", @@ -886,12 +887,12 @@ dependencies = [ [[package]] name = "datadog-agent-trace-sampler" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=8156757470d0843a99fc5d19809ae021cd2c7178#8156757470d0843a99fc5d19809ae021cd2c7178" +source = "git+https://github.com/DataDog/serverless-components?rev=9538fc7f08811e8912a7ce32c2ee7b887f90e9e2#9538fc7f08811e8912a7ce32c2ee7b887f90e9e2" [[package]] name = "datadog-fips" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=8156757470d0843a99fc5d19809ae021cd2c7178#8156757470d0843a99fc5d19809ae021cd2c7178" +source = "git+https://github.com/DataDog/serverless-components?rev=9538fc7f08811e8912a7ce32c2ee7b887f90e9e2#9538fc7f08811e8912a7ce32c2ee7b887f90e9e2" dependencies = [ "reqwest", "rustls", @@ -951,6 +952,14 @@ dependencies = [ "tonic-build", ] +[[package]] +name = "datadog-serverless-logging" +version = "0.1.0" +source = "git+https://github.com/DataDog/serverless-components?rev=9538fc7f08811e8912a7ce32c2ee7b887f90e9e2#9538fc7f08811e8912a7ce32c2ee7b887f90e9e2" +dependencies = [ + "tracing-subscriber", +] + [[package]] name = "ddsketch-agent" version = "0.1.0" @@ -1070,7 +1079,7 @@ dependencies = [ [[package]] name = "dogstatsd" version = "0.1.0" -source = "git+https://github.com/DataDog/serverless-components?rev=8156757470d0843a99fc5d19809ae021cd2c7178#8156757470d0843a99fc5d19809ae021cd2c7178" +source = "git+https://github.com/DataDog/serverless-components?rev=9538fc7f08811e8912a7ce32c2ee7b887f90e9e2#9538fc7f08811e8912a7ce32c2ee7b887f90e9e2" dependencies = [ "datadog-protos", "ddsketch-agent", diff --git a/bottlecap/Cargo.toml b/bottlecap/Cargo.toml index 07b8f8e0b..a6e7bf973 100644 --- a/bottlecap/Cargo.toml +++ b/bottlecap/Cargo.toml @@ -95,10 +95,11 @@ libdd-trace-normalization = "3.0.1" libdd-trace-obfuscation = { version = "6.0.0", default-features = false } libdd-trace-stats = { version = "7.0.0", default-features = false } datadog-opentelemetry = { version = "0.5.2", default-features = false, features = ["_unstable_propagation"] } -dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "8156757470d0843a99fc5d19809ae021cd2c7178", default-features = false } -datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "8156757470d0843a99fc5d19809ae021cd2c7178", default-features = false } -datadog-agent-config = { git = "https://github.com/DataDog/serverless-components", rev = "8156757470d0843a99fc5d19809ae021cd2c7178", default-features = false } -datadog-agent-trace-sampler = { git = "https://github.com/DataDog/serverless-components", rev = "8156757470d0843a99fc5d19809ae021cd2c7178", default-features = false } +dogstatsd = { git = "https://github.com/DataDog/serverless-components", rev = "9538fc7f08811e8912a7ce32c2ee7b887f90e9e2", default-features = false } +datadog-fips = { git = "https://github.com/DataDog/serverless-components", rev = "9538fc7f08811e8912a7ce32c2ee7b887f90e9e2", default-features = false } +datadog-agent-config = { git = "https://github.com/DataDog/serverless-components", rev = "9538fc7f08811e8912a7ce32c2ee7b887f90e9e2", default-features = false } +datadog-agent-trace-sampler = { git = "https://github.com/DataDog/serverless-components", rev = "9538fc7f08811e8912a7ce32c2ee7b887f90e9e2", default-features = false } +datadog-serverless-logging = { git = "https://github.com/DataDog/serverless-components", rev = "9538fc7f08811e8912a7ce32c2ee7b887f90e9e2", default-features = false } libddwaf = { version = "1.28.1", git = "https://github.com/DataDog/libddwaf-rust", rev = "d1534a158d976bd4f747bf9fcc58e0712d2d17fc", default-features = false, features = ["serde"] } [dev-dependencies] diff --git a/bottlecap/LICENSE-3rdparty.csv b/bottlecap/LICENSE-3rdparty.csv index 45e5832de..3f02c8629 100644 --- a/bottlecap/LICENSE-3rdparty.csv +++ b/bottlecap/LICENSE-3rdparty.csv @@ -52,6 +52,7 @@ datadog-agent-trace-sampler,https://github.com/DataDog/serverless-components,Apa datadog-fips,https://github.com/DataDog/serverless-components,Apache-2.0,The datadog-fips Authors datadog-opentelemetry,https://github.com/DataDog/dd-trace-rs/tree/main/datadog-opentelemetry,Apache-2.0,Datadog Inc. datadog-protos,https://github.com/DataDog/saluki,Apache-2.0,The datadog-protos Authors +datadog-serverless-logging,https://github.com/DataDog/serverless-components,Apache-2.0,The datadog-serverless-logging Authors ddsketch-agent,https://github.com/DataDog/saluki,Apache-2.0,The ddsketch-agent Authors defmt,https://github.com/knurling-rs/defmt,MIT OR Apache-2.0,The Knurling-rs developers defmt-macros,https://github.com/knurling-rs/defmt,MIT OR Apache-2.0,The Knurling-rs developers diff --git a/bottlecap/src/bin/bottlecap/main.rs b/bottlecap/src/bin/bottlecap/main.rs index 7aca77a3f..81c47d3fd 100644 --- a/bottlecap/src/bin/bottlecap/main.rs +++ b/bottlecap/src/bin/bottlecap/main.rs @@ -81,6 +81,7 @@ use bottlecap::{ }, }; use datadog_fips::reqwest_adapter::create_reqwest_client_builder; +use datadog_serverless_logging::{LEVEL_BY_TARGET_ENV_VAR, build_env_filter}; use decrypt::{resolve_additional_endpoints_secrets, resolve_secrets}; use dogstatsd::{ aggregator::{ @@ -103,7 +104,6 @@ use tokio::time::Instant; use tokio::{sync::Mutex as TokioMutex, sync::mpsc::Sender}; use tokio_util::sync::CancellationToken; use tracing::{debug, error, warn}; -use tracing_subscriber::EnvFilter; use ustr::Ustr; fn resolve_dsm_service( @@ -239,13 +239,15 @@ fn enable_logging_subsystem() { ) .unwrap_or(LogLevel::Info); - let env_filter = format!( - "h2=off,hyper=off,reqwest=off,rustls=off,datadog-trace-mini-agent=off,{log_level:?}", - ); + let (env_filter, invalid_entries) = build_env_filter( + &format!( + "h2=off,hyper=off,reqwest=off,rustls=off,datadog-trace-mini-agent=off,{log_level:?}" + ), + &std::env::var(LEVEL_BY_TARGET_ENV_VAR).unwrap_or_default(), + ) + .expect("could not parse log level in configuration"); let subscriber = tracing_subscriber::fmt::Subscriber::builder() - .with_env_filter( - EnvFilter::try_new(env_filter).expect("could not parse log level in configuration"), - ) + .with_env_filter(env_filter) .with_level(true) .with_thread_names(false) .with_thread_ids(false) @@ -257,6 +259,9 @@ fn enable_logging_subsystem() { .finish(); tracing::subscriber::set_global_default(subscriber).expect("setting default subscriber failed"); + if !invalid_entries.is_empty() { + warn!("Ignoring invalid {LEVEL_BY_TARGET_ENV_VAR} entries: {invalid_entries:?}"); + } debug!("Logging subsystem enabled"); } diff --git a/bottlecap/src/logger.rs b/bottlecap/src/logger.rs index 1752e2f97..8acf8ce50 100644 --- a/bottlecap/src/logger.rs +++ b/bottlecap/src/logger.rs @@ -6,6 +6,9 @@ use tracing_subscriber::fmt::{ }; use tracing_subscriber::registry::LookupSpan; +// `DD_LOG_LEVEL_BY_TARGET` matches a target by text prefix, so no target name may start with +// another one: an entry for `trace_flush` would also match `trace_flush_duration`. + /// Tracing target for the duration of each cold start step. pub const COLD_START_DURATION: &str = "cold_start_duration";