Sentry-javascript: Kode sumber tidak ditemukan untuk index.js

Dibuat pada 6 Des 2018  ·  28Komentar  ·  Sumber: getsentry/sentry-javascript

Paket + Versi

  • [ ] @sentry/browser
  • [x] @sentry/node
  • [ ] raven-js
  • [ ] raven-node _(gagak untuk simpul)_
  • [ ] lainnya:

Versi: kapan:

4.4.1

Keterangan

Kode menangkap acara berikut akan menghasilkan kesalahan di Sentry saat mengurai acara: 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);
})();

Berikut adalah tampilan acara di Sentry:
Sentry Event Screenshot

Needs Information

Komentar yang paling membantu

Oke, jadi ini terlihat seperti bug UX bagi saya. Menurut pendapat saya itu harus (setidaknya untuk proyek Node.js) hanya peringatan dan tidak boleh mengatakan Source code was not found tetapi sesuatu seperti Source maps were not found . Ini akan mencegah masalah dengan riwayat lebih dari satu tahun;)
Jika mau, Anda dapat membuka kembali masalah ini sebagai laporan untuk siapa pun yang bekerja di bagian frontend/tampilan, atau biarkan tertutup dan laporkan kesalahpahaman ini kepada mereka. Terima kasih banyak untuk akhirnya mengklarifikasi ini!

Semua 28 komentar

Bisakah Anda memposting tautan langsung ke acara tersebut?

(Anda juga melewatkan beberapa jalur di tangkapan layar stacktrace yang Anda tutupi sebelumnya )

Adakah alasan khusus mengapa Anda tidak menggunakan Sentry.captureException secara langsung, melainkan ingin membuat acara Anda sendiri?

Yap, ini dia acaranya: https://sentry.io/share/issue/e2c8d20b66d2406cb32c540d87654b4a/ (sedikit dimodifikasi untuk tidak mempublikasikan dsn kami)

Alasan mengapa saya menggunakan Sentry.captureEvent() adalah sebagai berikut: Saya memelihara plugin hapi yang menangkap kejadian kesalahan yang dilontarkan oleh penangan rute hapi (diperkaya dengan data permintaan). Lihat: hapi-sentry ./index.js#L41-L67

@guischdi alasan mengapa Anda mendapatkan kesalahan ini adalah karena jalur file lokal tidak dapat dijangkau ke server jarak jauh.
Sentry mencoba mengambil dan menyelesaikan /something/local/src/app.js dan membaca kode sumber darinya untuk memberikan pemetaan kesalahan yang lebih baik (berfungsi dengan cara yang sama dengan file peta sumber).

Untuk mengunggah file Anda, Anda dapat menggunakan CLI kami https://docs.sentry.io/cli/ atau plugin Webpack https://github.com/getsentry/sentry-webpack-plugin

Berikut adalah beberapa dokumen lama tentang peta sumber, tetapi konsepnya sama untuk SDK baru https://docs.sentry.io/clients/node/sourcemaps/ (semuanya berlaku dengan cara yang sama untuk masalah Anda saat ini).

Ada juga integrasi yang ada yang dapat Anda gunakan untuk menulis ulang jalur di setiap bingkai https://github.com/getsentry/sentry-javascript/blob/master/packages/core/src/integrations/pluggable/rewriteframes.ts

Jadi misalnya:

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

Akan mengubah /something/local/src/app.js menjadi app:///app.js ( app:/// adalah awalan internal kami), jadi ketika Anda mengunggah app.js ke artefak rilis penjaga Anda, itu akan dibaca dengan benar tanpa kebutuhan untuk mengambil file eksternal.

Pada dasarnya yang perlu Anda lakukan adalah:

  • setel release dalam panggilan init
  • unggah sumber Anda ke rilis yang sama di Sentry
  • pastikan bahwa bingkai dalam kesalahan yang Anda tangkap sesuai dengan bingkai dari file unggahan Anda

Semoga itu membersihkan beberapa hal untuk Anda. Jangan ragu untuk bertanya apa pun jika Anda membutuhkan bantuan lebih lanjut.

Hai @kamilogorek
Terima kasih atas jawaban terperinci Anda.

Apakah saya melakukannya dengan benar: Cara umum untuk menampilkan jejak tumpukan aplikasi Node.js di Sentry adalah dengan mengunggah file setiap rilis melalui integrasi RewriteFrames atau secara manual? Jika demikian, bagaimana jejak tumpukan pada captureException /catch-all ditampilkan dan tidak ada kesalahan 'kode sumber tidak ditemukan' yang dipicu.

Saya menguji cara melempar Kesalahan di lib node_modules bekerja. Kesalahan dilaporkan dengan benar termasuk kode sumber bahkan dari lib. Lihat https://sentry.io/share/issue/2b95ecb13ce24227b2184b2561e4f6e3/

Jadi mengapa ini bekerja dengan captureException dan gagal dengan captureEvent ?

Sentry Screenshot

