Skip to content

Commit 7f02e2f

Browse files
committed
Move span name migration entry to the v11 end state doc
1 parent 05dca2e commit 7f02e2f

2 files changed

Lines changed: 48 additions & 47 deletions

File tree

MIGRATION.md

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -613,53 +613,6 @@ These changes are not caught by TypeScript. If you filter, group, or alert on sp
613613
| `browser.TLS/SSL` | `browser.tls_ssl` |
614614
| `browser.DNS` | `browser.dns` |
615615

616-
### Span name changes
617-
618-
Affected SDKs: All SDKs.
619-
620-
With [span streaming](#span-streaming-is-now-the-default) enabled(the default), span names are now **low cardinality**, following the [Sentry span name conventions](https://getsentry.github.io/sentry-conventions/names/).
621-
622-
If you [opt out of span streaming](#opting-out-of-span-streaming), span names remain unchanged.
623-
624-
The following span names were adjusted:
625-
626-
| Span op | Before | After |
627-
| ------------ | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
628-
| `pageload` | The parameterized route, or the raw URL path if the SDK couldn't resolve one (`/users/123`) | The parameterized route, or `Pageload` if the SDK has none |
629-
| `router` | Framework-specific, sometimes containing the raw URL (`/users/123`, `SvelteKit Route Change`) | The span's `http.route`, or `Router` if the SDK has none |
630-
| `graphql` | The graphql phase and, for operations, the operation name (`query GetUser`, `graphql.parse`, `graphql.resolve user.0.name`) | The operation type, or the processing type where there is none (`GraphQL query`, `GraphQL parse`, `GraphQL resolve`) |
631-
| `resource.*` | The resource URL, relative to the page origin for same-origin resources (`/assets/app.js`) | The resource domain (`cdn.example.com`), or `Resource` if the SDK has none |
632-
633-
Resource spans now also carry a `url.domain` attribute holding that domain. The full URL remains available on `url.full`.
634-
635-
Some consequences to be aware of:
636-
637-
The graphql operation name and the resolver field path are supplied by the client, so they are no longer part of a span name. They remain available on the `graphql.operation.name` and `graphql.field.path` attributes.
638-
639-
Because a low-cardinality name cannot say which part of request processing a span covers, every graphql span now carries a `graphql.processing.type` attribute (`parse`, `validate`, `execute` or `resolve`). Use it to tell parse, validate and resolve spans apart. The attribute is set in both trace lifecycles.
640-
641-
For the same reason, `useOperationNameForRootSpan` no longer renames the enclosing root span (`GET /graphql` stays `GET /graphql`, instead of becoming `GET /graphql (query GetUser)`). The operations are still recorded on that span's `sentry.graphql.operation` attribute, as long as the option stays enabled (the default). Disabling it skips both, as before.
642-
643-
Only the Express, Koa and Hapi integrations resolve a route template for `router` spans. Angular, Ember and SvelteKit have none when the span starts, so their router spans are named `Router`.
644-
645-
Child spans of a service or root span carry its name in their `sentry.segment.name` attribute, so that changes with it. If you group or filter spans by segment name in dashboards or alerts, update those references.
646-
647-
`ignoreSpans` is evaluated when a span **starts**, at which point a span might not yet have its final name. For example, an unresolved pageload span name is named `'Pageload'` and might receive its final, resolved route name later.
648-
`ignoreSpans` filters matching a URL path no longer apply to them.
649-
Another example where filters might need adjustments are `resource.*` spans where their name now only includes the domain the resource was taken from.
650-
651-
Match on attributes instead:
652-
653-
```js
654-
Sentry.init({
655-
// Before
656-
ignoreSpans: ['/health'],
657-
658-
// After
659-
ignoreSpans: [{ name: 'Pageload', attributes: { 'sentry.op': 'pageload', 'url.path': '/health' } }],
660-
});
661-
```
662-
663616
### LangGraph no longer emits `create_agent` spans
664617

665618
Affected SDKs: All server-side SDKs.

docs/migration/v11-end-state.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,54 @@ These changes are not caught by TypeScript. If you filter, group, or alert on sp
743743
| `browser.TLS/SSL` | `browser.tls_ssl` |
744744
| `browser.DNS` | `browser.dns` |
745745

746+
### Span name changes
747+
748+
Affected SDKs: All SDKs.
749+
750+
With [span streaming](#span-streaming-is-now-the-default) enabled(the default), span names are now **low cardinality**, following the [Sentry span name conventions](https://getsentry.github.io/sentry-conventions/names/).
751+
752+
If you [opt out of span streaming](#opting-out-of-span-streaming), span names remain unchanged.
753+
754+
The following span names were adjusted:
755+
756+
| Span op | Before | After |
757+
| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
758+
| `pageload` | The parameterized route, or the raw URL path if the SDK couldn't resolve one (`/users/123`) | The parameterized route, or `Pageload` if the SDK has none |
759+
| `router` | Framework-specific, sometimes containing the raw URL (`/users/123`, `SvelteKit Route Change`) | The span's `http.route`, or `Router` if the SDK has none |
760+
| `graphql` | The graphql phase and, for operations, the operation name (`query GetUser`, `graphql.parse`, `graphql.resolve user.0.name`) | The operation type, or the processing type where there is none (`GraphQL query`, `GraphQL parse`, `GraphQL resolve`) |
761+
| `resource.*` | The resource URL, relative to the page origin for same-origin resources (`/assets/app.js`) | The resource domain (`cdn.example.com`), or `Resource` if the SDK has none |
762+
| `mcp.notification.client_to_server`, `mcp.notification.server_to_client` | The notification method name (`notifications/tools/list_changed`) | The notification method name, or `MCP notification` if the message carries none |
763+
764+
Resource spans now also carry a `url.domain` attribute holding that domain. The full URL remains available on `url.full`.
765+
766+
Some consequences to be aware of:
767+
768+
The graphql operation name and the resolver field path are supplied by the client, so they are no longer part of a span name. They remain available on the `graphql.operation.name` and `graphql.field.path` attributes.
769+
770+
Because a low-cardinality name cannot say which part of request processing a span covers, every graphql span now carries a `graphql.processing.type` attribute (`parse`, `validate`, `execute` or `resolve`). Use it to tell parse, validate and resolve spans apart. The attribute is set in both trace lifecycles.
771+
772+
For the same reason, `useOperationNameForRootSpan` no longer renames the enclosing root span (`GET /graphql` stays `GET /graphql`, instead of becoming `GET /graphql (query GetUser)`). The operations are still recorded on that span's `sentry.graphql.operation` attribute, as long as the option stays enabled (the default). Disabling it skips both, as before.
773+
774+
Only the Express, Koa and Hapi integrations resolve a route template for `router` spans. Angular, Ember and SvelteKit have none when the span starts, so their router spans are named `Router`.
775+
776+
Child spans of a service or root span carry its name in their `sentry.segment.name` attribute, so that changes with it. If you group or filter spans by segment name in dashboards or alerts, update those references.
777+
778+
`ignoreSpans` is evaluated when a span **starts**, at which point a span might not yet have its final name. For example, an unresolved pageload span name is named `'Pageload'` and might receive its final, resolved route name later.
779+
`ignoreSpans` filters matching a URL path no longer apply to them.
780+
Another example where filters might need adjustments are `resource.*` spans where their name now only includes the domain the resource was taken from.
781+
782+
Match on attributes instead:
783+
784+
```js
785+
Sentry.init({
786+
// Before
787+
ignoreSpans: ['/health'],
788+
789+
// After
790+
ignoreSpans: [{ name: 'Pageload', attributes: { 'sentry.op': 'pageload', 'url.path': '/health' } }],
791+
});
792+
```
793+
746794
### AI integrations no longer trace non-inference operations
747795
748796
Affected SDKs: All server-side SDKs.

0 commit comments

Comments
 (0)