Skip to content

Commit 006cb8e

Browse files
committed
implement trace stats for serverless compat
1 parent d8d873f commit 006cb8e

11 files changed

Lines changed: 389 additions & 24 deletions

File tree

Cargo.lock

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

crates/datadog-serverless-compat/src/main.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ use zstd::zstd_safe::CompressionLevel;
1818

1919
use datadog_trace_agent::{
2020
aggregator::TraceAggregator,
21-
config, env_verifier, mini_agent, proxy_flusher, stats_flusher, stats_processor,
21+
config, env_verifier, mini_agent, proxy_flusher, stats_concentrator_service, stats_flusher,
22+
stats_generator, stats_processor,
2223
trace_flusher::{self, TraceFlusher},
2324
trace_processor,
2425
};
@@ -107,6 +108,12 @@ pub async fn main() {
107108
let https_proxy = env::var("DD_PROXY_HTTPS")
108109
.or_else(|_| env::var("HTTPS_PROXY"))
109110
.ok();
111+
112+
let dd_serverless_stats_computation_enabled =
113+
env::var("DD_SERVERLESS_STATS_COMPUTATION_ENABLED")
114+
.map(|val| val.to_lowercase() != "false")
115+
.unwrap_or(true);
116+
110117
debug!("Starting serverless trace mini agent");
111118

112119
let env_filter = format!("h2=off,hyper=off,rustls=off,{}", log_level);
@@ -132,11 +139,6 @@ pub async fn main() {
132139

133140
let env_verifier = Arc::new(env_verifier::ServerlessEnvVerifier::default());
134141

135-
let trace_processor = Arc::new(trace_processor::ServerlessTraceProcessor {});
136-
137-
let stats_flusher = Arc::new(stats_flusher::ServerlessStatsFlusher {});
138-
let stats_processor = Arc::new(stats_processor::ServerlessStatsProcessor {});
139-
140142
let config = match config::Config::new() {
141143
Ok(c) => Arc::new(c),
142144
Err(e) => {
@@ -145,6 +147,30 @@ pub async fn main() {
145147
}
146148
};
147149

150+
// Initialize stats concentrator service and generator conditionally
151+
let (stats_concentrator_handle, stats_generator) = if dd_serverless_stats_computation_enabled {
152+
info!("Serverless stats computation enabled");
153+
let (stats_concentrator_service, stats_concentrator_handle) =
154+
stats_concentrator_service::StatsConcentratorService::new(config.clone());
155+
tokio::spawn(stats_concentrator_service.run());
156+
let stats_generator = Arc::new(stats_generator::StatsGenerator::new(
157+
stats_concentrator_handle.clone(),
158+
));
159+
(Some(stats_concentrator_handle), Some(stats_generator))
160+
} else {
161+
info!("Serverless stats computation disabled");
162+
(None, None)
163+
};
164+
165+
let trace_processor = Arc::new(trace_processor::ServerlessTraceProcessor {
166+
stats_generator: stats_generator.clone(),
167+
});
168+
169+
let stats_flusher = Arc::new(stats_flusher::ServerlessStatsFlusher {
170+
stats_concentrator: stats_concentrator_handle.clone(),
171+
});
172+
let stats_processor = Arc::new(stats_processor::ServerlessStatsProcessor {});
173+
148174
let trace_aggregator = Arc::new(TokioMutex::new(TraceAggregator::default()));
149175
let trace_flusher = Arc::new(trace_flusher::ServerlessTraceFlusher::new(
150176
trace_aggregator,
@@ -161,6 +187,8 @@ pub async fn main() {
161187
stats_processor,
162188
stats_flusher,
163189
proxy_flusher,
190+
stats_concentrator: stats_concentrator_handle,
191+
stats_generator,
164192
});
165193

166194
tokio::spawn(async move {

crates/datadog-trace-agent/Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,19 @@ async-trait = "0.1.64"
2424
tracing = { version = "0.1", default-features = false }
2525
serde = { version = "1.0.145", features = ["derive"] }
2626
serde_json = "1.0"
27+
thiserror = { version = "1.0.58", default-features = false }
2728
libdd-common = { git = "https://github.com/DataDog/libdatadog", rev = "8c88979985154d6d97c0fc2ca9039682981eacad" }
2829
libdd-trace-protobuf = { git = "https://github.com/DataDog/libdatadog", rev = "8c88979985154d6d97c0fc2ca9039682981eacad" }
30+
libdd-trace-stats = { git = "https://github.com/DataDog/libdatadog", rev = "8c88979985154d6d97c0fc2ca9039682981eacad" }
2931
libdd-trace-utils = { git = "https://github.com/DataDog/libdatadog", rev = "8c88979985154d6d97c0fc2ca9039682981eacad", features = [
3032
"mini_agent",
3133
] }
3234
libdd-trace-obfuscation = { git = "https://github.com/DataDog/libdatadog", rev = "8c88979985154d6d97c0fc2ca9039682981eacad" }
3335
datadog-fips = { path = "../datadog-fips" }
34-
reqwest = { version = "0.12.23", features = ["json", "http2"], default-features = false }
36+
reqwest = { version = "0.12.23", features = [
37+
"json",
38+
"http2",
39+
], default-features = false }
3540
bytes = "1.10.1"
3641

3742
[dev-dependencies]

crates/datadog-trace-agent/src/config.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ pub struct Config {
109109
/// timeout for environment verification, in milliseconds
110110
pub verify_env_timeout_ms: u64,
111111
pub proxy_url: Option<String>,
112+
pub service: Option<String>,
113+
pub env: Option<String>,
114+
pub version: Option<String>,
112115
}
113116

114117
impl Config {
@@ -251,6 +254,9 @@ impl Config {
251254
.or_else(|_| env::var("HTTPS_PROXY"))
252255
.ok(),
253256
tags,
257+
service: env::var("DD_SERVICE").ok(),
258+
env: env::var("DD_ENV").ok(),
259+
version: env::var("DD_VERSION").ok(),
254260
})
255261
}
256262
}
@@ -721,6 +727,9 @@ pub mod test_helpers {
721727
proxy_request_retry_backoff_base_ms: 100,
722728
verify_env_timeout_ms: 1000,
723729
proxy_url: None,
730+
service: None,
731+
env: None,
732+
version: None,
724733
}
725734
}
726735
}

crates/datadog-trace-agent/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ pub mod env_verifier;
1313
pub mod http_utils;
1414
pub mod mini_agent;
1515
pub mod proxy_flusher;
16+
pub mod stats_concentrator_service;
1617
pub mod stats_flusher;
18+
pub mod stats_generator;
1719
pub mod stats_processor;
1820
pub mod trace_flusher;
1921
pub mod trace_processor;

crates/datadog-trace-agent/src/mini_agent.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ use crate::proxy_flusher::{ProxyFlusher, ProxyRequest};
1919
#[cfg(all(windows, feature = "windows-pipes"))]
2020
use tokio::net::windows::named_pipe::ServerOptions;
2121

22-
use crate::{config, env_verifier, stats_flusher, stats_processor, trace_flusher, trace_processor};
22+
use crate::{
23+
config, env_verifier, stats_concentrator_service, stats_flusher, stats_generator,
24+
stats_processor, trace_flusher, trace_processor,
25+
};
2326
use libdd_trace_protobuf::pb;
2427
use libdd_trace_utils::trace_utils;
2528
use libdd_trace_utils::trace_utils::SendData;
@@ -40,6 +43,8 @@ pub struct MiniAgent {
4043
pub stats_flusher: Arc<dyn stats_flusher::StatsFlusher + Send + Sync>,
4144
pub env_verifier: Arc<dyn env_verifier::EnvVerifier + Send + Sync>,
4245
pub proxy_flusher: Arc<ProxyFlusher>,
46+
pub stats_concentrator: Option<stats_concentrator_service::StatsConcentratorHandle>,
47+
pub stats_generator: Option<Arc<stats_generator::StatsGenerator>>,
4348
}
4449

4550
impl MiniAgent {

0 commit comments

Comments
 (0)