From 4bccbbb9326ad0b1f77e7414120b2eeff8a940f5 Mon Sep 17 00:00:00 2001 From: Joris Bayer Date: Wed, 10 Jan 2024 15:30:34 +0100 Subject: [PATCH] ref(spans): Reduced set of metrics/tags for all orgs (#2924) Follow-up to https://github.com/getsentry/relay/pull/2907: Apply reduced set of span metrics and tags regardless of feature flag. ref: https://github.com/getsentry/team-ingest/issues/252 --- CHANGELOG.md | 2 +- relay-dynamic-config/src/defaults.rs | 352 +--------- relay-server/src/metrics_extraction/event.rs | 69 +- ...n__event__tests__extract_span_metrics.snap | 622 ------------------ 4 files changed, 47 insertions(+), 998 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 470a860036..6470380371 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ - Introduce the configuration option `http.global_metrics`. When enabled, Relay submits metric buckets not through regular project-scoped Envelopes, but instead through the global endpoint. When this Relay serves a high number of projects, this can reduce the overall request volume. ([#2902](https://github.com/getsentry/relay/pull/2902)) - Record the size of global metrics requests in statsd as `upstream.metrics.body_size`. ([#2908](https://github.com/getsentry/relay/pull/2908)) - Make Kafka spans compatible with the Snuba span schema. ([#2917](https://github.com/getsentry/relay/pull/2917), [#2926](https://github.com/getsentry/relay/pull/2926)) -- Only extract span metrics / tags when they are needed. ([#2907](https://github.com/getsentry/relay/pull/2907), [#2923](https://github.com/getsentry/relay/pull/2923)) +- Only extract span metrics / tags when they are needed. ([#2907](https://github.com/getsentry/relay/pull/2907), [#2923](https://github.com/getsentry/relay/pull/2923), [#2924](https://github.com/getsentry/relay/pull/2924)) - Normalize metric resource identifiers in `event._metrics_summary` and `span._metrics_summary`. ([#2914](https://github.com/getsentry/relay/pull/2914)) ## 23.12.1 diff --git a/relay-dynamic-config/src/defaults.rs b/relay-dynamic-config/src/defaults.rs index c12eacd02e..afc2ecf33a 100644 --- a/relay-dynamic-config/src/defaults.rs +++ b/relay-dynamic-config/src/defaults.rs @@ -47,17 +47,7 @@ pub fn add_span_metrics(project_config: &mut ProjectConfig) { return; } - // The "all-modules" feature flag is our de-facto feature flag for experimental features. - // Hijack it for the new, more restrictive config. - let is_experimental = project_config - .features - .has(Feature::SpanMetricsExtractionAllModules); - - if is_experimental { - config.metrics.extend(span_metrics_reduced()); - } else { - config.metrics.extend(span_metrics_legacy()); - }; + config.metrics.extend(span_metrics()); config._span_metrics_extended = true; if config.version == 0 { @@ -65,346 +55,8 @@ pub fn add_span_metrics(project_config: &mut ProjectConfig) { } } -/// The original set of metrics & tags. -fn span_metrics_legacy() -> impl IntoIterator { - let is_disabled = RuleCondition::glob("span.op", DISABLED_DATABASES); - let is_mongo = RuleCondition::eq("span.system", "mongodb") - | RuleCondition::glob("span.description", MONGODB_QUERIES); - let resource_condition = RuleCondition::glob("span.op", RESOURCE_SPAN_OPS); - - let span_op_conditions = RuleCondition::eq("span.op", "http.client") - | RuleCondition::glob("span.op", MOBILE_OPS) - | RuleCondition::glob("span.op", "file.*") - | (RuleCondition::glob("span.op", "db*") & !is_disabled & !is_mongo) - | resource_condition.clone(); - - // For mobile spans, only extract duration metrics when they are below a threshold. - let duration_condition = RuleCondition::negate(RuleCondition::glob("span.op", MOBILE_OPS)) - | RuleCondition::lte( - "span.exclusive_time", - Number::from_f64(MAX_DURATION_MOBILE_MS).unwrap_or(0.into()), - ); - let mobile_condition = RuleCondition::eq("span.sentry_tags.mobile", "true"); - let app_start_condition = RuleCondition::glob("span.op", "app.start.*") - & RuleCondition::eq("span.description", APP_START_ROOT_SPAN_DESCRIPTIONS); - - [ - MetricSpec { - category: DataCategory::Span, - mri: "d:spans/exclusive_time@millisecond".into(), - field: Some("span.exclusive_time".into()), - condition: Some(span_op_conditions.clone() & duration_condition.clone()), - tags: vec![ - // Common tags: - Tag::with_key("environment") - .from_field("span.sentry_tags.environment") - .always(), - Tag::with_key("transaction.method") - .from_field("span.sentry_tags.transaction.method") - .always(), - Tag::with_key("transaction.op") - .from_field("span.sentry_tags.transaction.op") - .always(), - Tag::with_key("span.action") - .from_field("span.sentry_tags.action") - .always(), - Tag::with_key("span.category") - .from_field("span.sentry_tags.category") - .always(), - Tag::with_key("span.description") - .from_field("span.sentry_tags.description") - .always(), - Tag::with_key("span.domain") - .from_field("span.sentry_tags.domain") - .always(), - Tag::with_key("span.group") - .from_field("span.sentry_tags.group") - .always(), - Tag::with_key("span.module") - .from_field("span.sentry_tags.module") - .always(), - Tag::with_key("span.op") - .from_field("span.sentry_tags.op") - .always(), - Tag::with_key("span.status") - .from_field("span.status") // from top-level field - .always(), - Tag::with_key("span.status_code") - .from_field("span.sentry_tags.status_code") - .always(), - Tag::with_key("span.system") - .from_field("span.sentry_tags.system") - .always(), - Tag::with_key("transaction") - .from_field("span.sentry_tags.transaction") - .always(), - // Mobile: - Tag::with_key("device.class") - .from_field("span.sentry_tags.device.class") - .when(mobile_condition.clone()), - Tag::with_key("os.name") // TODO: might not be needed on both `exclusive_time` metrics - .from_field("span.sentry_tags.os.name") - .when(mobile_condition.clone()), - Tag::with_key("release") - .from_field("span.sentry_tags.release") - .when(mobile_condition.clone()), - Tag::with_key("ttfd") - .from_field("span.sentry_tags.ttfd") - .when(mobile_condition.clone()), - Tag::with_key("ttid") - .from_field("span.sentry_tags.ttid") - .when(mobile_condition.clone()), - Tag::with_key("span.main_thread") - .from_field("span.sentry_tags.main_thread") - .when(mobile_condition.clone()), - // Resource module: - Tag::with_key("file_extension") - .from_field("span.sentry_tags.file_extension") - .when(resource_condition.clone()), - Tag::with_key("resource.render_blocking_status") - .from_field("span.sentry_tags.resource.render_blocking_status") - .when(resource_condition.clone()), - ], - }, - MetricSpec { - category: DataCategory::Span, - mri: "d:spans/exclusive_time_light@millisecond".into(), - field: Some("span.exclusive_time".into()), - condition: Some(span_op_conditions.clone() & duration_condition.clone()), - tags: vec![ - Tag::with_key("environment") - .from_field("span.sentry_tags.environment") - .always(), - Tag::with_key("transaction.method") - .from_field("span.sentry_tags.transaction.method") - .always(), - Tag::with_key("transaction.op") - .from_field("span.sentry_tags.transaction.op") - .always(), - Tag::with_key("span.action") - .from_field("span.sentry_tags.action") - .always(), - Tag::with_key("span.category") - .from_field("span.sentry_tags.category") - .always(), - Tag::with_key("span.description") - .from_field("span.sentry_tags.description") - .always(), - Tag::with_key("span.domain") - .from_field("span.sentry_tags.domain") - .always(), - Tag::with_key("span.group") - .from_field("span.sentry_tags.group") - .always(), - Tag::with_key("span.module") - .from_field("span.sentry_tags.module") - .always(), - Tag::with_key("span.op") - .from_field("span.sentry_tags.op") - .always(), - Tag::with_key("span.status") - .from_field("span.status") // from top-level field - .always(), - Tag::with_key("span.status_code") - .from_field("span.sentry_tags.status_code") - .always(), - Tag::with_key("span.system") - .from_field("span.sentry_tags.system") - .always(), - // Mobile: - Tag::with_key("device.class") - .from_field("span.sentry_tags.device.class") - .when(mobile_condition.clone()), - Tag::with_key("os.name") // TODO: might not be needed on both `exclusive_time` metrics - .from_field("span.sentry_tags.os.name") - .when(mobile_condition.clone()), - Tag::with_key("release") - .from_field("span.sentry_tags.release") - .when(mobile_condition.clone()), - // Resource module: - Tag::with_key("file_extension") - .from_field("span.sentry_tags.file_extension") - .when(resource_condition.clone()), - Tag::with_key("resource.render_blocking_status") - .from_field("span.sentry_tags.resource.render_blocking_status") - .when(resource_condition.clone()), - ], - }, - MetricSpec { - category: DataCategory::Span, - mri: "d:spans/http.response_content_length@byte".into(), - field: Some("span.data.http\\.response_content_length".into()), - condition: Some( - span_op_conditions.clone() - & resource_condition.clone() - & RuleCondition::gt("span.data.http\\.response_content_length", 0), - ), - tags: vec![ - Tag::with_key("environment") - .from_field("span.sentry_tags.environment") - .always(), // already guarded by condition on metric - Tag::with_key("file_extension") - .from_field("span.sentry_tags.file_extension") - .always(), // already guarded by condition on metric - Tag::with_key("resource.render_blocking_status") - .from_field("span.sentry_tags.resource.render_blocking_status") - .always(), // already guarded by condition on metric - Tag::with_key("span.description") - .from_field("span.sentry_tags.description") - .always(), // already guarded by condition on metric - Tag::with_key("span.domain") - .from_field("span.sentry_tags.domain") - .always(), // already guarded by condition on metric - Tag::with_key("span.group") - .from_field("span.sentry_tags.group") - .always(), // already guarded by condition on metric - Tag::with_key("span.op") - .from_field("span.sentry_tags.op") - .always(), // already guarded by condition on metric - Tag::with_key("transaction") - .from_field("span.sentry_tags.transaction") - .always(), // already guarded by condition on metric - ], - }, - MetricSpec { - category: DataCategory::Span, - mri: "d:spans/http.decoded_response_content_length@byte".into(), - field: Some("span.data.http\\.decoded_response_content_length".into()), - condition: Some( - span_op_conditions.clone() - & resource_condition.clone() - & RuleCondition::gt("span.data.http\\.decoded_response_content_length", 0), - ), - tags: vec![ - Tag::with_key("environment") - .from_field("span.sentry_tags.environment") - .always(), // already guarded by condition on metric - Tag::with_key("file_extension") - .from_field("span.sentry_tags.file_extension") - .always(), // already guarded by condition on metric - Tag::with_key("resource.render_blocking_status") - .from_field("span.sentry_tags.resource.render_blocking_status") - .always(), // already guarded by condition on metric - Tag::with_key("span.description") - .from_field("span.sentry_tags.description") - .always(), // already guarded by condition on metric - Tag::with_key("span.domain") - .from_field("span.sentry_tags.domain") - .always(), // already guarded by condition on metric - Tag::with_key("span.group") - .from_field("span.sentry_tags.group") - .always(), // already guarded by condition on metric - Tag::with_key("span.op") - .from_field("span.sentry_tags.op") - .always(), // already guarded by condition on metric - ], - }, - MetricSpec { - category: DataCategory::Span, - mri: "d:spans/http.response_transfer_size@byte".into(), - field: Some("span.data.http\\.response_transfer_size".into()), - condition: Some( - span_op_conditions.clone() - & resource_condition.clone() - & RuleCondition::gt("span.data.http\\.response_transfer_size", 0), - ), - tags: vec![ - Tag::with_key("environment") - .from_field("span.sentry_tags.environment") - .always(), // already guarded by condition on metric - Tag::with_key("file_extension") - .from_field("span.sentry_tags.file_extension") - .always(), // already guarded by condition on metric - Tag::with_key("resource.render_blocking_status") - .from_field("span.sentry_tags.resource.render_blocking_status") - .always(), // already guarded by condition on metric - Tag::with_key("span.description") - .from_field("span.sentry_tags.description") - .always(), // already guarded by condition on metric - Tag::with_key("span.domain") - .from_field("span.sentry_tags.domain") - .always(), // already guarded by condition on metric - Tag::with_key("span.group") - .from_field("span.sentry_tags.group") - .always(), // already guarded by condition on metric - Tag::with_key("span.op") - .from_field("span.sentry_tags.op") - .always(), // already guarded by condition on metric - ], - }, - MetricSpec { - category: DataCategory::Span, - mri: "c:spans/count_per_op@none".into(), - field: None, - condition: Some(duration_condition.clone()), - tags: vec![ - Tag::with_key("span.category") - .from_field("span.sentry_tags.category") - .always(), - Tag::with_key("span.op") - .from_field("span.sentry_tags.op") - .always(), - Tag::with_key("span.system") - .from_field("span.sentry_tags.system") - .always(), - ], - }, - MetricSpec { - category: DataCategory::Span, - mri: "c:spans/count_per_segment@none".into(), - field: None, - condition: Some(mobile_condition.clone() & duration_condition.clone()), - tags: vec![ - Tag::with_key("transaction.op") - .from_field("span.sentry_tags.transaction.op") - .always(), - Tag::with_key("transaction") - .from_field("span.sentry_tags.transaction") - .always(), - Tag::with_key("release") - .from_field("span.sentry_tags.release") - .always(), // mobile only - already guarded by condition on metric - ], - }, - MetricSpec { - category: DataCategory::Span, - mri: "d:spans/duration@millisecond".into(), - field: Some("span.duration".into()), - condition: Some( - duration_condition.clone() & mobile_condition.clone() & app_start_condition.clone(), - ), - tags: vec![ - Tag::with_key("span.op") - .from_field("span.sentry_tags.op") - .always(), // already guarded by condition on metric - Tag::with_key("span.description") - .from_field("span.sentry_tags.description") - .always(), // already guarded by condition on metric - Tag::with_key("span.group") - .from_field("span.sentry_tags.group") - .always(), // already guarded by condition on metric - Tag::with_key("transaction") - .from_field("span.sentry_tags.transaction") - .always(), // already guarded by condition on metric - Tag::with_key("device.class") - .from_field("span.sentry_tags.device.class") - .always(), // already guarded by condition on metric - Tag::with_key("release") - .from_field("span.sentry_tags.release") - .always(), // already guarded by condition on metric - Tag::with_key("os.name") - .from_field("span.sentry_tags.os.name") - .always(), // already guarded by condition on metric - Tag::with_key("environment") - .from_field("span.sentry_tags.environment") - .always(), // already guarded by condition on metric - ], - }, - ] -} - /// Metrics with tags applied as required. -fn span_metrics_reduced() -> impl IntoIterator { +fn span_metrics() -> impl IntoIterator { let is_db = RuleCondition::eq("span.sentry_tags.category", "db") & !(RuleCondition::eq("span.system", "mongodb") | RuleCondition::glob("span.op", DISABLED_DATABASES) diff --git a/relay-server/src/metrics_extraction/event.rs b/relay-server/src/metrics_extraction/event.rs index 49152ea199..31ebad7f65 100644 --- a/relay-server/src/metrics_extraction/event.rs +++ b/relay-server/src/metrics_extraction/event.rs @@ -1204,8 +1204,11 @@ mod tests { } /// Helper function for span metric extraction tests. - fn extract_span_metrics_op_duration(span_op: &str, duration_millis: f64) -> Vec { + fn extract_span_metrics_mobile(span_op: &str, duration_millis: f64) -> Vec { let mut span = Span::default(); + span.sentry_tags + .get_or_insert_with(Default::default) + .insert("mobile".to_owned(), "true".to_owned().into()); span.timestamp .set_value(Some(Timestamp::from(DateTime::::MAX_UTC))); // whatever span.op.set_value(Some(span_op.into())); @@ -1216,66 +1219,82 @@ mod tests { #[test] fn test_app_start_cold_inlier() { + let metrics = extract_span_metrics_mobile("app.start.cold", 180000.0); assert_eq!( - 3, - extract_span_metrics_op_duration("app.start.cold", 180000.0).len() + metrics.iter().map(|m| &m.name).collect::>(), + vec![ + "d:spans/exclusive_time@millisecond", + "d:spans/exclusive_time_light@millisecond", + "c:spans/count_per_op@none", + "c:spans/count_per_segment@none" + ] ); } #[test] fn test_app_start_cold_outlier() { - assert_eq!( - 0, - extract_span_metrics_op_duration("app.start.cold", 181000.0).len() - ); + let metrics = extract_span_metrics_mobile("app.start.cold", 181000.0); + assert!(metrics.is_empty()); } #[test] fn test_app_start_warm_inlier() { + let metrics = extract_span_metrics_mobile("app.start.warm", 180000.0); assert_eq!( - 3, - extract_span_metrics_op_duration("app.start.warm", 180000.0).len() + metrics.iter().map(|m| &m.name).collect::>(), + vec![ + "d:spans/exclusive_time@millisecond", + "d:spans/exclusive_time_light@millisecond", + "c:spans/count_per_op@none", + "c:spans/count_per_segment@none" + ] ); } #[test] fn test_app_start_warm_outlier() { - assert_eq!( - 0, - extract_span_metrics_op_duration("app.start.warm", 181000.0).len() - ); + let metrics = extract_span_metrics_mobile("app.start.warm", 181000.0); + assert!(metrics.is_empty()); } #[test] fn test_ui_load_initial_display_inlier() { + let metrics = extract_span_metrics_mobile("ui.load.initial_display", 180000.0); assert_eq!( - 3, - extract_span_metrics_op_duration("ui.load.initial_display", 180000.0).len() + metrics.iter().map(|m| &m.name).collect::>(), + vec![ + "d:spans/exclusive_time@millisecond", + "d:spans/exclusive_time_light@millisecond", + "c:spans/count_per_op@none", + "c:spans/count_per_segment@none" + ] ); } #[test] fn test_ui_load_initial_display_outlier() { - assert_eq!( - 0, - extract_span_metrics_op_duration("ui.load.initial_display", 181000.0).len() - ); + let metrics = extract_span_metrics_mobile("ui.load.initial_display", 181000.0); + assert!(metrics.is_empty()); } #[test] fn test_ui_load_full_display_inlier() { + let metrics = extract_span_metrics_mobile("ui.load.full_display", 180000.0); assert_eq!( - 3, - extract_span_metrics_op_duration("ui.load.full_display", 180000.0).len() + metrics.iter().map(|m| &m.name).collect::>(), + vec![ + "d:spans/exclusive_time@millisecond", + "d:spans/exclusive_time_light@millisecond", + "c:spans/count_per_op@none", + "c:spans/count_per_segment@none" + ] ); } #[test] fn test_ui_load_full_display_outlier() { - assert_eq!( - 0, - extract_span_metrics_op_duration("ui.load.full_display", 181000.0).len() - ); + let metrics = extract_span_metrics_mobile("ui.load.full_display", 181000.0); + assert!(metrics.is_empty()); } #[test] diff --git a/relay-server/src/metrics_extraction/snapshots/relay_server__metrics_extraction__event__tests__extract_span_metrics.snap b/relay-server/src/metrics_extraction/snapshots/relay_server__metrics_extraction__event__tests__extract_span_metrics.snap index 2aa1e3264e..3eee87818a 100644 --- a/relay-server/src/metrics_extraction/snapshots/relay_server__metrics_extraction__event__tests__extract_span_metrics.snap +++ b/relay-server/src/metrics_extraction/snapshots/relay_server__metrics_extraction__event__tests__extract_span_metrics.snap @@ -15,49 +15,6 @@ expression: metrics "span.op": "ui.react.render", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "GET", - "span.category": "http", - "span.description": "GET http://domain.tld", - "span.domain": "domain.tld", - "span.group": "d9dc18637d441612", - "span.op": "http.client", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "GET", - "span.category": "http", - "span.description": "GET http://domain.tld", - "span.domain": "domain.tld", - "span.group": "d9dc18637d441612", - "span.op": "http.client", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -70,49 +27,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://domain.tld", - "span.domain": "domain.tld", - "span.group": "25faf23529f71d3e", - "span.op": "http.client", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://domain.tld", - "span.domain": "domain.tld", - "span.group": "25faf23529f71d3e", - "span.op": "http.client", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -125,49 +39,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "PUT", - "span.category": "http", - "span.description": "PUT http://domain.tld", - "span.domain": "domain.tld", - "span.group": "488f09b46e5978be", - "span.op": "http.client", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "PUT", - "span.category": "http", - "span.description": "PUT http://domain.tld", - "span.domain": "domain.tld", - "span.group": "488f09b46e5978be", - "span.op": "http.client", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -180,47 +51,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "GET", - "span.category": "http", - "span.description": "GET *", - "span.group": "37e3d9fab1ae9162", - "span.op": "http.client", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "GET", - "span.category": "http", - "span.description": "GET *", - "span.group": "37e3d9fab1ae9162", - "span.op": "http.client", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -233,51 +63,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://127.0.0.1:1234", - "span.group": "464fe695f9cf639c", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://127.0.0.1:1234", - "span.group": "464fe695f9cf639c", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -290,53 +75,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://*.domain.tld:1234", - "span.domain": "*.domain.tld:1234", - "span.group": "86818d1c74ecfc66", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://*.domain.tld:1234", - "span.domain": "*.domain.tld:1234", - "span.group": "86818d1c74ecfc66", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -349,53 +87,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://targetdomain.tld:1234", - "span.domain": "targetdomain.tld:1234", - "span.group": "72ab88b506cb04b2", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://targetdomain.tld:1234", - "span.domain": "targetdomain.tld:1234", - "span.group": "72ab88b506cb04b2", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -408,53 +99,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://targetdomain:1234", - "span.domain": "targetdomain:1234", - "span.group": "c8e531abe96ff360", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://targetdomain:1234", - "span.domain": "targetdomain:1234", - "span.group": "c8e531abe96ff360", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -467,53 +111,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://*.domain.tld:1234", - "span.domain": "*.domain.tld:1234", - "span.group": "86818d1c74ecfc66", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://*.domain.tld:1234", - "span.domain": "*.domain.tld:1234", - "span.group": "86818d1c74ecfc66", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -526,53 +123,6 @@ expression: metrics "span.op": "http.client", }, }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://*.domain.tld:1234", - "span.domain": "*.domain.tld:1234", - "span.group": "86818d1c74ecfc66", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1597976302), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 2000.0, - ], - ), - tags: { - "environment": "fake_environment", - "span.action": "POST", - "span.category": "http", - "span.description": "POST http://*.domain.tld:1234", - "span.domain": "*.domain.tld:1234", - "span.group": "86818d1c74ecfc66", - "span.op": "http.client", - "span.status": "ok", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1597976302), width: 0, @@ -602,11 +152,8 @@ expression: metrics "span.domain": "table", "span.group": "f4a7fef06db3d88e", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -626,10 +173,6 @@ expression: metrics "span.domain": "table", "span.group": "f4a7fef06db3d88e", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -662,10 +205,8 @@ expression: metrics "span.domain": "table", "span.group": "4f9711d2d09963b9", "span.op": "db", - "span.status": "ok", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -685,9 +226,6 @@ expression: metrics "span.domain": "table", "span.group": "4f9711d2d09963b9", "span.op": "db", - "span.status": "ok", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -717,11 +255,8 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -739,10 +274,6 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -775,11 +306,8 @@ expression: metrics "span.domain": ",from_date,", "span.group": "e4ea457c8e7e4109", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -799,10 +327,6 @@ expression: metrics "span.domain": ",from_date,", "span.group": "e4ea457c8e7e4109", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -833,10 +357,8 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db", - "span.status": "ok", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -854,9 +376,6 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db", - "span.status": "ok", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -888,11 +407,8 @@ expression: metrics "span.domain": "table", "span.group": "03cb381cee3f1463", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -912,10 +428,6 @@ expression: metrics "span.domain": "table", "span.group": "03cb381cee3f1463", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "postgresql", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -948,11 +460,8 @@ expression: metrics "span.domain": ",table,", "span.group": "e0f7e81a59b030ba", "span.op": "db", - "span.status": "ok", - "span.system": "postgresql", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -972,10 +481,6 @@ expression: metrics "span.domain": ",table,", "span.group": "e0f7e81a59b030ba", "span.op": "db", - "span.status": "ok", - "span.system": "postgresql", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1006,11 +511,8 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db", - "span.status": "ok", - "span.system": "mydatabase", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1028,10 +530,6 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db", - "span.status": "ok", - "span.system": "mydatabase", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1062,11 +560,8 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db", - "span.status": "ok", - "span.system": "mydatabase", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1084,10 +579,6 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db", - "span.status": "ok", - "span.system": "mydatabase", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1119,11 +610,8 @@ expression: metrics "span.description": "SAVEPOINT %s", "span.group": "3f955cbde39e04b9", "span.op": "db", - "span.status": "ok", - "span.system": "mydatabase", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1142,10 +630,6 @@ expression: metrics "span.description": "SAVEPOINT %s", "span.group": "3f955cbde39e04b9", "span.op": "db", - "span.status": "ok", - "span.system": "mydatabase", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1226,10 +710,7 @@ expression: metrics "span.domain": "domain", "span.group": "022f81fdf31228bf", "span.op": "resource.script", - "span.status": "ok", "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1249,9 +730,6 @@ expression: metrics "span.domain": "domain", "span.group": "022f81fdf31228bf", "span.op": "resource.script", - "span.status": "ok", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1294,11 +772,8 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "mydatabase", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1316,10 +791,6 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db.sql.query", - "span.status": "ok", - "span.system": "mydatabase", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1362,11 +833,8 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db.sql.activerecord", - "span.status": "ok", - "span.system": "mydatabase", "transaction": "gEt /api/:version/users/", "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1384,10 +852,6 @@ expression: metrics "span.category": "db", "span.domain": "table", "span.op": "db.sql.activerecord", - "span.status": "ok", - "span.system": "mydatabase", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1416,47 +880,6 @@ expression: metrics "span.system": "redis", }, }, - Bucket { - timestamp: UnixTimestamp(1695255152), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 15833.532095, - ], - ), - tags: { - "environment": "fake_environment", - "span.description": "viewDidLoad", - "span.group": "247104252ec2b753", - "span.op": "ui.load", - "span.status": "ok", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1695255152), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 15833.532095, - ], - ), - tags: { - "environment": "fake_environment", - "span.description": "viewDidLoad", - "span.group": "247104252ec2b753", - "span.op": "ui.load", - "span.status": "ok", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1695255152), width: 0, @@ -1468,47 +891,6 @@ expression: metrics "span.op": "ui.load", }, }, - Bucket { - timestamp: UnixTimestamp(1695255136), - width: 0, - name: "d:spans/exclusive_time@millisecond", - value: Distribution( - [ - 1668.516159, - ], - ), - tags: { - "environment": "fake_environment", - "span.category": "app", - "span.description": "Cold Start", - "span.group": "2d675185edfeb30c", - "span.op": "app.start.cold", - "span.status_code": "200", - "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, - Bucket { - timestamp: UnixTimestamp(1695255136), - width: 0, - name: "d:spans/exclusive_time_light@millisecond", - value: Distribution( - [ - 1668.516159, - ], - ), - tags: { - "environment": "fake_environment", - "span.category": "app", - "span.description": "Cold Start", - "span.group": "2d675185edfeb30c", - "span.op": "app.start.cold", - "span.status_code": "200", - "transaction.method": "POST", - "transaction.op": "myop", - }, - }, Bucket { timestamp: UnixTimestamp(1695255136), width: 0, @@ -1540,8 +922,6 @@ expression: metrics "span.group": "d744fa0716ef1142", "span.op": "resource.css", "transaction": "gEt /api/:version/users/", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket { @@ -1562,8 +942,6 @@ expression: metrics "span.domain": "*.domain.com", "span.group": "d744fa0716ef1142", "span.op": "resource.css", - "transaction.method": "POST", - "transaction.op": "myop", }, }, Bucket {