@guischdi dapatkah Anda melewati tautan lengkap ke kedua acara? Bukan yang bisa dibagikan? Saya dapat mengaksesnya melalui izin admin.

Juga, saya akan keluar dari kantor selama 3 minggu ke depan, jadi saya akan mencoba untuk kembali ke yang satu ini ketika saya akan kembali.

@kamilogorek

  • ini adalah Tautan captureEvent
  • ini adalah Tautan captureException

Terima kasih telah melihat ini!

@kamilogorek Apakah maksud Anda saya perlu mengunggah seluruh folder node_modules untuk setiap rilis juga? Mengapa @sentry/node ketika berjalan di server dan semua sumber ini tersedia tidak dapat mengunggah file yang diperlukan dengan laporan kesalahan?

Saya mengonfirmasi bahwa setelah menyetel integrasi bingkai dan pada dasarnya mengunggah seluruh node_modules menyelesaikan masalah ini bagi saya. Tetapi proses mengunggah begitu banyak file node_modules sangat lambat.

Saya percaya solusi untuk ini adalah:

  1. izinkan oleh penjaga untuk mengunggah .tar dari seluruh rilis
  2. kompilasi proyek simpul ke .js dan .map tunggal dan gunakan dan unggah hanya dua file ini.

Juga, saya mengalami masalah dengan peta sumber yang mereferensikan file .ts yang tidak ada dalam paket node_modules npm - https://github.com/prisma/graphql-middleware/issues/159

@kamilogorek Adakah berita tentang masalah ini?

Saya juga dapat mengonfirmasi bahwa menulis ulang bingkai adalah solusi bagi kami.

Kasus kami sedikit berbeda, kami mencoba membuat peta sumber berfungsi, tetapi file yang diperkecil selalu yang digunakan oleh Sentry. Untuk rilis terkait, kami mengunggah file yang diperkecil serta peta sumber terkait. Tampaknya Sentry tidak menemukan peta sumber, dan default ke file yang diperkecil (yang masih di-host di jalur yang sama dari peta sumber).

Kami baru saja menambahkan new Integrations.RewriteFrames() ke kunci integrasi ke init Sentry, dan peta sumber mulai diambil untuk setiap masalah baru.

Baik untuk diketahui, bahwa integrasi RewriteFrames dan mengunggah node_modules tampaknya menyelesaikan masalah. Tapi pertama-tama (seperti yang sudah disebutkan @mieszko4 ), mengunggah begitu banyak file cukup mengganggu. Dan selanjutnya temuan awal saya adalah,

bahwa jejak tumpukan pada captureException /catch-all ditampilkan dan tidak ada kesalahan 'kode sumber tidak ditemukan' yang dipicu

Jadi pertanyaan berikut tetap terbuka:

Jadi mengapa ini bekerja dengan captureException dan gagal dengan captureEvent ?

Atau lebih tepatnya: Seseorang dapat dengan mudah menangkap kesalahan melalui captureException tanpa masalah, tetapi untuk menangkap melalui captureEvent unggahan semua file ( integrasi RewriteFrames atau secara manual) diperlukan untuk mencegah kesalahan "kode sumber tidak ditemukan". Apakah ini bug atau disengaja, @kamilogorek?

@guischdi maaf atas tanggapan yang terlambat. Aku kehilangan jejak sedikit. Bisakah Anda menyegarkan ingatan saya tentang apa yang terjadi di sini dan memberikan beberapa contoh peristiwa?

@kamilogorek
Ya, masalah kita adalah:

  • captureException bekerja dengan baik, bahkan jika node_module melempar kesalahan; lihat pengecualian tes ini
  • captureEvent memberikan hick-up penjaga: error encountered while processing this event: [...] Source code was not found ; lihat acara tes ini

@guischdi hanya untuk mengonfirmasi, ini adalah file mentah node js kan? tidak ada webpack, tidak ada kompilasi, tidak ada peta sumber. Hanya satu file index.js dengan 2 panggilan berbeda di jalur berbeda? Bisakah Anda memberikan konten file ini jika memungkinkan?

@kamilogorek
Ya, nodeJS mentah. Lihatlah masalah kedua yang saya tautkan di atas . Anda sudah melihat 13 baris index.js sana.

@guischdi kami sedang menyelidiki mengapa berperilaku seperti ini (2 frame berturut-turut dengan url yang sama memicu ini). Sementara itu, Anda dapat menonaktifkan "Aktifkan Pengambilan Sumber JavaScript" di pengaturan proyek Anda, mis. https://sentry.io/settings/kamil-ogorek/projects/testing-project/
Ini adalah aplikasi simpul, jadi tidak ada gunanya melakukan itu.

@kamilogorek Oke, saya mematikan pengaturan "Aktifkan Pengambilan Sumber JavaScript" dan memicu kesalahan lain. Tapi tetap 1 error encountered while processing this event: [...] Source code was not found (lihat masalah ini )

Aneh, itu bekerja untuk saya dengan baik. Bagaimanapun, kami akan mencoba menyelidiki mengapa itu terjadi, meskipun saya tidak bisa menjanjikan kapan itu terjadi, karena itu bukan masalah besar yang mencegah apa pun untuk bekerja. Akan membuat Anda tetap diposting!

