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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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

@Lms24Lms24 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

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

github-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser28.57 kB--
@sentry/browser - with treeshaking flags26.94 kB--
@sentry/browser - with treeshaking flags tracing without tracing26.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 flags77.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/react30.32 kB--
@sentry/react (incl. Tracing)51.08 kB--
@sentry/vue35.74 kB--
@sentry/vue (incl. Tracing)51.14 kB--
@sentry/svelte28.6 kB--
CDN Bundle30.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 - uncompressed89.97 kB--
CDN Bundle (incl. Tracing) - uncompressed147.57 kB-0.01%-6 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed96.27 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed153.26 kB-0.01%-6 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed225.43 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed267.07 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed272.74 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed280.77 kB-0.01%-6 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed286.43 kB-0.01%-6 B 🔽
@sentry/nextjs (client)53.7 kB--
@sentry/sveltekit (client)49.3 kB--
@sentry/core/server40.74 kB--
@sentry/core/browser13.42 kB--
@sentry/node124.12 kB+0.08%+99 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)81.51 kB--
@sentry/node - without tracing88.3 kB+0.03%+22 B 🔺
@sentry/node - without channel injection103.42 kB+0.09%+87 B 🔺
@sentry/aws-serverless96.66 kB+0.03%+25 B 🔺
@sentry/cloudflare (withSentry) - minified201.33 kB+0.05%+97 B 🔺
@sentry/cloudflare (withSentry)501.09 kB+0.03%+149 B 🔺

View base workflow run

@Lms24
Lms24force-pushed the lms/feat-core-cache-span-names branch from a3d8a59 to 7c951f5CompareSeptember 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 ownersSeptember 1, 2026 14:11
@Lms24
Lms24 requested review from isaacs, mydea, nicohrubec and s1gr1d and removed request for a teamSeptember 1, 2026 14:11
Comment threadpackages/core/src/tracing/spans/spanNames.ts Outdated
Comment threadpackages/server-utils/src/integrations/redis/redis-cache.ts Outdated
Lms24and 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
Lms24force-pushed the lms/feat-core-cache-span-names branch from 99e03e0 to 58b1391CompareSeptember 2, 2026 10:41
@Lms24
Lms24 enabled auto-merge (squash) September 2, 2026 10:41
@Lms24
Lms24 merged commit bffac10 into developSep 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 freeto 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

@Lms24@chargome