@sentry/cloudflare: Durable Object RPC methods drop metrics, logs and errors unless the caller propagates a trace
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 63/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- typescript
- Domaine
- observability
Piste de recherche
Commencez par createRpcPrototypeWrapper et comparez son chemin lorsque les métadonnées sont absentes avec le wrapper de capture uniquement de instrumentWorkerEntrypoint et wrapMethodWithSentry. Reproduisez un appel RPC externe depuis le plain worker de l’issue, puis vérifiez que les appels sans métadonnées s’exécutent avec un client et un isolation scope, flushent les métriques et les erreurs, et laissent les appels internes à this.method() non enveloppés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Environment
@sentry/cloudflare: 10.74.0 (same logic ondevelop/11.0.0-beta.2)- DO wrapped with
instrumentDurableObjectWithSentry,enableRpcTracePropagation: true(the only
supported way to instrument RPC methods in v11, now thatinstrumentPrototypeMethodsis removed)
Description
createRpcPrototypeWrapper only calls wrapMethodWithSentry when the last argument carries
__sentry_rpc_meta__. Otherwise the original method runs with no client bound. Then:
Sentry.metrics.count/gauge/distributionreturn early (no client);Sentry.captureExceptionandSentry.logger.*are dropped;- no
rpcspan is recorded, and a thrown error is not captured.
Callers send the metadata only if they are Sentry-instrumented, have an active trace, and got the stub
through get/getByName on the instrumented env (see #24442). Common cases that lose everything:
- calls from uninstrumented workers or mixed deployments;
- calls from code running outside the request's async context;
- any call through
jurisdiction().
WorkerEntrypoint already covers this case: instrumentWorkerEntrypoint uses a capture-only wrapper
when the metadata is missing. Durable Objects have no equivalent. fetch, alarm and webSocket* are
always wrapped, so only RPC is affected. That makes the gap easy to miss: our production data had
14 days of DO alarm spans and zero DO rpc spans.
Reproduction
class MyDO extends DurableObject {
async ping() {
Sentry.metrics.count('my_do.ping', 1);
throw new Error('boom');
}
}
export const MyDOInstrumented = Sentry.instrumentDurableObjectWithSentry(
env => ({ dsn: env.SENTRY_DSN, tracesSampleRate: 1, enableRpcTracePropagation: true }),
MyDO,
);
// From a plain (uninstrumented) worker:
await env.MY_DO.get(env.MY_DO.idFromName('x')).ping();
Neither the metric nor the error reaches Sentry.
Expected
External RPC calls without metadata still run inside a client and isolation scope with flush, as
WorkerEntrypoint does. Internal this.method() calls stay unwrapped.
Proposed fix
A PR with this change will follow.
- Langage dominant
- TypeScript
- Étoiles
- 8.7k
- Forks
- 1.9k
- Merge moyen
- 1 j 16 h
- PR mergées (30 j)
- 576
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de getsentry/sentry-javascript
-
Browser Bug Next.js Traces Waiting for: Product Owner
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
getsentry/sentry-javascript#24672 · 1 commentaire ·
-
Flaky Test React Router Framework Spans Tests
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
getsentry/sentry-javascript#24348 · 1 commentaire ·
-
javascript
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
getsentry/sentry-javascript#24200 · 2 commentaires ·
-
javascript Task
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
getsentry/sentry-javascript#24134 · 1 commentaire ·
-
Cloudflare Workers javascript Tests
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
getsentry/sentry-javascript#24051 · 1 commentaire ·
Toutes les issues de getsentry/sentry-javascript
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
mksglu/context-mode#1200 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
jaegertracing/jaeger-ui#4506 ·
-
area:desktop area:ui bug platform:macos
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
anthropics/claude-code#96687 ·
-
good first issue
Difficulté 1/5 Moins d'une heure Accessibilité débutants 95/100
AOSSIE-Org/DebateAI#582 · 2 commentaires ·