@kamilogorek ada berita tentang ini?

Bagi saya, tampilan masalah melaporkan kode sumber kehilangan beberapa file, tetapi semuanya ada dan dapat dilihat di bawah pelacakan tumpukan.

Saya menjalankan Sentry yang dihosting sendiri dan menggunakan @sentry/node 5.4.3

Ini kode saya:

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

Saya juga mendapatkan kesalahan ini:

image

Dan inilah tumpukannya:

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>

Saya juga mengalami masalah ini Source code was not found

@LukeXF dapatkah Anda memberikan tautan ke acara yang terpengaruh?

Alasan Anda dapat melihat konteks sumber (yaitu, kode di atas dan di bawah baris yang dimaksud) meskipun Anda mendapatkan kesalahan "tidak dapat menemukan kode sumber" adalah karena di SDK, sebelum kami mengirim acara, kami merekam informasi ini sebagai bagian dari pemrosesan stacktrace . Kesalahan berasal dari server _also_ mencoba mengisi informasi tersebut.

Itu adalah bug di pihak kami, karena kami tidak benar-benar mengharapkan Anda untuk mengunggah node_modules dengan setiap rilis (untuk aplikasi node; untuk aplikasi browser Anda kemungkinan akan menggabungkan/memperkecil). Harus diperbaiki oleh https://github.com/getsentry/sentry/pull/17538, yang akan digunakan dalam beberapa jam.

Setelah perbaikan itu selesai, dapatkah siapa saja yang berkomentar di sini memberi tahu kami jika Anda masih memiliki masalah/pertanyaan, dan apa masalahnya? Senang untuk membuka kembali ini jika diperlukan.

Hai @lobsterkatie
mengujinya lagi, dengan cuplikan berikut (dihapus dari README saat ini di npm):

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

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

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

Sayangnya kami masih mendapatkan Kesalahan Source code was not found di https://sentry.io/share/issue/0247fe07741c4e358089461f113cef42/
Apakah perbaikan yang Anda perkenalkan kemarin sudah diterapkan?

Juga diuji dengan versi v4.xx saat ini (v4.6.6) dan rilis terbaru (v5.14.0) dari @sentry/node.

@guischdi Anda tidak mengunggah artefak apa pun, atau menyertakan rilis dalam konfigurasi Anda.

Silakan ikuti dokumen terlebih dahulu: https://docs.sentry.io/platforms/node/sourcemaps/

@kamilogorek

di SDK, sebelum kami mengirim acara, kami mencatat informasi ini sebagai bagian dari pemrosesan stacktrace. Kesalahan datang dari server yang juga mencoba mengisi informasi itu.
Itu adalah bug di pihak kami, karena kami sebenarnya tidak mengharapkan Anda untuk mengunggah node_modules dengan setiap rilis

Jika saya mengerti @lobsterkatie tepat pada saat itu (dikutip di atas), saya tidak perlu mengunggah kode. Di tautan masalah Anda dapat melihat semua konteks kode sumber yang diperlukan untuk memahami masalah (dalam hal ini semua kode sumber skrip). Jadi ini sepertinya direkam dengan benar. Saya rasa saya tidak perlu mengunggah/menyajikan peta sumber (seperti yang disarankan tautan Anda), karena ini adalah program Node.js biasa yang tidak diperkecil.
Saya pikir satu-satunya masalah yang tersisa, adalah kesalahan yang ditampilkan meskipun konteksnya disediakan dengan benar. Server tampaknya tidak menyadari bahwa itu tidak memerlukan unggahan tambahan dari pihak saya. (Apakah saya benar @lobsterkatie ?)

@guischdi File yang dicarinya berasal dari aplikasi Anda, bukan dari node_modules, jadi perubahan yang saya buat (untuk lebih berhasil mengecualikan kode pihak ketiga) tidak akan berlaku di sini.

Alasan kami mencoba memproses peta sumber untuk aplikasi simpul adalah bahwa meskipun benar bahwa kode tersebut kemungkinan besar tidak diperkecil, kode tersebut dapat dengan mudah ditranspilasikan (jika ditulis dalam TypeScript, misalnya), jadi kami memerlukan sumber peta untuk menampilkan kode seperti yang tertulis daripada output dari babel.

Oke, jadi ini terlihat seperti bug UX bagi saya. Menurut pendapat saya itu harus (setidaknya untuk proyek Node.js) hanya peringatan dan tidak boleh mengatakan Source code was not found tetapi sesuatu seperti Source maps were not found . Ini akan mencegah masalah dengan riwayat lebih dari satu tahun;)
Jika mau, Anda dapat membuka kembali masalah ini sebagai laporan untuk siapa pun yang bekerja di bagian frontend/tampilan, atau biarkan tertutup dan laporkan kesalahpahaman ini kepada mereka. Terima kasih banyak untuk akhirnya mengklarifikasi ini!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat