Skip to content

Commit b35a023

Browse files
feat: [SVLS-5992] support DD_URL and DD_DD_URL for metrics intake
1 parent 9ab8308 commit b35a023

File tree

5 files changed

+91
-48
lines changed

5 files changed

+91
-48
lines changed

bottlecap/Cargo.lock

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

bottlecap/Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ async-trait = { version = "0.1", default-features = false }
99
chrono = { version = "0.4", features = ["serde", "std", "now"], default-features = false }
1010
datadog-protos = { version = "0.1.0", default-features = false, git = "https://github.com/DataDog/saluki/" }
1111
ddsketch-agent = { version = "0.1.0", default-features = false, git = "https://github.com/DataDog/saluki/" }
12-
ddcommon = { git = "https://github.com/DataDog/libdatadog", rev = "dbc8869c6de4ccd78a770524d250420f397fc7b3" }
13-
datadog-trace-protobuf = { git = "https://github.com/DataDog/libdatadog", rev = "dbc8869c6de4ccd78a770524d250420f397fc7b3" }
14-
datadog-trace-utils = { git = "https://github.com/DataDog/libdatadog", rev = "dbc8869c6de4ccd78a770524d250420f397fc7b3" }
15-
datadog-trace-mini-agent = { git = "https://github.com/DataDog/libdatadog", rev = "dbc8869c6de4ccd78a770524d250420f397fc7b3" }
16-
datadog-trace-normalization = { git = "https://github.com/DataDog/libdatadog", rev = "dbc8869c6de4ccd78a770524d250420f397fc7b3" }
17-
datadog-trace-obfuscation = { git = "https://github.com/DataDog/libdatadog", rev = "dbc8869c6de4ccd78a770524d250420f397fc7b3" }
18-
dogstatsd = { git = "https://github.com/DataDog/libdatadog", rev = "dbc8869c6de4ccd78a770524d250420f397fc7b3" }
12+
ddcommon = { git = "https://github.com/DataDog/libdatadog", rev = "6e2d4462873e35e49a2c9befde958d96c4ed9de4" }
13+
datadog-trace-protobuf = { git = "https://github.com/DataDog/libdatadog", rev = "6e2d4462873e35e49a2c9befde958d96c4ed9de4" }
14+
datadog-trace-utils = { git = "https://github.com/DataDog/libdatadog", rev = "6e2d4462873e35e49a2c9befde958d96c4ed9de4" }
15+
datadog-trace-mini-agent = { git = "https://github.com/DataDog/libdatadog", rev = "6e2d4462873e35e49a2c9befde958d96c4ed9de4" }
16+
datadog-trace-normalization = { git = "https://github.com/DataDog/libdatadog", rev = "6e2d4462873e35e49a2c9befde958d96c4ed9de4" }
17+
datadog-trace-obfuscation = { git = "https://github.com/DataDog/libdatadog", rev = "6e2d4462873e35e49a2c9befde958d96c4ed9de4" }
18+
dogstatsd = { git = "https://github.com/DataDog/libdatadog", rev = "6e2d4462873e35e49a2c9befde958d96c4ed9de4" }
1919
figment = { version = "0.10", default-features = false, features = ["yaml", "env"] }
2020
hyper = { version = "0.14", default-features = false, features = ["server"] }
2121
lazy_static = { version = "1.5", default-features = false }

bottlecap/src/bin/bottlecap/main.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ use decrypt::resolve_secrets;
4646
use dogstatsd::{
4747
aggregator::Aggregator as MetricsAggregator,
4848
constants::CONTEXTS,
49+
datadog::{DdDdUrl, DdUrl, MetricsIntakeUrlPrefix, MetricsIntakeUrlPrefixOverride, Site},
4950
dogstatsd::{DogStatsD, DogStatsDConfig},
50-
flusher::{build_fqdn_metrics, Flusher as MetricsFlusher},
51+
flusher::{Flusher as MetricsFlusher, FlusherConfig as MetricsFlusherConfig},
5152
metric::{SortedTags, EMPTY_TAGS},
5253
};
5354
use reqwest::Client;
@@ -284,13 +285,27 @@ async fn extension_loop_active(
284285
)
285286
.expect("failed to create aggregator"),
286287
));
287-
let mut metrics_flusher = MetricsFlusher::new(
288-
resolved_api_key.clone(),
289-
Arc::clone(&metrics_aggr),
290-
build_fqdn_metrics(config.site.clone()),
291-
config.https_proxy.clone(),
292-
Duration::from_secs(config.flush_timeout),
293-
);
288+
let metrics_intake_url_prefix = MetricsIntakeUrlPrefix::new(
289+
Some(Site::new(config.site.clone()).expect("failed to create site")),
290+
MetricsIntakeUrlPrefixOverride::maybe_new(
291+
config
292+
.url
293+
.clone()
294+
.map(|url| DdUrl::new(url).expect("failed to create dd url")),
295+
config
296+
.dd_url
297+
.clone()
298+
.map(|dd_url| DdDdUrl::new(dd_url).expect("failed to create dd dd url")),
299+
),
300+
)
301+
.expect("failed to create intake url prefix");
302+
let mut metrics_flusher = MetricsFlusher::new(MetricsFlusherConfig {
303+
api_key: resolved_api_key.clone(),
304+
aggregator: Arc::clone(&metrics_aggr),
305+
metrics_intake_url_prefix,
306+
https_proxy: config.https_proxy.clone(),
307+
timeout: Duration::from_secs(config.flush_timeout),
308+
});
294309

