Skip to content

Commit a3418d3

Browse files
committed
feat: Switch to dogstatsd exporter
Switching to this exporter will let us get better distribution data.
1 parent f93ff82 commit a3418d3

File tree

3 files changed

+147
-75
lines changed

3 files changed

+147
-75
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ serde_json = "1.0.145"
2121
flate2 = "1.0.30"
2222
futures = "0.3.31"
2323
metrics = "0.24.2"
24-
metrics-exporter-statsd = "0.9.0"
2524
sentry = { version = "0.45.0", features = ["backtrace", "contexts", "debug-images", "panic", "transport", "tracing", "logs"] }
2625
tracing = "0.1.41"
2726
tracing-subscriber = { version = "0.3.20", features = ["std", "env-filter", "json"] }
2827
figment = { version = "0.10.19", features = ["yaml", "test", "env"] }
2928
brotli = "8.0.2"
3029
zstd = "0.13.3"
30+
metrics-exporter-dogstatsd = "0.9.6"

src/metrics.rs

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,39 @@
11
use crate::config::ConfigData;
2-
use metrics_exporter_statsd::StatsdBuilder;
3-
use std::{
4-
collections::BTreeMap,
5-
net::{SocketAddr, ToSocketAddrs},
6-
};
2+
use metrics::Label;
3+
use metrics_exporter_dogstatsd::DogStatsDBuilder;
4+
use std::collections::BTreeMap;
75

86
pub struct MetricsConfig {
97
/// Metrics collector host/port.
108
/// Recording metrics is optional
11-
pub statsd_addr: Option<SocketAddr>,
9+
pub statsd_addr: Option<String>,
1210

1311
/// Map of default tags that should be applied to all metrics.
1412
pub default_tags: BTreeMap<String, String>,
1513
}
1614

1715
impl MetricsConfig {
1816
pub fn from_config(config: &ConfigData) -> Self {
19-
let statsd_addr = if let Some(statsd_addr) = config.statsd_addr.clone() {
20-
let socket_addrs = statsd_addr
21-
.to_socket_addrs()
22-
.expect("Could not resolve into a socket address");
23-
let [statsd_addr] = socket_addrs.as_slice() else {
24-
unreachable!("Expect statsd_addr to resolve into a single socket address");
25-
};
26-
Some(*statsd_addr)
27-
} else {
28-
None
29-
};
30-
3117
MetricsConfig {
32-
statsd_addr,
18+
statsd_addr: config.statsd_addr.clone(),
3319
default_tags: config.default_metrics_tags.clone().unwrap_or_default(),
3420
}
3521
}
3622
}
3723

3824
pub fn init(metrics_config: MetricsConfig) {
3925
if let Some(address) = metrics_config.statsd_addr {
40-
let builder = StatsdBuilder::from(address.ip().to_string(), address.port());
26+
let labels = metrics_config.default_tags.into_iter()
27+
.map(|(key, value)| Label::new(key, value))
28+
.collect();
4129

42-
let recorder = metrics_config
43-
.default_tags
44-
.into_iter()
45-
.fold(
46-
builder.with_queue_size(5000).with_buffer_size(1024),
47-
|builder, (key, value)| builder.with_default_tag(key, value),
48-
)
49-
.build(Some("sentrymirror"))
50-
.expect("Could not create StatsdRecorder");
30+
let recorder = DogStatsDBuilder::default()
31+
.with_remote_address(address)
32+
.expect("Failed to parse metrics address")
33+
.set_global_prefix("sentrymirror")
34+
.with_global_labels(labels)
35+
.build()
36+
.expect("Could not create DogStatsD exporter");
5137

5238
metrics::set_global_recorder(recorder).expect("Could not set global metrics recorder")
5339
}

0 commit comments

Comments
 (0)