Skip to content

Commit 7cb7f00

Browse files
authored
feat(statsd): Emit histograms and timers as distributions (#5378)
1 parent 1e28dca commit 7cb7f00

File tree

17 files changed

+116
-106
lines changed

17 files changed

+116
-106
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## Unreleased
44

5+
**Breaking Changes**:
6+
7+
- Switch Statsd histogram metrics to distribution metrics. ([#5378](https://github.com/getsentry/relay/pull/5378))
8+
59
**Features**:
610

711
- Support comparing release versions without build code. ([#5376](https://github.com/getsentry/relay/pull/5376))

relay-cardinality/src/redis/limiter.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::{
1212
script::{CardinalityScript, CardinalityScriptResult, Status},
1313
state::{LimitState, RedisEntry},
1414
},
15-
statsd::{CardinalityLimiterHistograms, CardinalityLimiterTimers},
15+
statsd::{CardinalityLimiterDistributions, CardinalityLimiterTimers},
1616
};
1717
use relay_common::time::UnixTimestamp;
1818

@@ -78,7 +78,7 @@ impl RedisSetLimiter {
7878
}
7979

8080
metric!(
81-
histogram(CardinalityLimiterHistograms::RedisCheckHashes) = num_hashes,
81+
distribution(CardinalityLimiterDistributions::RedisCheckHashes) = num_hashes,
8282
id = state.id(),
8383
);
8484

@@ -90,7 +90,7 @@ impl RedisSetLimiter {
9090
.zip(results)
9191
.inspect(|(_, result)| {
9292
metric!(
93-
histogram(CardinalityLimiterHistograms::RedisSetCardinality) =
93+
distribution(CardinalityLimiterDistributions::RedisSetCardinality) =
9494
result.cardinality as u64,
9595
id = state.id(),
9696
);

relay-cardinality/src/statsd.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use relay_statsd::TimerMetric;
22
#[cfg(feature = "redis")]
3-
use relay_statsd::{CounterMetric, HistogramMetric, SetMetric};
3+
use relay_statsd::{CounterMetric, DistributionMetric, SetMetric};
44

55
/// Counter metrics for the Relay Cardinality Limiter.
66
#[cfg(feature = "redis")]
@@ -87,7 +87,7 @@ impl TimerMetric for CardinalityLimiterTimers {
8787
}
8888

8989
#[cfg(feature = "redis")]
90-
pub enum CardinalityLimiterHistograms {
90+
pub enum CardinalityLimiterDistributions {
9191
/// Amount of hashes sent to Redis to check the cardinality.
9292
///
9393
/// This metric is tagged with:
@@ -103,7 +103,7 @@ pub enum CardinalityLimiterHistograms {
103103
}
104104

105105
#[cfg(feature = "redis")]
106-
impl HistogramMetric for CardinalityLimiterHistograms {
106+
impl DistributionMetric for CardinalityLimiterDistributions {
107107
fn name(&self) -> &'static str {
108108
match *self {
109109
#[cfg(feature = "redis")]

relay-kafka/src/producer/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use crate::config::{KafkaParams, KafkaTopic};
1818
use crate::debounced::Debounced;
1919
use crate::limits::KafkaRateLimits;
2020
use crate::producer::utils::KafkaHeaders;
21-
use crate::statsd::{KafkaCounters, KafkaGauges, KafkaHistograms};
21+
use crate::statsd::{KafkaCounters, KafkaDistributions, KafkaGauges};
2222

2323
mod utils;
2424
use utils::{Context, ThreadedProducer};
@@ -217,7 +217,7 @@ impl Producer {
217217
let producer_name = producer.context().producer_name();
218218

219219
metric!(
220-
histogram(KafkaHistograms::KafkaMessageSize) = payload.len() as u64,
220+
distribution(KafkaDistributions::KafkaMessageSize) = payload.len() as u64,
221221
variant = variant,
222222
topic = topic_name,
223223
producer_name = producer_name

relay-kafka/src/statsd.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
//! # Results in: producer_name="unknown"
3333
//! ```
3434
35-
use relay_statsd::{CounterMetric, GaugeMetric, HistogramMetric};
35+
use relay_statsd::{CounterMetric, DistributionMetric, GaugeMetric};
3636

3737
pub enum KafkaCounters {
3838
/// Number of messages that failed to be enqueued in the Kafka producer's memory buffer.
@@ -84,7 +84,7 @@ impl CounterMetric for KafkaCounters {
8484
}
8585
}
8686

87-
pub enum KafkaHistograms {
87+
pub enum KafkaDistributions {
8888
/// Size of emitted kafka message in bytes.
8989
///
9090
/// This metric is tagged with:
@@ -94,7 +94,7 @@ pub enum KafkaHistograms {
9494
KafkaMessageSize,
9595
}
9696

97-
impl HistogramMetric for KafkaHistograms {
97+
impl DistributionMetric for KafkaDistributions {
9898
fn name(&self) -> &'static str {
9999
match self {
100100
Self::KafkaMessageSize => "kafka.message_size",

relay-server/src/endpoints/common.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::service::ServiceState;
1414
use crate::services::buffer::ProjectKeyPair;
1515
use crate::services::outcome::{DiscardItemType, DiscardReason, Outcome};
1616
use crate::services::processor::{BucketSource, MetricData, ProcessMetrics};
17-
use crate::statsd::{RelayCounters, RelayHistograms};
17+
use crate::statsd::{RelayCounters, RelayDistributions};
1818
use crate::utils::{self, ApiErrorResponse, FormDataIter};
1919

2020
#[derive(Clone, Copy, Debug, thiserror::Error)]
@@ -380,7 +380,7 @@ fn emit_envelope_metrics(envelope: &Envelope) {
380380
let is_container = if item.is_container() { "true" } else { "false" };
381381

382382
metric!(
383-
histogram(RelayHistograms::EnvelopeItemSize) = item.payload().len() as u64,
383+
distribution(RelayDistributions::EnvelopeItemSize) = item.payload().len() as u64,
384384
item_type = item_type,
385385
is_container = is_container,
386386
);

relay-server/src/processing/utils/event.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ use crate::envelope::{Envelope, EnvelopeHeaders, Item};
3636
use crate::processing::Context;
3737
use crate::services::processor::{MINIMUM_CLOCK_DRIFT, ProcessingError};
3838
use crate::services::projects::project::ProjectInfo;
39-
use crate::statsd::{RelayCounters, RelayHistograms, RelayTimers};
40-
use crate::utils::{self};
39+
use crate::statsd::{RelayCounters, RelayDistributions, RelayTimers};
40+
use crate::utils;
4141

4242
/// Returns the data category if there is an event.
4343
///
@@ -130,7 +130,7 @@ pub fn finalize<'a>(
130130

131131
let span_count = inner_event.spans.value().map(Vec::len).unwrap_or(0) as u64;
132132
metric!(
133-
histogram(RelayHistograms::EventSpans) = span_count,
133+
distribution(RelayDistributions::EventSpans) = span_count,
134134
sdk = client_name,
135135
platform = platform,
136136
);

relay-server/src/services/buffer/envelope_buffer/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use crate::services::buffer::envelope_store::sqlite::SqliteEnvelopeStoreError;
2020
use crate::services::buffer::stack_provider::memory::MemoryStackProvider;
2121
use crate::services::buffer::stack_provider::sqlite::SqliteStackProvider;
2222
use crate::services::buffer::stack_provider::{StackCreationType, StackProvider};
23-
use crate::statsd::{RelayGauges, RelayHistograms, RelayTimers};
23+
use crate::statsd::{RelayDistributions, RelayGauges, RelayTimers};
2424
use crate::utils::MemoryChecker;
2525

2626
/// Polymorphic envelope buffering interface.
@@ -79,7 +79,7 @@ impl PolymorphicEnvelopeBuffer {
7979
/// Adds an envelope to the buffer.
8080
pub async fn push(&mut self, envelope: Box<Envelope>) -> Result<(), EnvelopeBufferError> {
8181
relay_statsd::metric!(
82-
histogram(RelayHistograms::BufferEnvelopeBodySize) =
82+
distribution(RelayDistributions::BufferEnvelopeBodySize) =
8383
envelope.items().map(Item::len).sum::<usize>() as u64,
8484
partition_id = self.partition_tag()
8585
);
@@ -576,7 +576,7 @@ where
576576
false => "false",
577577
};
578578
relay_statsd::metric!(
579-
histogram(RelayHistograms::BufferEnvelopesCount) = total_count,
579+
distribution(RelayDistributions::BufferEnvelopesCount) = total_count,
580580
initialized = initialized,
581581
stack_type = self.stack_provider.stack_type(),
582582
partition_id = &self.partition_tag

relay-server/src/services/buffer/envelope_store/sqlite.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::envelope::EnvelopeError;
88

99
use crate::Envelope;
1010
use crate::services::buffer::common::ProjectKeyPair;
11-
use crate::statsd::{RelayGauges, RelayHistograms, RelayTimers};
11+
use crate::statsd::{RelayDistributions, RelayGauges, RelayTimers};
1212
use bytes::{Buf, Bytes};
1313
use chrono::{DateTime, Utc};
1414
use futures::stream::StreamExt;
@@ -141,15 +141,15 @@ impl<'a> TryFrom<&'a Envelope> for DatabaseEnvelope {
141141

142142
let serialized_envelope = value.to_vec()?;
143143
relay_statsd::metric!(
144-
histogram(RelayHistograms::BufferEnvelopeSize) = serialized_envelope.len() as u64
144+
distribution(RelayDistributions::BufferEnvelopeSize) = serialized_envelope.len() as u64
145145
);
146146

147147
let encoded_envelope =
148148
relay_statsd::metric!(timer(RelayTimers::BufferEnvelopeCompression), {
149149
zstd::encode_all(serialized_envelope.as_slice(), Self::COMPRESSION_LEVEL)?
150150
});
151151
relay_statsd::metric!(
152-
histogram(RelayHistograms::BufferEnvelopeSizeCompressed) =
152+
distribution(RelayDistributions::BufferEnvelopeSizeCompressed) =
153153
encoded_envelope.len() as u64
154154
);
155155

relay-server/src/services/processor.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ use crate::services::projects::project::{ProjectInfo, ProjectState};
6767
use crate::services::upstream::{
6868
SendRequest, Sign, SignatureType, UpstreamRelay, UpstreamRequest, UpstreamRequestError,
6969
};
70-
use crate::statsd::{RelayCounters, RelayHistograms, RelayTimers};
70+
use crate::statsd::{RelayCounters, RelayDistributions, RelayTimers};
7171
use crate::utils::{self, CheckLimits, EnvelopeLimiter, SamplingResult};
7272
use crate::{http, processing};
7373
use relay_threading::AsyncPool;
@@ -2770,7 +2770,7 @@ impl EnvelopeProcessorService {
27702770
let dsn = PartialDsn::outbound(scoping, upstream);
27712771

27722772
relay_statsd::metric!(
2773-
histogram(RelayHistograms::PartitionKeys) = u64::from(partition_key)
2773+
distribution(RelayDistributions::PartitionKeys) = u64::from(partition_key)
27742774
);
27752775

27762776
let mut num_batches = 0;
@@ -2789,14 +2789,16 @@ impl EnvelopeProcessorService {
27892789
.scope(*scoping);
27902790

27912791
relay_statsd::metric!(
2792-
histogram(RelayHistograms::BucketsPerBatch) = batch.len() as u64
2792+
distribution(RelayDistributions::BucketsPerBatch) = batch.len() as u64
27932793
);
27942794

27952795
self.submit_upstream(cogs, Submit::Envelope(envelope.into_processed()));
27962796
num_batches += 1;
27972797
}
27982798

2799-
relay_statsd::metric!(histogram(RelayHistograms::BatchesPerPartition) = num_batches);
2799+
relay_statsd::metric!(
2800+
distribution(RelayDistributions::BatchesPerPartition) = num_batches
2801+
);
28002802
}
28012803
}
28022804

@@ -2874,7 +2876,7 @@ impl EnvelopeProcessorService {
28742876
}
28752877

28762878
if partition_splits > 0 {
2877-
metric!(histogram(RelayHistograms::PartitionSplits) = partition_splits);
2879+
metric!(distribution(RelayDistributions::PartitionSplits) = partition_splits);
28782880
}
28792881

28802882
self.send_global_partition(partition_key, &mut partition);
@@ -3139,7 +3141,9 @@ impl UpstreamRequest for SendEnvelope {
31393141

31403142
fn build(&mut self, builder: &mut http::RequestBuilder) -> Result<(), http::HttpError> {
31413143
let envelope_body = self.body.clone();
3142-
metric!(histogram(RelayHistograms::UpstreamEnvelopeBodySize) = envelope_body.len() as u64);
3144+
metric!(
3145+
distribution(RelayDistributions::UpstreamEnvelopeBodySize) = envelope_body.len() as u64
3146+
);
31433147

31443148
let meta = &self.envelope.meta();
31453149
let shard = self.envelope.partition_key().map(|p| p.to_string());
@@ -3355,7 +3359,9 @@ impl UpstreamRequest for SendMetricsRequest {
33553359
}
33563360

33573361
fn build(&mut self, builder: &mut http::RequestBuilder) -> Result<(), http::HttpError> {
3358-
metric!(histogram(RelayHistograms::UpstreamMetricsBodySize) = self.encoded.len() as u64);
3362+
metric!(
3363+
distribution(RelayDistributions::UpstreamMetricsBodySize) = self.encoded.len() as u64
3364+
);
33593365

33603366
builder
33613367
.content_encoding(self.http_encoding)

0 commit comments

Comments
 (0)