Sentry-javascript: Quellcode für index.js wurde nicht gefunden

Erstellt am 6. Dez. 2018  ·  28Kommentare  ·  Quelle: getsentry/sentry-javascript

Paket + Version

  • [ ] @sentry/browser
  • [x] @sentry/node
  • [ ] raven-js
  • [ ] raven-node _(Rabe für Knoten)_
  • [ ] andere:

Ausführung:

4.4.1

Beschreibung

Der folgende Ereigniserfassungscode erzeugt beim Parsen des Ereignisses einen Fehler in Sentry: Source code was not found for /.../index.js

const Sentry = require('@sentry/node');

Sentry.init({ dsn: 'https://5d29[...][email protected]/13[...]6' });

(async () => {
  const sentryEvent = await Sentry.Parsers.parseError(new Error('Test'));
  Sentry.captureEvent(sentryEvent);
})();

So sieht die Veranstaltung in Sentry aus:
Sentry Event Screenshot

Needs Information

Hilfreichster Kommentar

Ok, das sieht für mich nach einem UX-Fehler aus. Meiner Meinung nach sollte es (zumindest für Node.js-Projekte) nur eine Warnung sein und es darf nicht Source code was not found sondern so etwas wie Source maps were not found lauten. Dies hätte ein Problem mit einer Historie von mehr als einem Jahr verhindert ;)
Wenn Sie möchten, können Sie dieses Problem als Bericht für jeden, der am Frontend/Display-Teil arbeitet, erneut öffnen oder es einfach geschlossen lassen und ihm dieses Missverständnis melden. Vielen Dank für die abschließende Klärung!

Alle 28 Kommentare

Kannst du einen direkten Link zur Veranstaltung posten?

(Du hast auch einige Pfade im Stacktrace-Screenshot übersehen, den du zuvor maskiert hast 😅)

Gibt es einen bestimmten Grund, warum Sie Sentry.captureException direkt verwenden, sondern Ihr eigenes Event erstellen möchten?

Yepp, dies ist die Veranstaltung: https://sentry.io/share/issue/e2c8d20b66d2406cb32c540d87654b4a/ (leicht geändert, um unseren DSN nicht zu veröffentlichen)

Der Grund, warum ich Sentry.captureEvent() ist der folgende: Ich betreibe ein hapi- sentry ./index.js#L41-L67

@guischdi Der Grund, warum Sie diesen Fehler erhalten, ist, dass lokale Dateipfade für
Sentry versucht, /something/local/src/app.js zu holen und aufzulösen und den Quellcode daraus zu lesen, um bessere Fehlerzuordnungen bereitzustellen (es funktioniert auf die gleiche Weise mit Sourcemap-Dateien).

Um Ihre Dateien hochzuladen, können Sie unser CLI https://docs.sentry.io/cli/ oder das Webpack-Plugin https://github.com/getsentry/sentry-webpack-plugin verwenden

Hier sind einige alte Dokumente zu Quellkarten, aber das Konzept ist das gleiche für das neue SDK https://docs.sentry.io/clients/node/sourcemaps/ (alles gilt in gleicher Weise für Ihr aktuelles Problem).

Es gibt auch eine vorhandene Integration, mit der Sie Pfade in jedem Frame neu schreiben können https://github.com/getsentry/sentry-javascript/blob/master/packages/core/src/integrations/pluggable/rewriteframes.ts

Also zum Beispiel:

Sentry.init({
  dsn: "https://[email protected]/297378",
  integrations: [new Sentry.Integrations.RewriteFrames()]
});

Wird /something/local/src/app.js in app:///app.js ändern ( app:/// ist unser internes Präfix), wenn Sie also app.js zu Ihren Wachposten-Release-Artefakten hochladen, wird es ohne korrekt gelesen eine Notwendigkeit, externe Dateien abzurufen.

Im Wesentlichen müssen Sie Folgendes tun:

  • einen release init Anruf in
  • Laden Sie Ihre Quellen auf dieselbe Version im Sentry hoch
  • Stellen Sie sicher, dass Frames in Fehlern, die Sie finden, denen aus Ihren Upload-Dateien entsprechen

Ich hoffe, es klärt einige Dinge für Sie. Fühlen Sie sich frei, alles zu fragen, wenn Sie weitere Hilfe benötigen.

Hallo @kamilogorek
Danke für deine ausführliche Antwort.

Habe ich es richtig gemacht: Der übliche Weg, um einen Stack-Trace einer Node.js-Anwendung in Sentry anzuzeigen, besteht darin, die Dateien jeder Version über die RewriteFrames-Integration oder manuell hochzuladen? Wenn ja, wie kommt es, dass der Stacktrace auf captureException /catch-all angezeigt wird und kein 'Quellcode nicht gefunden'-Fehler ausgelöst wird.

Ich habe getestet, wie das Ausgeben eines Fehlers in einer node_modules Bibliothek funktioniert. Der Fehler wird korrekt gemeldet, einschließlich des Quellcodes sogar aus der Bibliothek. Siehe https://sentry.io/share/issue/2b95ecb13ce24227b2184b2561e4f6e3/

Warum funktioniert das mit captureException und schlägt mit captureEvent fehl?

Sentry Screenshot

@guischdi kannst du den vollständigen Link zu beiden Veranstaltungen

Außerdem bin ich die nächsten 3 Wochen abwesend, also werde ich versuchen, auf dieses zurückzukommen, wenn ich zurückkomme.

@kamilogorek

  • das ist der captureEvent Link
  • das ist der captureException Link

Danke, dass du dir das angeschaut hast!

@kamilogorek Meinst du, ich muss auch für jede Veröffentlichung den gesamten node_modules Ordner hochladen? Warum @sentry/node wenn auf dem Server ausgeführt wird und all diese Quellen verfügbar sind, können die erforderlichen Dateien mit Fehlerbericht einfach nicht hochgeladen werden?

Ich bestätige, dass nach dem Einstellen der Frame-Integration und dem Hochladen von ganzen node_modules dieses Problem für mich behoben ist. Aber das Hochladen so vieler node_modules-Dateien ist extrem langsam.

Ich glaube, die Lösung dafür ist entweder:

  1. Erlauben Sie der Wache, ein .tar der gesamten Veröffentlichung hochzuladen
  2. kompilieren Sie das Knotenprojekt in einzelne .js und .map und stellen Sie nur diese beiden Dateien bereit und laden Sie sie hoch.

Außerdem hatte ich ein Problem mit Quellzuordnungen, die auf die ursprüngliche .ts Datei verwiesen, die nicht im node_modules npm-Paket enthalten war - https://github.com/prisma/graphql-middleware/issues/159

@kamilogorek Gibt es Neuigkeiten zu diesem Thema?

Ich kann auch bestätigen, dass das Umschreiben von Frames die Lösung für uns war.

Unser Fall ist etwas anders, wir haben versucht, Sourcemaps zum Laufen zu bringen, aber die minimierte Datei wurde immer von Sentry verwendet. Für das entsprechende Release laden wir minifizierte Dateien sowie zugehörige Sourcemaps hoch. Es scheint, dass Sentry die Quellzuordnung nicht gefunden hat und standardmäßig die minimierte Datei verwendet (die jedoch immer noch unter demselben Pfad wie die Quellzuordnungen gehostet wird).

Wir haben gerade new Integrations.RewriteFrames() zum Schlüssel der Integrationen zu Sentrys Init hinzugefügt, und Sourcemaps wurden für jede neue Ausgabe aufgenommen.

Es ist gut zu wissen, dass die RewriteFrames Integration und das Hochladen von node_modules das Problem zu lösen scheint. Aber zunächst (wie @mieszko4 bereits erwähnt) ist das Hochladen so vieler Dateien ziemlich nervig. Und außerdem war meine erste Erkenntnis,

