From 36d050ee56bd1175cd158ed34529464fc60a8b09 Mon Sep 17 00:00:00 2001 From: Zach FettersMoore <4425109+BobaFetters@users.noreply.github.com> Date: Mon, 27 Jul 2026 11:49:02 -0400 Subject: [PATCH 1/5] Enable subgraph metrics and extended error metrics by default Router 3.0 changes the defaults for two Apollo telemetry settings to match the preferred configuration for GraphOS Studio users, and promotes one of them out of preview. --- ...ing_zach_router_1910_telemetry_defaults.md | 24 +++++++++++++ apollo-router/src/configuration/metrics.rs | 4 +-- .../3003-extended-error-metrics.yaml | 5 +++ ..._metrics@apollo_telemetry.router.yaml.snap | 2 +- ...ics@experimental_features.router.yaml.snap | 2 +- ...nfiguration__tests__schema_generation.snap | 4 +-- ...on@apollo_extended_error_metrics.yaml.snap | 9 +++++ ...iguration@apollo_extended_errors.yaml.snap | 2 +- .../metrics/apollo_telemetry.router.yaml | 2 +- .../apollo_extended_error_metrics.yaml | 4 +++ .../connectors/incompatible/telemetry.rs | 8 ++--- apollo-router/src/plugins/telemetry/apollo.rs | 6 ++-- .../plugins/telemetry/error_counter/mod.rs | 4 +-- .../plugins/telemetry/error_counter/tests.rs | 34 +++++++++---------- apollo-router/tests/integration/connectors.rs | 6 ++-- .../telemetry/apollo_otel_metrics.rs | 18 +++++----- docs/shared/config/telemetry.mdx | 4 +-- .../shared/router-config-properties-table.mdx | 2 +- docs/shared/router-yaml-complete.mdx | 2 +- docs/source/routing/configuration/yaml.mdx | 4 +-- .../graphos/graphos-reporting.mdx | 5 ++- 21 files changed, 96 insertions(+), 55 deletions(-) create mode 100644 .changesets/breaking_zach_router_1910_telemetry_defaults.md create mode 100644 apollo-router/src/configuration/migrations/3003-extended-error-metrics.yaml create mode 100644 apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_error_metrics.yaml.snap create mode 100644 apollo-router/src/configuration/testdata/migrations/apollo_extended_error_metrics.yaml diff --git a/.changesets/breaking_zach_router_1910_telemetry_defaults.md b/.changesets/breaking_zach_router_1910_telemetry_defaults.md new file mode 100644 index 0000000000..bd5f064c56 --- /dev/null +++ b/.changesets/breaking_zach_router_1910_telemetry_defaults.md @@ -0,0 +1,24 @@ +### Enable subgraph metrics and extended error metrics by default + +Router 3.0 changes the defaults for two Apollo telemetry settings to match the preferred configuration for GraphOS Studio users, and promotes one of them out of preview. + +**`telemetry.apollo.subgraph_metrics` now defaults to `true`.** Subgraph metrics send additional per-subgraph operation metrics to GraphOS Studio via OTLP, powering subgraph insights. Previously this was opt-in. To restore the previous behavior, set: + +```yaml +telemetry: + apollo: + subgraph_metrics: false +``` + +**`telemetry.apollo.errors.preview_extended_error_metrics` has been renamed to `telemetry.apollo.errors.extended_error_metrics` and now defaults to `enabled`.** Extended error metrics send OTLP error metrics with additional dimensions (`extensions.service`, `extensions.code`), giving Studio richer error attribution out of the box. The `preview_` prefix has been dropped now that the feature is stable. + +Configurations using the old `preview_extended_error_metrics` field name are migrated automatically at startup (with a warning). To restore the previous behavior, set: + +```yaml +telemetry: + apollo: + errors: + extended_error_metrics: disabled +``` + +By [@BobaFetters](https://github.com/BobaFetters) in https://github.com/apollographql/router/pull/ROUTER-1910 diff --git a/apollo-router/src/configuration/metrics.rs b/apollo-router/src/configuration/metrics.rs index 234e964add..e4711ea064 100644 --- a/apollo-router/src/configuration/metrics.rs +++ b/apollo-router/src/configuration/metrics.rs @@ -403,8 +403,8 @@ impl InstrumentData { "$.signature_normalization_algorithm", opt.metrics_reference_mode, "$.metrics_reference_mode", - opt.errors.preview_extended_error_metrics, - "$.errors.preview_extended_error_metrics", + opt.errors.extended_error_metrics, + "$.errors.extended_error_metrics", opt.field_level_instrumentation_sampler, "$.field_level_instrumentation_sampler", opt.tracing.batch_processor.scheduled_delay, diff --git a/apollo-router/src/configuration/migrations/3003-extended-error-metrics.yaml b/apollo-router/src/configuration/migrations/3003-extended-error-metrics.yaml new file mode 100644 index 0000000000..09d978b6d3 --- /dev/null +++ b/apollo-router/src/configuration/migrations/3003-extended-error-metrics.yaml @@ -0,0 +1,5 @@ +description: preview_extended_error_metrics is now extended_error_metrics +actions: + - type: move + from: telemetry.apollo.errors.preview_extended_error_metrics + to: telemetry.apollo.errors.extended_error_metrics diff --git a/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@apollo_telemetry.router.yaml.snap b/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@apollo_telemetry.router.yaml.snap index b1bbaa4b2a..950a65baf9 100644 --- a/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@apollo_telemetry.router.yaml.snap +++ b/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@apollo_telemetry.router.yaml.snap @@ -7,7 +7,7 @@ expression: "& metrics.non_zero()" datapoints: - value: 1 attributes: - opt.errors.preview_extended_error_metrics: enabled + opt.errors.extended_error_metrics: enabled opt.field_level_instrumentation_sampler: 1 opt.metrics.otlp.batch_processor.max_export_timeout: 103s opt.metrics.otlp.batch_processor.scheduled_delay: 5s diff --git a/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@experimental_features.router.yaml.snap b/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@experimental_features.router.yaml.snap index 472ffefe70..82d8592a56 100644 --- a/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@experimental_features.router.yaml.snap +++ b/apollo-router/src/configuration/snapshots/apollo_router__configuration__metrics__test__metrics@experimental_features.router.yaml.snap @@ -7,7 +7,7 @@ expression: "& metrics.non_zero()" datapoints: - value: 1 attributes: - opt.errors.preview_extended_error_metrics: false + opt.errors.extended_error_metrics: false opt.field_level_instrumentation_sampler: false opt.metrics.otlp.batch_processor.max_export_timeout: false opt.metrics.otlp.batch_processor.scheduled_delay: false diff --git a/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__schema_generation.snap b/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__schema_generation.snap index e0187cf1b7..24c27d4a6b 100644 --- a/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__schema_generation.snap +++ b/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__schema_generation.snap @@ -312,7 +312,7 @@ expression: "&schema" "description": "Set the signature normalization algorithm to use when sending Apollo usage reports." }, "subgraph_metrics": { - "default": false, + "default": true, "description": "Enable sending additional subgraph metrics to Apollo Studio via OTLP", "type": "boolean" }, @@ -3598,7 +3598,7 @@ expression: "&schema" "ErrorsConfiguration": { "additionalProperties": false, "properties": { - "preview_extended_error_metrics": { + "extended_error_metrics": { "allOf": [ { "$ref": "#/definitions/ExtendedErrorMetricsMode" diff --git a/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_error_metrics.yaml.snap b/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_error_metrics.yaml.snap new file mode 100644 index 0000000000..dd68f0e39c --- /dev/null +++ b/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_error_metrics.yaml.snap @@ -0,0 +1,9 @@ +--- +source: apollo-router/src/configuration/tests.rs +expression: new_config +--- +--- +telemetry: + apollo: + errors: + extended_error_metrics: enabled diff --git a/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_errors.yaml.snap b/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_errors.yaml.snap index fce7119e0a..dd68f0e39c 100644 --- a/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_errors.yaml.snap +++ b/apollo-router/src/configuration/snapshots/apollo_router__configuration__tests__upgrade_old_configuration@apollo_extended_errors.yaml.snap @@ -6,4 +6,4 @@ expression: new_config telemetry: apollo: errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled diff --git a/apollo-router/src/configuration/testdata/metrics/apollo_telemetry.router.yaml b/apollo-router/src/configuration/testdata/metrics/apollo_telemetry.router.yaml index 3d54a70db7..62ec9576b0 100644 --- a/apollo-router/src/configuration/testdata/metrics/apollo_telemetry.router.yaml +++ b/apollo-router/src/configuration/testdata/metrics/apollo_telemetry.router.yaml @@ -5,7 +5,7 @@ telemetry: apollo: otlp_tracing_sampler: 1 errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled subgraph: all: send: true diff --git a/apollo-router/src/configuration/testdata/migrations/apollo_extended_error_metrics.yaml b/apollo-router/src/configuration/testdata/migrations/apollo_extended_error_metrics.yaml new file mode 100644 index 0000000000..5320c5126a --- /dev/null +++ b/apollo-router/src/configuration/testdata/migrations/apollo_extended_error_metrics.yaml @@ -0,0 +1,4 @@ +telemetry: + apollo: + errors: + preview_extended_error_metrics: enabled diff --git a/apollo-router/src/plugins/connectors/incompatible/telemetry.rs b/apollo-router/src/plugins/connectors/incompatible/telemetry.rs index 3d42ee4420..43fc6e8814 100644 --- a/apollo-router/src/plugins/connectors/incompatible/telemetry.rs +++ b/apollo-router/src/plugins/connectors/incompatible/telemetry.rs @@ -23,7 +23,7 @@ impl IncompatiblePlugin for TelemetryIncompatPlugin { self.config.subgraph.all.send // When ExtendedErrorMetricsMode is enabled, this plugin supports reporting connector errors && !matches!( - self.config.preview_extended_error_metrics, + self.config.extended_error_metrics, apollo::ExtendedErrorMetricsMode::Enabled ) } @@ -39,7 +39,7 @@ impl IncompatiblePlugin for TelemetryIncompatPlugin { .partition_map(|(name, sub)| { if sub.send && !matches!( - self.config.preview_extended_error_metrics, + self.config.extended_error_metrics, apollo::ExtendedErrorMetricsMode::Enabled ) { @@ -61,13 +61,13 @@ impl IncompatiblePlugin for TelemetryIncompatPlugin { if self.config.subgraph.subgraphs.contains_key(subgraph) { tracing::warn!( subgraph = subgraph, - message = "plugin `telemetry` is explicitly configured to send errors to Apollo studio for connector-enabled subgraph, which is only supported when `preview_extended_error_metrics` is enabled", + message = "plugin `telemetry` is explicitly configured to send errors to Apollo studio for connector-enabled subgraph, which is only supported when `extended_error_metrics` is enabled", see = "https://go.apollo.dev/connectors/incompat", ); } else { tracing::info!( subgraph = subgraph, - message = "plugin `telemetry` is indirectly configured to send errors to Apollo studio for a connector-enabled subgraph, which is only supported when `preview_extended_error_metrics` is enabled", + message = "plugin `telemetry` is indirectly configured to send errors to Apollo studio for a connector-enabled subgraph, which is only supported when `extended_error_metrics` is enabled", see = "https://go.apollo.dev/connectors/incompat", ); } diff --git a/apollo-router/src/plugins/telemetry/apollo.rs b/apollo-router/src/plugins/telemetry/apollo.rs index 07fe1ea50a..c1030261b6 100644 --- a/apollo-router/src/plugins/telemetry/apollo.rs +++ b/apollo-router/src/plugins/telemetry/apollo.rs @@ -283,7 +283,7 @@ pub(crate) struct ErrorsConfiguration { pub(crate) subgraph: SubgraphErrorConfig, /// Send error metrics via OTLP with additional dimensions [`extensions.service`, `extensions.code`] - pub(crate) preview_extended_error_metrics: ExtendedErrorMetricsMode, + pub(crate) extended_error_metrics: ExtendedErrorMetricsMode, } #[derive(Debug, Clone, Deserialize, JsonSchema, Default, PartialEq)] @@ -332,10 +332,10 @@ impl SubgraphErrorConfig { #[serde(deny_unknown_fields, rename_all = "lowercase")] pub(crate) enum ExtendedErrorMetricsMode { /// Do not send extended OTLP error metrics - #[default] Disabled, /// Send extended OTLP error metrics to Apollo Studio with additional dimensions [`extensions.service`, `extensions.code`]. /// If enabled, it's also recommended to enable `redaction_policy: extended` on subgraphs to send the `extensions.code` for subgraph errors. + #[default] Enabled, } @@ -427,7 +427,7 @@ impl Default for Config { signature_normalization_algorithm: ApolloSignatureNormalizationAlgorithm::default(), experimental_local_field_metrics: false, metrics_reference_mode: ApolloMetricsReferenceMode::default(), - subgraph_metrics: false, + subgraph_metrics: true, sampler: None, } } diff --git a/apollo-router/src/plugins/telemetry/error_counter/mod.rs b/apollo-router/src/plugins/telemetry/error_counter/mod.rs index 074295634f..8f9d1c746e 100644 --- a/apollo-router/src/plugins/telemetry/error_counter/mod.rs +++ b/apollo-router/src/plugins/telemetry/error_counter/mod.rs @@ -220,14 +220,14 @@ fn count_operation_errors<'a>( let send_otlp_errors = if service.is_empty() { matches!( - errors_config.preview_extended_error_metrics, + errors_config.extended_error_metrics, ExtendedErrorMetricsMode::Enabled ) } else { let subgraph_error_config = errors_config.subgraph.get_error_config(&service); subgraph_error_config.send && matches!( - errors_config.preview_extended_error_metrics, + errors_config.extended_error_metrics, ExtendedErrorMetricsMode::Enabled ) }; diff --git a/apollo-router/src/plugins/telemetry/error_counter/tests.rs b/apollo-router/src/plugins/telemetry/error_counter/tests.rs index 6767513fa3..d2ee6fc928 100644 --- a/apollo-router/src/plugins/telemetry/error_counter/tests.rs +++ b/apollo-router/src/plugins/telemetry/error_counter/tests.rs @@ -49,7 +49,7 @@ use crate::spec::query::EXTENSIONS_VALUE_COMPLETION_KEY; async fn test_count_supergraph_errors_with_no_previously_counted_errors() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -112,7 +112,7 @@ async fn test_count_supergraph_errors_with_no_previously_counted_errors() { async fn test_count_supergraph_errors_with_previously_counted_errors() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -202,7 +202,7 @@ async fn test_count_supergraph_errors_with_previously_counted_errors() { async fn test_count_subgraph_errors_with_include_subgraphs_enabled() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, subgraph: SubgraphErrorConfig { subgraphs: HashMap::from([( "some-subgraph".to_string(), @@ -276,7 +276,7 @@ async fn test_count_subgraph_errors_with_include_subgraphs_enabled() { async fn test_count_subgraph_errors_with_include_subgraphs_disabled() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, subgraph: SubgraphErrorConfig { subgraphs: HashMap::from([( "some-subgraph".to_string(), @@ -346,7 +346,7 @@ async fn test_count_subgraph_errors_emits_span_event_with_error_code() { let _guard = crate::test_harness::tracing_test::dispatcher_guard(); let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -388,7 +388,7 @@ async fn test_count_subgraph_errors_emits_span_event_with_error_code() { async fn test_count_execution_errors() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -454,7 +454,7 @@ async fn test_count_operation_errors_skips_span_event_when_marker_is_set() { let _guard = crate::test_harness::tracing_test::dispatcher_guard(); let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -512,7 +512,7 @@ async fn test_count_execution_errors_emits_span_event_with_error_code() { let _guard = crate::test_harness::tracing_test::dispatcher_guard(); let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -555,7 +555,7 @@ async fn test_count_execution_errors_emits_span_event_with_error_code() { async fn test_count_router_errors() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -619,7 +619,7 @@ async fn test_count_router_errors() { async fn test_count_operation_errors_with_extended_config_enabled() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -664,7 +664,7 @@ async fn test_count_operation_errors_with_extended_config_enabled() { async fn test_count_operation_errors_with_all_json_types_and_extended_config_enabled() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -759,7 +759,7 @@ async fn test_count_operation_errors_with_all_json_types_and_extended_config_ena async fn test_count_operation_errors_with_duplicate_errors_and_extended_config_enabled() { async { let config = ErrorsConfiguration { - preview_extended_error_metrics: ExtendedErrorMetricsMode::Enabled, + extended_error_metrics: ExtendedErrorMetricsMode::Enabled, ..Default::default() }; @@ -862,7 +862,7 @@ async fn test_subgraph_error_counting() { "telemetry":{ "apollo": { "errors": { - "preview_extended_error_metrics": "enabled", + "extended_error_metrics": "enabled", "subgraph": { "subgraphs": { "myIgnoredSubgraph": { @@ -977,7 +977,7 @@ async fn test_execution_error_counting() { "telemetry":{ "apollo": { "errors": { - "preview_extended_error_metrics": "enabled", + "extended_error_metrics": "enabled", "subgraph": { "subgraphs": { "myIgnoredSubgraph": { @@ -1089,7 +1089,7 @@ async fn test_supergraph_error_counting() { "telemetry":{ "apollo": { "errors": { - "preview_extended_error_metrics": "enabled", + "extended_error_metrics": "enabled", "subgraph": { "subgraphs": { "myIgnoredSubgraph": { @@ -1193,7 +1193,7 @@ async fn test_router_error_counting() { "telemetry":{ "apollo": { "errors": { - "preview_extended_error_metrics": "enabled", + "extended_error_metrics": "enabled", "subgraph": { "subgraphs": { "myIgnoredSubgraph": { @@ -1302,7 +1302,7 @@ async fn test_operation_errors_emitted_when_config_is_enabled() { "telemetry":{ "apollo": { "errors": { - "preview_extended_error_metrics": "enabled", + "extended_error_metrics": "enabled", "subgraph": { "subgraphs": { "myIgnoredSubgraph": { diff --git a/apollo-router/tests/integration/connectors.rs b/apollo-router/tests/integration/connectors.rs index 8f9bb32881..c0787cda84 100644 --- a/apollo-router/tests/integration/connectors.rs +++ b/apollo-router/tests/integration/connectors.rs @@ -765,7 +765,7 @@ mod telemetry { router.start().await; router - .wait_for_log_message(r#""subgraph":"connectors","message":"plugin `telemetry` is indirectly configured to send errors to Apollo studio for a connector-enabled subgraph, which is only supported when `preview_extended_error_metrics` is enabled"#) + .wait_for_log_message(r#""subgraph":"connectors","message":"plugin `telemetry` is indirectly configured to send errors to Apollo studio for a connector-enabled subgraph, which is only supported when `extended_error_metrics` is enabled"#) .await; Ok(()) @@ -805,7 +805,7 @@ mod telemetry { router.start().await; router - .wait_for_log_message(r#""subgraph":"connectors","message":"plugin `telemetry` is explicitly configured to send errors to Apollo studio for connector-enabled subgraph, which is only supported when `preview_extended_error_metrics` is enabled"#) + .wait_for_log_message(r#""subgraph":"connectors","message":"plugin `telemetry` is explicitly configured to send errors to Apollo studio for connector-enabled subgraph, which is only supported when `extended_error_metrics` is enabled"#) .await; Ok(()) @@ -866,7 +866,7 @@ mod telemetry { telemetry: apollo: errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled subgraph: all: send: true diff --git a/apollo-router/tests/integration/telemetry/apollo_otel_metrics.rs b/apollo-router/tests/integration/telemetry/apollo_otel_metrics.rs index 1b7f2dd6b8..34fce723ac 100644 --- a/apollo-router/tests/integration/telemetry/apollo_otel_metrics.rs +++ b/apollo-router/tests/integration/telemetry/apollo_otel_metrics.rs @@ -47,7 +47,7 @@ async fn test_validation_error_emits_metric() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled "#, ) .responder(ResponseTemplate::new(500).append_header("Content-Type", "application/json")) @@ -103,7 +103,7 @@ async fn test_subgraph_http_error_emits_metric() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled include_subgraph_errors: all: true "#, @@ -172,7 +172,7 @@ async fn test_subgraph_layer_error_emits_metric() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled "#, ) .responder( @@ -251,7 +251,7 @@ async fn test_subgraph_layer_entities_error_emits_metric() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled "#, ) .responder( @@ -331,7 +331,7 @@ async fn test_include_subgraph_error_disabled_does_not_redact_error_metrics() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled include_subgraph_errors: all: false "#, @@ -413,7 +413,7 @@ async fn test_supergraph_layer_error_emits_metric() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled supergraph: introspection: false "#, @@ -478,7 +478,7 @@ async fn test_execution_layer_error_emits_metric() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled forbid_mutations: true "#, ) @@ -545,7 +545,7 @@ async fn test_router_layer_error_emits_metric() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled csrf: required_headers: - x-not-matched-header @@ -618,7 +618,7 @@ async fn test_apollo_studio_metrics_not_affected_by_rename() { batch_processor: scheduled_delay: 100ms errors: - preview_extended_error_metrics: enabled + extended_error_metrics: enabled exporters: metrics: common: diff --git a/docs/shared/config/telemetry.mdx b/docs/shared/config/telemetry.mdx index 46f026d859..638cf7dbb4 100644 --- a/docs/shared/config/telemetry.mdx +++ b/docs/shared/config/telemetry.mdx @@ -27,7 +27,7 @@ telemetry: client_version_header: apollographql-client-version endpoint: https://usage-reporting.api.apollographql.com/api/ingress/traces errors: - preview_extended_error_metrics: disabled + extended_error_metrics: enabled subgraph: all: redact: true @@ -711,7 +711,7 @@ telemetry: client_version_header: apollographql-client-version endpoint: https://usage-reporting.api.apollographql.com/api/ingress/traces errors: - preview_extended_error_metrics: disabled + extended_error_metrics: enabled subgraph: all: redact: true diff --git a/docs/shared/router-config-properties-table.mdx b/docs/shared/router-config-properties-table.mdx index 5f85fd7708..fd24e20f04 100644 --- a/docs/shared/router-config-properties-table.mdx +++ b/docs/shared/router-config-properties-table.mdx @@ -736,7 +736,7 @@ telemetry: client_version_header: apollographql-client-version endpoint: https://usage-reporting.api.apollographql.com/api/ingress/traces errors: - preview_extended_error_metrics: disabled + extended_error_metrics: enabled subgraph: all: redact: true diff --git a/docs/shared/router-yaml-complete.mdx b/docs/shared/router-yaml-complete.mdx index ad5b89e29f..3006d1ac95 100644 --- a/docs/shared/router-yaml-complete.mdx +++ b/docs/shared/router-yaml-complete.mdx @@ -347,7 +347,7 @@ telemetry: client_version_header: apollographql-client-version endpoint: https://usage-reporting.api.apollographql.com/api/ingress/traces errors: - preview_extended_error_metrics: disabled + extended_error_metrics: enabled subgraph: all: redact: true diff --git a/docs/source/routing/configuration/yaml.mdx b/docs/source/routing/configuration/yaml.mdx index d663e9f71f..9d2599f422 100644 --- a/docs/source/routing/configuration/yaml.mdx +++ b/docs/source/routing/configuration/yaml.mdx @@ -804,13 +804,13 @@ The router supports extended error reporting in the following versions: You can configure the router to report extended error information for improved diagnostics. Apollo's legacy error reporting doesn't include the service or error code, meaning you can't easily attribute errors to their root cause in GraphOS Studio. -Configure extended reference reporting in `router.yaml` with the `telemetry.apollo.errors.preview_extended_error_metrics` option like so: +Configure extended reference reporting in `router.yaml` with the `telemetry.apollo.errors.extended_error_metrics` option. It is enabled by default; to opt out, set it to `disabled`: ```yaml title="router.yaml" telemetry: apollo: errors: - preview_extended_error_metrics: enabled # Default is disabled + extended_error_metrics: enabled # Default is enabled ``` [Learn more.](/graphos/routing/graphos-reporting#errors) diff --git a/docs/source/routing/observability/graphos/graphos-reporting.mdx b/docs/source/routing/observability/graphos/graphos-reporting.mdx index f7185d2fd1..4b2215e5af 100644 --- a/docs/source/routing/observability/graphos/graphos-reporting.mdx +++ b/docs/source/routing/observability/graphos/graphos-reporting.mdx @@ -440,16 +440,15 @@ telemetry:
-
-Enable richer error reporting via `preview_extended_error_metrics` and `redaction_policy` router configurations. +Enable richer error reporting via `extended_error_metrics` and `redaction_policy` router configurations. Extended error metrics are enabled by default; set `extended_error_metrics: disabled` to opt out. ```yaml title="router.yaml" telemetry: apollo: errors: - preview_extended_error_metrics: enabled # (default: disabled) + extended_error_metrics: enabled # (default: enabled) subgraph: all: # By default, subgraphs should report errors to GraphOS From b327b453dfe222e03d6acbc426cbe593af487078 Mon Sep 17 00:00:00 2001 From: Zach FettersMoore <4425109+BobaFetters@users.noreply.github.com> Date: Mon, 27 Jul 2026 13:28:08 -0400 Subject: [PATCH 2/5] Update changeset pr --- .changesets/breaking_zach_router_1910_telemetry_defaults.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changesets/breaking_zach_router_1910_telemetry_defaults.md b/.changesets/breaking_zach_router_1910_telemetry_defaults.md index bd5f064c56..a967a2dcd8 100644 --- a/.changesets/breaking_zach_router_1910_telemetry_defaults.md +++ b/.changesets/breaking_zach_router_1910_telemetry_defaults.md @@ -21,4 +21,4 @@ telemetry: extended_error_metrics: disabled ``` -By [@BobaFetters](https://github.com/BobaFetters) in https://github.com/apollographql/router/pull/ROUTER-1910 +By [@BobaFetters](https://github.com/BobaFetters) in https://github.com/apollographql/router/pull/9879 From ce8749aa5cc8305168300cc9d40bf95da51d5fc0 Mon Sep 17 00:00:00 2001 From: Zach FettersMoore <4425109+BobaFetters@users.noreply.github.com> Date: Fri, 14 Aug 2026 12:44:08 -0400 Subject: [PATCH 3/5] fix: set extended_error_metrics: disabled in connector incompatibility tests extended_error_metrics now defaults to Enabled, which suppresses the incompatibility warnings these tests assert on, causing wait_for_log_message to hang until timeout on credentialed runs. --- apollo-router/tests/integration/connectors.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apollo-router/tests/integration/connectors.rs b/apollo-router/tests/integration/connectors.rs index c0787cda84..92a2ccecf2 100644 --- a/apollo-router/tests/integration/connectors.rs +++ b/apollo-router/tests/integration/connectors.rs @@ -749,6 +749,7 @@ mod telemetry { telemetry: apollo: errors: + extended_error_metrics: disabled subgraph: all: send: true @@ -786,6 +787,7 @@ mod telemetry { telemetry: apollo: errors: + extended_error_metrics: disabled subgraph: all: send: false From 65151e5c8a83dbb281f35714022fb90d90e7bb0d Mon Sep 17 00:00:00 2001 From: Zach FettersMoore <4425109+BobaFetters@users.noreply.github.com> Date: Fri, 14 Aug 2026 15:18:51 -0400 Subject: [PATCH 4/5] test: update telemetry snapshots for subgraph_metrics/extended_error_metrics defaults Both now default to enabled, so router.operations.fetch.duration and the extended error span events/status show up in previously-captured snapshots that never opted out. Purely additive; no behavior change. --- .../metrics.snap | 11 +++++++ .../connector/custom_histogram/metrics.snap | 11 +++++++ .../http_client_request_duration/metrics.snap | 16 ++++++++-- .../connector/mapping_problems/metrics.snap | 12 +++++++- .../subgraph_and_connector/metrics.snap | 16 ++++++++++ .../fixtures/subgraph/caching/metrics.snap | 11 +++++++ .../subgraph/custom_counter/metrics.snap | 17 ++++++++--- .../metrics.snap | 17 ++++++++--- .../custom_counter_custom_value/metrics.snap | 19 ++++++++---- .../metrics.snap | 10 +++++++ .../metrics.snap | 10 +++++++ .../metrics.snap | 10 +++++++ .../metrics.snap | 10 +++++++ .../custom_histogram_duration/metrics.snap | 10 +++++++ .../metrics.snap | 9 ++++++ .../custom_histogram_unit/metrics.snap | 10 +++++++ .../metrics.snap | 9 ++++++ .../metrics.snap | 10 +++++++ .../metrics.snap | 10 +++++++ .../metrics.snap | 11 +++++++ .../metrics.snap | 10 +++++++ .../apollo_otel_traces__connector_error.snap | 30 +++++++++++++++++-- 22 files changed, 261 insertions(+), 18 deletions(-) diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_counter_with_conditions/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_counter_with_conditions/metrics.snap index df5e1cec39..ad1bfe9e55 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_counter_with_conditions/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_counter_with_conditions/metrics.snap @@ -25,6 +25,17 @@ info: - user_api - connector_source: name --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 2 + attributes: + connector.source: user_api + has_errors: false + subgraph.name: users - name: not.found.count description: Count of 404 responses from the user API unit: count diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_histogram/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_histogram/metrics.snap index 625db3923b..d01b25371d 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_histogram/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/custom_histogram/metrics.snap @@ -23,6 +23,17 @@ info: - user_api - connector_source: name --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 2 + attributes: + connector.source: user_api + has_errors: false + subgraph.name: users - name: rate.limit description: Rate limit remaining unit: count diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/http_client_request_duration/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/http_client_request_duration/metrics.snap index 057e879a3f..21ac9b6ed0 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/http_client_request_duration/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/http_client_request_duration/metrics.snap @@ -30,9 +30,21 @@ info: custom.supergraph.operation.kind: supergraph_operation_kind: string custom.has_error: - error: boolean -snapshot_kind: text + connector_on_response_error: true --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + connector.source: posts_api + graphql.operation.name: Test + graphql.operation.type: query + has_errors: false + subgraph.name: posts - name: http.client.request.duration description: Duration of HTTP client requests. unit: s diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/mapping_problems/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/mapping_problems/metrics.snap index 1efce9ccb4..dbbfd15a07 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/mapping_problems/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/mapping_problems/metrics.snap @@ -30,8 +30,18 @@ info: connector_response_mapping_problems: boolean unit: count type: counter -snapshot_kind: text --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 2 + attributes: + connector.source: user_api + has_errors: false + subgraph.name: users - name: request.mapping.problems description: Count of connectors request mapping problems unit: count diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/subgraph_and_connector/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/subgraph_and_connector/metrics.snap index bbf1d2ad82..77b106b874 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/subgraph_and_connector/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/connector/subgraph_and_connector/metrics.snap @@ -16,6 +16,22 @@ info: attributes: subgraph.name: true --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + connector.source: reviews_api + has_errors: false + subgraph.name: reviews + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: http.client.request.duration description: Duration of HTTP client requests. unit: s diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/caching/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/caching/metrics.snap index 4082d41e02..6fd3197b48 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/caching/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/caching/metrics.snap @@ -75,6 +75,17 @@ info: supergraph.operation.name: supergraph_operation_name: string --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + graphql.operation.name: Test + has_errors: false + subgraph.name: products - name: apollo.router.response.cache description: Response cache hit/miss operations at the subgraph level unit: ops diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter/metrics.snap index 919d30bb62..784d70fdee 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter/metrics.snap @@ -1,20 +1,29 @@ --- source: apollo-router/src/plugins/telemetry/config_new/instruments.rs -description: Test server request body size metrics +description: Custom counter expression: "&metrics.all()" info: telemetry: instrumentation: instruments: - router: - http.server.active_requests: false - http.server.request.duration: false + default_requirement_level: none + subgraph: custom_counter: description: count of requests type: counter unit: unit value: unit --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom_counter description: count of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_aborted_request/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_aborted_request/metrics.snap index 919d30bb62..92e640656e 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_aborted_request/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_aborted_request/metrics.snap @@ -1,20 +1,29 @@ --- source: apollo-router/src/plugins/telemetry/config_new/instruments.rs -description: Test server request body size metrics +description: "Custom counter aborted request, the supergraph response didn't happen, but request should increment the metric on Drop." expression: "&metrics.all()" info: telemetry: instrumentation: instruments: - router: - http.server.active_requests: false - http.server.request.duration: false + default_requirement_level: none + subgraph: custom_counter: description: count of requests type: counter unit: unit value: unit --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom_counter description: count of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_custom_value/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_custom_value/metrics.snap index 42f4e68f83..9e66b6ef27 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_custom_value/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_custom_value/metrics.snap @@ -1,21 +1,30 @@ --- source: apollo-router/src/plugins/telemetry/config_new/instruments.rs -description: Test server request body size metrics +description: Custom counter that gets a value from a header expression: "&metrics.all()" info: telemetry: instrumentation: instruments: - router: - http.server.active_requests: false - http.server.request.duration: false + default_requirement_level: none + subgraph: custom_counter: description: count of requests type: counter unit: unit value: - request_header: count_header + subgraph_request_header: count_header --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom_counter description: count of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_attributes/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_attributes/metrics.snap index ed04a2d04e..3bf7f69a9e 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_attributes/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_attributes/metrics.snap @@ -18,6 +18,16 @@ info: custom_attribute: subgraph_request_header: custom_header --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom_counter description: count of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_conditions/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_conditions/metrics.snap index 7cc4a760ff..a9598d63a8 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_conditions/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_counter_with_conditions/metrics.snap @@ -22,6 +22,16 @@ info: - subgraph_request_header: custom_header - allowed --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 2 + attributes: + has_errors: false + subgraph.name: products - name: custom_counter description: count of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_custom_value/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_custom_value/metrics.snap index c6df2c801b..14af65e6ef 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_custom_value/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_custom_value/metrics.snap @@ -15,6 +15,16 @@ info: value: subgraph_request_header: count_header --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom.histogram description: histogram of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration copy/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration copy/metrics.snap index f4ffc8c504..9453798701 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration copy/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration copy/metrics.snap @@ -13,6 +13,16 @@ info: subgraph.name: alias: apollo_subgraph_name --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: http.client.request.duration description: Duration of HTTP client requests. unit: s diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration/metrics.snap index 7eff2b686b..b1850d657a 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration/metrics.snap @@ -14,6 +14,16 @@ info: unit: unit value: duration --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom.histogram.duration description: histogram of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration_aborted_request/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration_aborted_request/metrics.snap index a76d8fa27b..481aa016af 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration_aborted_request/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_duration_aborted_request/metrics.snap @@ -14,6 +14,15 @@ info: unit: unit value: duration --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + subgraph.name: products - name: custom.histogram.duration description: histogram of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit/metrics.snap index 97055c3348..3918ff6a1e 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit/metrics.snap @@ -14,6 +14,16 @@ info: unit: unit value: unit --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom.histogram description: histogram of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit_aborted_request/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit_aborted_request/metrics.snap index 93633beaae..5f37495264 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit_aborted_request/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_unit_aborted_request/metrics.snap @@ -14,6 +14,15 @@ info: unit: unit value: unit --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + subgraph.name: products - name: custom.histogram description: histogram of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_attributes/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_attributes/metrics.snap index 7d7df87966..447c40e703 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_attributes/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_attributes/metrics.snap @@ -18,6 +18,16 @@ info: custom_attribute: subgraph_request_header: custom_header --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: custom.histogram description: histogram of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_conditions/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_conditions/metrics.snap index dd45cb8f47..64063b37be 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_conditions/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/custom_histogram_with_conditions/metrics.snap @@ -22,6 +22,16 @@ info: - subgraph_request_header: custom_header - allowed --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 2 + attributes: + has_errors: false + subgraph.name: products - name: custom.histogram description: histogram of requests unit: unit diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.request.body.size/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.request.body.size/metrics.snap index 4e8f392708..953c7a5ad0 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.request.body.size/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.request.body.size/metrics.snap @@ -13,7 +13,18 @@ info: subgraph: http.client.request.duration: false http.client.request.body.size: true + http.client.response.body.size: false --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: http.client.request.body.size description: Size of HTTP client request bodies. unit: By diff --git a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.response.body.size/metrics.snap b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.response.body.size/metrics.snap index 18cd3f7f18..0051713a90 100644 --- a/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.response.body.size/metrics.snap +++ b/apollo-router/src/plugins/telemetry/config_new/fixtures/subgraph/http.client.response.body.size/metrics.snap @@ -15,6 +15,16 @@ info: http.client.request.body.size: false http.client.response.body.size: true --- +- name: apollo.router.operations.fetch.duration + description: Duration of a subgraph fetch. + unit: s + data: + datapoints: + - sum: 0.1 + count: 1 + attributes: + has_errors: false + subgraph.name: products - name: http.client.response.body.size description: Size of HTTP client response bodies. unit: By diff --git a/apollo-router/tests/snapshots/apollo_otel_traces__connector_error.snap b/apollo-router/tests/snapshots/apollo_otel_traces__connector_error.snap index f8c308dc22..bbcb868667 100644 --- a/apollo-router/tests/snapshots/apollo_otel_traces__connector_error.snap +++ b/apollo-router/tests/snapshots/apollo_otel_traces__connector_error.snap @@ -268,13 +268,39 @@ resourceSpans: value: stringValue: query droppedAttributesCount: 0 - events: [] + events: + - timeUnixNano: "[time]" + name: "" + attributes: + - key: exception.message + value: + stringValue: Request failed + - key: graphql.error.extensions.code + value: + stringValue: CONNECTOR_FETCH + - key: graphql.error.path + value: + stringValue: "[redacted]" + droppedAttributesCount: 0 + - timeUnixNano: "[time]" + name: "" + attributes: + - key: exception.message + value: + stringValue: Request failed + - key: graphql.error.extensions.code + value: + stringValue: CONNECTOR_FETCH + - key: graphql.error.path + value: + stringValue: "[redacted]" + droppedAttributesCount: 0 droppedEventsCount: 0 links: [] droppedLinksCount: 0 status: message: "" - code: 0 + code: 2 - traceId: "[trace_id]" spanId: "[span_id]" traceState: "" From 57bbf8237de15d5041a3277d1f9ae4e4147d89c0 Mon Sep 17 00:00:00 2001 From: Zach FettersMoore <4425109+BobaFetters@users.noreply.github.com> Date: Mon, 17 Aug 2026 13:27:00 -0400 Subject: [PATCH 5/5] docs: reframe extended error reporting section as default-on Address PR review feedback: the "enabling" framing read oddly now that extended_error_metrics defaults to enabled. Co-Authored-By: Claude Sonnet 5 --- .../routing/observability/graphos/graphos-reporting.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/routing/observability/graphos/graphos-reporting.mdx b/docs/source/routing/observability/graphos/graphos-reporting.mdx index cc5b3e728e..02533df6f4 100644 --- a/docs/source/routing/observability/graphos/graphos-reporting.mdx +++ b/docs/source/routing/observability/graphos/graphos-reporting.mdx @@ -426,13 +426,13 @@ telemetry: send: false ``` -#### Enabling extended error reporting +#### Extended error reporting
-Enable richer error reporting via `extended_error_metrics` and `redaction_policy` router configurations. Extended error metrics are enabled by default; set `extended_error_metrics: disabled` to opt out. +By default, the router reports richer error information to Studio via the `extended_error_metrics` and `redaction_policy` configurations. To opt out, set `extended_error_metrics: disabled`. ```yaml title="router.yaml" telemetry: