getsentry / sentry-javascript

Official Sentry SDKs for JavaScript
https://sentry.io
MIT License
7.85k stars 1.55k forks source link

Unable to set transaction name using Nest.js, Apollo GraphQL & @sentry/nestjs #12990

Open nino-vrijman opened 1 month ago

nino-vrijman commented 1 month ago

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/nestjs

SDK Version

8.19.0

Framework Version

10.3.10

Link to Sentry event

https://nino-vrijman.sentry.io/performance/trace/9dd0463a73c42f414ee79f41e3cf67bd/?node=span-cf85ed63b585ac8f&node=txn-709d8314ffb94ea8a642738416f3efda&project=5585265&query=http.method%3APOST&referrer=performance-transaction-summary&source=performance_transaction_summary&statsPeriod=3m&timestamp=1721399127&transaction=POST+%2Fgraphql&unselectedSeries=p100%28%29&unselectedSeries=avg%28%29

SDK Setup/Reproduction Example

Link to reproduction in a fresh Nest.js project: https://github.com/nino-vrijman/nest-graphql-sentry-transation-name

// eslint-disable-next-line @typescript-eslint/no-var-requires
const Sentry = require('@sentry/nestjs');

// Ensure to call this before requiring any other modules!
Sentry.init({
  dsn: process.env.SENTRY_DSN,
  sampleRate: 1.0,
  tracesSampleRate: 1.0,
  profilesSampler: 1.0,
  environment: 'localhost',
  integrations: [Sentry.nestIntegration(), Sentry.graphqlIntegration()],
});

Steps to Reproduce

  1. Run back-end using SENTRY_DSN=<your sentry dsn> npm run start:dev
  2. Do a simple GraphQL request with a name of choice: query TestTransactionName { hello }
  3. Check logs that the transaction name seems to have changed in multiple places, most notably in the isolation scope which seems to be the culprit. Only the active span name has been updated.
  4. Check Sentry > Performance and see that every query is grouped under POST /graphql instead of the GraphQL query name like TestTransactionName

Image

Image

Expected Result

The Transaction name on the Performance page is set to GraphQL query TestTransactionName

Actual Result

Everything is grouped under POST /graphql

Image

andreiborza commented 1 month ago

Hello, thanks for writing in. This is possibly related/a duplicate of https://github.com/getsentry/sentry-javascript/issues/12887. We will check on Monday.

As an aside (and unrelated to this issue), I also noticed you are adding Sentry.nestIntegration. This is no longer required if you're using @sentry/nestjs.

andreiborza commented 1 month ago

@nino-vrijman please check https://github.com/getsentry/sentry-javascript/issues/12887#issuecomment-2248277018 and see if this could work for you.

nino-vrijman commented 4 weeks ago

@andreiborza I'm hopefully able to test the linked workaround on this friday or friday next week, I'll get back to you here.

andreiborza commented 4 weeks ago

@nino-vrijman we have a PR for an improvement in the works that should make this a lot easier. You can follow the progress here: https://github.com/getsentry/sentry-javascript/pull/13248.

nino-vrijman commented 4 weeks ago

Setting the transaction name as described in this comment in beforeSendTransaction works as expected, thanks for sharing!

I'm curious to see the progress in https://github.com/getsentry/sentry-javascript/pull/13248, ideally it would be possible to set the transaction name in Nest.js' interceptors similar to how I attempted to do it in my reproduction repo and similar to how it worked prior to Sentry v8.

andreiborza commented 4 weeks ago

@nino-vrijman we're planning to release #13248 within this week. As for interceptors, feel free to file a new issue.