dass der Stacktrace auf captureException /catch-all angezeigt wird und kein 'Quellcode nicht gefunden'-Fehler ausgelöst wird

Somit bleibt folgende Frage offen:

Warum funktioniert das mit captureException und schlägt mit captureEvent fehl?

Genauer gesagt: Man kann einen Fehler einfach über captureException erfassen, aber für die Erfassung über captureEvent ein Upload aller Dateien ( RewriteFrames Integration oder manuell) erforderlich, um dies zu verhindern der "Quellcode wurde nicht gefunden"-Fehler. Ist das ein Fehler oder beabsichtigt, @kamilogorek?

@guischdi sorry für die späte Antwort. Ich habe ein bisschen eine Spur verloren. Können Sie mein Gedächtnis auffrischen, was hier vor sich geht, und einige Beispielereignisse bereitstellen?

@kamilogorek
Ja, unser Problem ist:

  • captureException funktioniert einwandfrei, auch wenn ein node_module einen Fehler auslöst; siehe diese Testausnahme
  • captureEvent geben Wachposten: error encountered while processing this event: [...] Source code was not found ; Sehen Sie sich diese Testveranstaltung an

@guischdi nur zur Bestätigung, dies ist eine Raw-Node-JS-Datei, oder? kein Webpack, keine Kompilierung, keine Quellzuordnungen. Nur eine index.js Datei mit 2 verschiedenen Anrufen auf verschiedenen Leitungen? Können Sie den Inhalt dieser Datei wenn möglich bereitstellen?

@kamilogorek
Ja, raw nodeJS. Schauen Sie sich das zweite Problem an, index.js .

@guischdi wir untersuchen, warum es sich so verhält (2 aufeinanderfolgende Frames mit derselben URL lösen dies aus). In der Zwischenzeit können Sie in den Einstellungen Ihres Projekts "JavaScript Source Fetching aktivieren" deaktivieren, z. https://sentry.io/settings/kamil-ogorek/projects/testing-project/
Es ist eine Node-App, also hat es keinen Sinn, das zu tun.

@kamilogorek Ok, ich habe die Einstellung "JavaScript Source Fetching deaktiviert und einen weiteren Fehler ausgelöst. Aber immer noch 1 error encountered while processing this event: [...] Source code was not found (siehe diese Ausgabe )

Seltsam, das funktioniert bei mir ganz gut. Wie auch immer, wir werden versuchen zu untersuchen, warum das passiert, obwohl ich nicht versprechen kann, wann es passiert, da es kein großes Problem ist, das verhindert, dass etwas funktioniert. Sie auf dem Laufenden halten!

@kamilogorek gibt es dazu Neuigkeiten?

Für mich meldet die Problemansicht, dass im Quellcode einige Dateien fehlen, aber alle sind vorhanden und unter dem Stack-Trace sichtbar.

Ich betreibe Sentry selbst gehostet und verwende @sentry/node 5.4.3

Hier ist mein Code:

// file: <path>/code/cli
const Sentry = require('@sentry/node');
Sentry.init({ dsn: process.env.SENTRY_DSN });
function test () {
  throw new Error('test');
}
test();

Ich bekomme auch diesen Fehler:

image

Und hier ist der Stapel:

Error: test
  File "<path>/code/cli", line 10, col 9, in test
    throw new Error('test');
  File "<path>/code/cli", line 13, col 1, in Object.<anonymous>
    test();
  File "internal/modules/cjs/loader.js", line 1063, col 30, in Module._compile
  File "internal/modules/cjs/loader.js", line 1103, col 10, in Module._extensions..js
  File "internal/modules/cjs/loader.js", line 914, col 32, in Module.load
  File "internal/modules/cjs/loader.js", line 822, col 14, in Module._load
  File "internal/modules/cjs/loader.js", line 1143, col 12, in Module.runMain
  File "internal/main/run_main_module.js", line 16, col 11, in null.<anonymous>

Ich stoße auch auf dieses Problem Source code was not found

@LukeXF können Sie einen Link zu einem betroffenen Ereignis bereitstellen?

Der Grund, warum Sie den Quellkontext (d. h. Code über und unter der fraglichen Zeile) sehen können, obwohl Sie die Fehler "Quellcode nicht finden" erhalten, liegt darin, dass wir im SDK, bevor wir das Ereignis senden, Zeichnen Sie diese Informationen als Teil der Verarbeitung des Stacktrace auf . Der Fehler kommt vom Server, der _auch_ versucht, diese Informationen einzugeben.

Das ist jedoch ein Fehler unsererseits, da wir nicht erwarten, dass Sie bei jeder Veröffentlichung node_modules hochladen (für Node-Apps; für Browser-Apps werden Sie wahrscheinlich sowieso bündeln/verkleinern). Sollte von https://github.com/getsentry/sentry/pull/17538 behoben werden, das in wenigen Stunden bereitgestellt wird.

Wenn das Problem behoben ist, kann uns jemand, der hier einen Kommentar hinterlassen hat, bitte mitteilen, ob Sie immer noch Probleme/Fragen haben und was diese sind? Gerne bei Bedarf wieder öffnen.

Hallo @lobsterkatie
habe es noch einmal getestet, mit dem folgenden Snippet (aus der aktuellen README auf npm gestrichen):

const Sentry = require('@sentry/node');

Sentry.init({ dsn: process.env.DSN });

(async () => {
  Sentry.captureException(new Error('Good bye'));
})();

Leider erhalten wir immer noch den Source code was not found Fehler auf https://sentry.io/share/issue/0247fe07741c4e358089461f113cef42/
Ist der Fix, den Sie gestern eingeführt haben, bereits bereitgestellt?

Auch getestet mit der aktuellen Version v4.xx (v4.6.6) und der neuesten Version (v5.14.0) von @sentry/node.

@guischdi du hast keine Artefakte hochgeladen, noch ein Release in deine Konfiguration aufgenommen.

Bitte folgen Sie zuerst den Dokumenten: https://docs.sentry.io/platforms/node/sourcemaps/

@kamilogorek

im SDK zeichnen wir diese Informationen im Rahmen der Verarbeitung des Stacktrace auf, bevor wir das Ereignis senden. Der Fehler kommt vom Server, der auch versucht, diese Informationen einzugeben.
Das ist jedoch ein Fehler unsererseits, da wir nicht erwarten, dass Sie bei jedem Release node_modules hochladen

Wenn ich @lobsterkatie in diesem Punkt (oben zitiert) richtig verstanden
Ich denke, das einzige Problem ist, dass der Fehler angezeigt wird, obwohl der Kontext richtig bereitgestellt wird. Der Server scheint nicht zu erkennen, dass er keine zusätzlichen Uploads von meiner Seite benötigt. ( Verstehe ich das richtig

@guischdi Die

Der Grund, warum wir versuchen, Quellzuordnungen für Node-Apps zu verarbeiten, besteht darin, dass der Code zwar sehr wahrscheinlich nicht minimiert ist, aber ziemlich leicht transpiliert werden könnte (wenn er beispielsweise in Typoskript geschrieben wäre), und wir daher Source benötigen würden Maps, um den geschriebenen Code und nicht die Ausgabe von Babel anzuzeigen.

Ok, das sieht für mich nach einem UX-Fehler aus. Meiner Meinung nach sollte es (zumindest für Node.js-Projekte) nur eine Warnung sein und es darf nicht Source code was not found sondern so etwas wie Source maps were not found lauten. Dies hätte ein Problem mit einer Historie von mehr als einem Jahr verhindert ;)
Wenn Sie möchten, können Sie dieses Problem als Bericht für jeden, der am Frontend/Display-Teil arbeitet, erneut öffnen oder es einfach geschlossen lassen und ihm dieses Missverständnis melden. Vielen Dank für die abschließende Klärung!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen