@sentry/browser
@sentry/node
raven-js
raven-node
_(Rabe für Knoten)_4.4.1
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:
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:
release
init
Anruf in 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?
@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 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:
.tar
der gesamten Veröffentlichung hochzuladen.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 mitcaptureEvent
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 TestausnahmecaptureEvent
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:
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!
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 wieSource 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!