Skip to content

feat(core): Emit low-cardinality cache.* span names - #23830

Merged
Lms24 merged 5 commits into
developfrom
lms/feat-core-cache-span-names
Sep 2, 2026
Merged

feat(core): Emit low-cardinality cache.* span names#23830
Lms24 merged 5 commits into
developfrom
lms/feat-core-cache-span-names

Conversation

@Lms24

@Lms24 Lms24 commented Sep 1, 2026

Copy link
Copy Markdown
Member

This PR:

  • emits low cardinality cache.* span names following the cache span name rules proposed in feat(names): Add cache span name rules sentry-conventions#605
    • affected integrations: Redis (cache), dataloader, nitro captureStorageEvents, nuxt createStoragePlugin
  • adjusts redis integration tests for static and streamed lifecycles and tests against correct names in each
  • deliberately NOT adjusts the redis logic to update db spans to cache spans. This will be tracked in a separate issue.

closes #23818

@Lms24 Lms24 self-assigned this Sep 1, 2026
@Lms24
Lms24 force-pushed the lms/feat-core-cache-span-names branch from c59c170 to a3d8a59 Compare September 1, 2026 12:06
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 28.57 kB - -
@sentry/browser - with treeshaking flags 26.94 kB - -
@sentry/browser - with treeshaking flags tracing without tracing 26.83 kB - -
@sentry/browser (incl. Tracing) 48.87 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 48.88 kB - -
@sentry/browser (incl. Tracing, Profiling) 51.8 kB - -
@sentry/browser (incl. Tracing, Replay) 88.36 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 77.76 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 93.05 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 106.02 kB - -
@sentry/browser (incl. Feedback) 46.06 kB - -
@sentry/browser (incl. sendFeedback) 33.64 kB - -
@sentry/browser (incl. FeedbackAsync) 38.74 kB - -
@sentry/browser (incl. Metrics) 29.52 kB - -
@sentry/browser (incl. Logs) 29.81 kB - -
@sentry/browser (incl. Metrics & Logs) 30.45 kB - -
@sentry/react 30.32 kB - -
@sentry/react (incl. Tracing) 51.08 kB - -
@sentry/vue 35.74 kB - -
@sentry/vue (incl. Tracing) 51.14 kB - -
@sentry/svelte 28.6 kB - -
CDN Bundle 30.36 kB - -
CDN Bundle (incl. Tracing) 49.52 kB +0.01% +1 B 🔺
CDN Bundle (incl. Logs, Metrics) 32.59 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 51.43 kB +0.01% +2 B 🔺
CDN Bundle (incl. Replay, Logs, Metrics) 73.19 kB - -
CDN Bundle (incl. Tracing, Replay) 87 kB -0.01% -7 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 88.88 kB +0.01% +1 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) 92.93 kB -0.02% -10 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 94.83 kB -0.01% -5 B 🔽
CDN Bundle - uncompressed 89.97 kB - -
CDN Bundle (incl. Tracing) - uncompressed 147.57 kB -0.01% -6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed 96.27 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 153.26 kB -0.01% -6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 225.43 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 267.07 kB -0.01% -6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 272.74 kB -0.01% -6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 280.77 kB -0.01% -6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 286.43 kB -0.01% -6 B 🔽
@sentry/nextjs (client) 53.7 kB - -
@sentry/sveltekit (client) 49.3 kB - -
@sentry/core/server 40.74 kB - -
@sentry/core/browser 13.42 kB - -
@sentry/node 124.12 kB +0.08% +99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection) 81.51 kB - -
@sentry/node - without tracing 88.3 kB +0.03% +22 B 🔺
@sentry/node - without channel injection 103.42 kB +0.09% +87 B 🔺
@sentry/aws-serverless 96.66 kB +0.03% +25 B 🔺
@sentry/cloudflare (withSentry) - minified 201.33 kB +0.05% +97 B 🔺
@sentry/cloudflare (withSentry) 501.09 kB +0.03% +149 B 🔺

View base workflow run

@Lms24
Lms24 force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5 Compare September 1, 2026 14:10
@Lms24
Lms24 marked this pull request as ready for review September 1, 2026 14:11
@Lms24
Lms24 requested review from a team as code owners September 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a team September 1, 2026 14:11
Comment thread packages/core/src/tracing/spans/spanNames.ts Outdated
Comment thread packages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24 and others added 5 commits September 2, 2026 12:38
The nuxt-3 test app runs with span streaming enabled, so cache spans now
carry the low-cardinality `cache.{operation}` name instead of falling back
to the cache keys. Also assert the newly emitted `cache.operation`
attribute, since the span name is derived from it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Lms24
Lms24 force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391 Compare September 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into develop Sep 2, 2026
290 checks passed
@Lms24
Lms24 deleted the lms/feat-core-cache-span-names branch September 2, 2026 10:58
Lms24 added a commit that referenced this pull request Sep 2, 2026
… suites

The streamed expectations these suites gained were written before #23830
landed, so they still expected cache spans to be named after the cache key
and carried no `cache.operation` attribute. Name them after the cache
operation the hook now uses, and fold the repeated peer/operation attributes
into a `cacheSpan` helper so the two cannot drift apart again.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Lms24 added a commit that referenced this pull request Sep 2, 2026
node-redis v4 writes its `localhost:6379` socket defaults back into
`client.options`, v5 does not. Reading the options as-is therefore reported
`server.address`/`server.port` for a v4 client and neither for the
identically configured v5 one — so the same client got `SET localhost:6383`
on v4 and the bare `redis` fallback on v5 once span names became low
cardinality.

Resolve the connection the way node-redis >= 5.12 reports it on its own
diagnostics channel instead: a TCP client falls back to `localhost:6379`,
and a unix socket reports its path as the address and no port. Batch spans
go through the same helper rather than repeating the option lookup.

The redis-cache suite picks up the low-cardinality cache names from #23830
in the same pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Lms24 added a commit that referenced this pull request Sep 2, 2026
… suites

The streamed expectations these suites gained were written before #23830
landed, so they still expected cache spans to be named after the cache key
and carried no `cache.operation` attribute. Name them after the cache
operation the hook now uses, and fold the repeated peer/operation attributes
into a `cacheSpan` helper so the two cannot drift apart again.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Lms24 added a commit that referenced this pull request Sep 2, 2026
node-redis v4 writes its `localhost:6379` socket defaults back into
`client.options`, v5 does not. Reading the options as-is therefore reported
`server.address`/`server.port` for a v4 client and neither for the
identically configured v5 one — so the same client got `SET localhost:6383`
on v4 and the bare `redis` fallback on v5 once span names became low
cardinality.

Resolve the connection the way node-redis >= 5.12 reports it on its own
diagnostics channel instead: a TCP client falls back to `localhost:6379`,
and a unix socket reports its path as the address and no port. Batch spans
go through the same helper rather than repeating the option lookup.

The redis-cache suite picks up the low-cardinality cache names from #23830
in the same pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Lms24 added a commit that referenced this pull request Sep 2, 2026
With span streaming enabled, redis `db.query` spans are named
`{db.operation.name} {server.address}:{server.port}`. Redis has no SQL
statement to summarize and no collection to pair the command with, so
the connection is the only low-cardinality target left. The command and
its arguments stay on `db.query.text`. `db.namespace` is not used: for
redis it is the numeric database index.

| | static | streamed |
|---|---|---|
| ioredis | `set test-key [1 other arguments]` | `set localhost:6379` |
| node-redis | `SET test-key [1 other arguments]` | `SET localhost:6379`
|
| native DC | `redis-SET` | `SET localhost:6379` |
| unix socket | `SET test-key [1 other arguments]` | `redis` |
| `FCALL` | unchanged | `fcall my_func` |
| batch | `MULTI` / `PIPELINE` | unchanged |
| cache | unchanged | unchanged |

Changes:

- `FCALL`/`FCALL_RO` are named after the redis function
- New `db.stored_procedure.name` attribute holds that function name
- Skipped when the library redacted the function name
- Batch spans now also set `db.operation.name`
- node-redis clients always report `server.address` and `server.port`
- Cache span names untouched, already made low cardinality in #23830
- Streamed tests added to four redis suites
- `MIGRATION.md` entry added

node-redis v4 writes its `localhost:6379` socket defaults back into
`client.options`, v5 does not. The same client therefore reported a
connection on v4 and none on v5. Both now resolve it the way node-redis
>= 5.12 publishes it on its diagnostics channel, in both trace
lifecycles.
s1gr1d added a commit that referenced this pull request Sep 2, 2026
Storage span names are `cache.{operation}` under span streaming since #23830.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
s1gr1d added a commit that referenced this pull request Sep 2, 2026
Storage span names are `cache.{operation}` under span streaming since #23830.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
s1gr1d added a commit that referenced this pull request Sep 2, 2026
Storage span names are `cache.{operation}` under span streaming since #23830.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Emit low cardinality cache span names

2 participants