295310
let trace_flusher = Arc::new(trace_flusher::ServerlessTraceFlusher {
296311
buffer: Arc::new(TokioMutex::new(Vec::new())),

bottlecap/src/config/mod.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ pub struct FallbackConfig {
3939
otlp_config_receiver_protocols_http_endpoint: Option<String>,
4040
otlp_config_receiver_protocols_grpc_endpoint: Option<String>,
4141
// intake urls
42-
url: Option<String>,
43-
dd_url: Option<String>,
4442
logs_config_logs_dd_url: Option<String>,
4543
// APM, as opposed to logs, does not use the `apm_config` prefix for env vars
4644
apm_dd_url: Option<String>,
@@ -107,6 +105,11 @@ pub struct Config {
107105
pub trace_propagation_style_extract: Vec<TracePropagationStyle>,
108106
pub trace_propagation_extract_first: bool,
109107
pub trace_propagation_http_baggage_enabled: bool,
108+
// Intake URLs
109+
// These two are for metrics intake. The official config is `DD_DD_URL` but `DD_URL` can also
110+
// be used for backwards compatibility. `DD_DD_URL` takes precedence.
111+
pub url: Option<String>,
112+
pub dd_url: Option<String>,
110113
}
111114

112115
impl Default for Config {
@@ -142,6 +145,9 @@ impl Default for Config {
142145
trace_propagation_style_extract: vec![],
143146
trace_propagation_extract_first: false,
144147
trace_propagation_http_baggage_enabled: false,
148+
// Intake URLs
149+
url: None,
150+
dd_url: None,
145151
}
146152
}
147153
}
@@ -208,9 +214,7 @@ fn fallback(figment: &Figment, yaml_figment: &Figment) -> Result<(), ConfigError
208214
}
209215

210216
// Intake URLs
211-
if config.url.is_some()
212-
|| config.dd_url.is_some()
213-
|| config.logs_config_logs_dd_url.is_some()
217+
if config.logs_config_logs_dd_url.is_some()
214218
|| config.apm_dd_url.is_some()
215219
|| yaml_config
216220
.logs_config

bottlecap/tests/metrics_integration_test.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use bottlecap::config::Config;
22
use bottlecap::metrics::enhanced::lambda::Lambda as enhanced_metrics;
33
use dogstatsd::aggregator::Aggregator as MetricsAggregator;
4-
use dogstatsd::flusher::Flusher as MetricsFlusher;
4+
use dogstatsd::datadog::{DdDdUrl, MetricsIntakeUrlPrefix, MetricsIntakeUrlPrefixOverride};
5+
use dogstatsd::flusher::{Flusher as MetricsFlusher, FlusherConfig as MetricsFlusherConfig};
56
use dogstatsd::metric::SortedTags;
67
use httpmock::prelude::*;
78
use std::sync::{Arc, Mutex};
@@ -36,13 +37,20 @@ async fn test_enhanced_metrics() {
3637
MetricsAggregator::new(SortedTags::parse("aTagKey:aTagValue").unwrap(), 1024)
3738
.expect("failed to create aggregator"),
3839
));
39-
let mut metrics_flusher = MetricsFlusher::new(
40-
dd_api_key.to_string(),
41-
metrics_aggr.clone(),
42-
server.base_url(),
43-
None,
44-
std::time::Duration::from_secs(5),
45-
);
40+
let mut metrics_flusher = MetricsFlusher::new(MetricsFlusherConfig {
41+
api_key: dd_api_key.to_string(),
42+
aggregator: metrics_aggr.clone(),
43+
metrics_intake_url_prefix: MetricsIntakeUrlPrefix::new(
44+
None,
45+
MetricsIntakeUrlPrefixOverride::maybe_new(
46+
None,
47+
Some(DdDdUrl::new(server.base_url()).expect("failed to create dd url")),
48+
),
49+
)
50+
.expect("failed to create metrics intake url prefix"),
51+
https_proxy: None,
52+
timeout: std::time::Duration::from_secs(5),
53+
});
4654
let lambda_enhanced_metrics =
4755
enhanced_metrics::new(Arc::clone(&metrics_aggr), Arc::clone(&arc_config));
4856

0 commit comments

Comments
 (0)