Sentry-javascript: Mengikuti petunjuk peta sumber, tetapi nomor baris salah, dll

Dibuat pada 28 Jun 2020  ·  24Komentar  ·  Sumber: getsentry/sentry-javascript

Paket + Versi

  • [X] @sentry/node - 5.18.1
  • [X] @sentry/integrations - 5.18.1
  • [X] @sentry/webpack-plugin - 1.11.1

Keterangan

Saya telah mengikuti instruksi pada peta sumber sejauh pengetahuan saya. Saya mencoba ini dengan pengaturan Kerangka Tanpa Server.

Ini adalah peningkatan yang cukup baik dari tampilan pelaporan sebelum saya mengikuti langkah-langkahnya, tetapi nomor baris benar-benar salah dan nama modul tidak ada. Masih ada sisa-sisa nama variabel webpack.

https://sentry.io/organizations/reelcrafter/issues/1749922899/?project=5298557

Screen Shot 2020-06-27 at 6 19 00 PM

webpack.config.js

const path = require("path");
// eslint-disable-next-line import/no-unresolved
const slsw = require("serverless-webpack");
const SentryPlugin = require("@sentry/webpack-plugin");

module.exports = {
  entry: slsw.lib.entries,
  devtool: "source-map",
  output: {
    libraryTarget: "commonjs",
    filename: "[name].js",
    path: path.join(__dirname, ".webpack"),
  },
  mode: "development",
  target: "node",
  module: {
    rules: [
      {
        test: /\.js$/, // include .js files
        enforce: "pre", // preload the jshint loader
        exclude: /node_modules/, // exclude any and all files in the node_modules folder
        include: __dirname,
        use: [
          {
            loader: "babel-loader",
          },
        ],
      },
    ],
  },
  plugins: [
    new SentryPlugin({
      release: process.env.RELEASE,
      include: "./.webpack",
    }),
  ],
};

tes.js

import * as Sentry from "@sentry/node";
import { RewriteFrames } from "@sentry/integrations";

Sentry.init({
  dsn: "https://xx",
  release: process.env.RELEASE,
  integrations: [new RewriteFrames()],
});

/**
 ...
*/
In Progress

Komentar yang paling membantu

PERINGATAN dalam konfigurasi. Opsi 'mode' belum disetel, webpack akan mundur ke 'produksi' untuk nilai ini. Setel opsi 'mode' ke 'pengembangan' atau 'produksi' untuk mengaktifkan default untuk setiap lingkungan.

Saya menemukan masalah utama. TerserPlugin bermain-main dengan kode sumber.

optimization: {
  minimize: false,
},

Tambahkan ini ke konfigurasi webpack Anda dan Anda akan menjadi baik tidak peduli apa mode diatur! (ini adalah satu-satunya perubahan yang saya lakukan berdasarkan status repo Anda saat ini).

Anda dapat bermain-main dengan opsi default TerserPlugin untuk menemukan _tepat_ mana yang menjadi penyebab jika Anda tetap ingin menggunakannya - https://webpack.js.org/plugins/terser-webpack-plugin/#terseroptions

BTW, saya menghargai semua waktu dan bantuan Anda! Jangan khawatir, saya pelanggan Sentry berbayar.

Kapan-kapan, saya sendiri penasaran ada apa di sini :D

Semua 24 komentar

Satu-satunya bagian yang _mungkin_ saya menyimpang dari:

Jika Anda ingin mengandalkan resolusi peta sumber Sentry, pastikan kode Anda tidak menggunakan paket dukungan peta sumber, karena paket tersebut menimpa jejak tumpukan yang ditangkap dengan cara yang membuat pemroses kami tidak mungkin menguraikannya dengan benar.

source-map-support ada di proyek saya, yang menurut saya dapat merusak sesuatu jika saya menghapusnya:

$ yarn why source-map-support                                                                                                  <aws:default>
yarn why v1.22.4
[1/4] 🤔  Why do we have the module "source-map-support"...?
[2/4] 🚚  Initialising dependency graph...
[3/4] 🔍  Finding dependency...
[4/4] 🚡  Calculating file sizes...
=> Found "[email protected]"
info Has been hoisted to "source-map-support"
info Reasons this module exists
   - Hoisted from "serverless-webpack#ts-node#source-map-support"
   - Hoisted from "webpack#terser-webpack-plugin#terser#source-map-support"
info Disk size without dependencies: "940KB"
info Disk size with unique dependencies: "1.71MB"
info Disk size with transitive dependencies: "1.71MB"
info Number of shared dependencies: 2
=> Found "babel-register#[email protected]"
info This module exists because "babel-core#babel-register" depends on it.
info Disk size without dependencies: "96KB"
info Disk size with unique dependencies: "892KB"
info Disk size with transitive dependencies: "892KB"
info Number of shared dependencies: 1
✨  Done in 0.27s.

@ffxsam sepertinya kami bahkan tidak menyelesaikan peta sumber Anda, dan data itu sendiri berasal dari sistem file lokal (disebut data pra/pasca_konteks).

Bisakah Anda mencoba mematikannya dan mengunggah peta sumber dengan jalur yang cocok dengan stacktrace Anda?

1) dalam panggilan Sentry.init , setel frameContextLines ke 0
2) di WebpackPlugin ubah include: "./.webpack", menjadi `include: "./.webpack/service"

Beri tahu saya setelah Anda mengubahnya dan memicu suatu peristiwa. Saya kemudian akan melihatnya lagi.

Hai @kamilogorek , terima kasih atas bantuannya!

Jadi, saya membuat dua perubahan yang Anda sarankan. Jelas lebih baik, tetapi nomor baris yang direferensikan hanya sedikit mati karena beberapa alasan:

Screenshot_2020-07-07 ReferenceError fakeit is not defined

Catatan menarik lainnya:

Dengan opsi frameContextLines: 0 , saya mendapatkan kesalahan dalam catatan Penjaga:

Screen Shot 2020-07-07 at 10 50 24 AM

Tetapi jika saya berkomentar frameContextLines: 0 , saya tidak lagi mendapatkan kesalahan ini.

Tetapi jika saya mengomentari frameContextLines: 0, saya tidak lagi mendapatkan kesalahan ini.

Karena jika kita sudah memiliki garis konteks, kita tidak menyelesaikan peta sumber.

Bisakah Anda menautkan masalah di atas?

Ketika Anda melihat kesalahan seperti ini, itu berarti artefak rilis tidak berisi file yang ditunjuknya.

Tentu: https://sentry.io/organizations/reelcrafter/issues/1770164594/?project=5298557

Ini adalah skrip rilis saya:

#!/bin/sh
export RELEASE=$(sentry-cli releases propose-version)

# Create a release
sentry-cli releases new -p big-test --finalize $RELEASE

# Associate commits with the release
sentry-cli releases set-commits --auto $RELEASE

# Deploy
sls deploy

Dan output dari menjalankan skrip itu:

Created release ad78add8289b9e871192d9c17d98529f82015fda.
Could not determine any commits to be associated with a repo-based integration. Proceeding to find commits from local git tree.
Success! Set commits for release ad78add8289b9e871192d9c17d98529f82015fda.
Serverless: Bundling with Webpack...
> Found 2 release files
> Analyzing 2 sources
> Rewriting sources
> Adding source map references
> Bundled 2 files for upload
> Uploaded release files to Sentry
> File upload complete

Source Map Upload Report
  Minified Scripts
    ~/test.js (sourcemap at test.js.map)
  Source Maps
    ~/test.js.map
Time: 3183ms
Built at: 07/07/2020 2:14:39 PM
      Asset      Size  Chunks                   Chunk Names
    test.js  79.4 KiB       0  [emitted]        test
test.js.map   373 KiB       0  [emitted] [dev]  test
Entrypoint test = test.js test.js.map
 [3] ./node_modules/@sentry/hub/esm/index.js 197 bytes [built]
 [7] external "domain" 42 bytes {0} [built]
 [8] ./node_modules/@sentry/types/esm/index.js 146 bytes [built]
[18] multi ./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js ./test.js 40 bytes {0} [built]
[19] ./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js 187 bytes {0} [built]
[34] ./test.js + 49 modules 190 KiB {0} [built]
     | ./test.js 715 bytes [built]
     | ./node_modules/@sentry/node/esm/index.js 1.39 KiB [built]
     | ./node_modules/tslib/tslib.es6.js 10 KiB [built]
     | ./node_modules/@sentry/node/esm/version.js 118 bytes [built]
     | ./node_modules/@sentry/node/esm/transports/index.js 155 bytes [built]
     | ./node_modules/@sentry/node/esm/client.js 1.37 KiB [built]
     | ./node_modules/@sentry/core/esm/index.js 674 bytes [built]
     | ./node_modules/@sentry/node/esm/handlers.js 10.4 KiB [built]
     | ./node_modules/@sentry/node/esm/integrations/index.js 309 bytes [built]
     | ./node_modules/@sentry/node/esm/sdk.js 4.26 KiB [built]
     | ./node_modules/@sentry/integrations/esm/rewriteframes.js 3.54 KiB [built]
     | ./node_modules/@sentry/hub/esm/scope.js 12.5 KiB [built]
     | ./node_modules/@sentry/hub/esm/hub.js 14.2 KiB [built]
     | ./node_modules/@sentry/minimal/esm/index.js 5.99 KiB [built]
     | ./node_modules/@sentry/core/esm/baseclient.js 16.3 KiB [built]
     |     + 35 hidden modules
[36] ./node_modules/@sentry/integrations/esm/index.js 502 bytes [built]
[42] ./node_modules/@sentry/integrations/esm/angular.js 3.22 KiB [built]
[43] ./node_modules/@sentry/integrations/esm/captureconsole.js 2.68 KiB [built]
[44] ./node_modules/@sentry/integrations/esm/debug.js 1.52 KiB [built]
[45] ./node_modules/@sentry/integrations/esm/dedupe.js 5.91 KiB [built]
[46] ./node_modules/@sentry/integrations/esm/ember.js 1.98 KiB [built]
[47] ./node_modules/@sentry/integrations/esm/extraerrordata.js 3.69 KiB [built]
[48] ./node_modules/@sentry/integrations/esm/reportingobserver.js 3.54 KiB [built]
[49] ./node_modules/@sentry/integrations/esm/sessiontiming.js 1.31 KiB [built]
    + 40 hidden modules
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service sentry-serverless.zip file to S3 (154.57 KB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..............
Serverless: Stack update finished...
Service Information
service: sentry-serverless
stage: dev
region: us-east-1
stack: sentry-serverless-dev
resources: 11
api keys:
  None
endpoints:
  GET - https://█████.execute-api.us-east-1.amazonaws.com/dev/test
functions:
  test: sentry-serverless-dev-test
layers:
  None
Serverless: Removing old service artifacts from S3...

```

@ffxsam Saya menghabiskan beberapa waktu untuk mereproduksi semuanya di AWS dengan Kerangka Tanpa Server dan dapat membuatnya berfungsi dengan baik

image

Ada satu perubahan yang diperlukan agar stacktrace hanya menyelesaikan bingkai asli Anda, serta melewati internal dan menandainya sebagai "bingkai non-aplikasi".

import { basename } from "path";

Sentry.init({
  dsn: "...",
  release: process.env.RELEASE,
  integrations: [
    new RewriteFrames({
      iteratee(frame) {
        if (frame.function.startsWith("Runtime")) {
          frame.in_app = false;
        } else {
          frame.filename = `app:///${basename(frame.filename)}`;
        }
        return frame;
      }
    })
  ],
  frameContextLines: 0
});

Namun, itu masih tidak menjawab pertanyaan mengapa peta sumber Anda salah format. Pasti ada masalah dengan pipa webpack sekalipun. Saya menggunakan konfigurasi persis Anda dan itu berfungsi dengan baik untuk saya.
Perhatikan, bahwa ketika Anda mengunduh peta sumber Anda dan menggunakan alat seperti https://www.npmjs.com/package/source-map-cli itu sudah rusak. Yang berarti bahwa mereka tidak diproduksi dengan benar sejak awal.

Terima kasih atas info tambahannya. Saya telah membuat repositori baru dan baru saja mengundang Anda ke sana:
https://github.com/ffxsam/source-map-test/

Ini dibuat melalui sls create -t aws-nodejs-ecma-script -p source-map-test .

Kali ini, itu tidak berfungsi dengan baik sama sekali, seperti yang Anda lihat di sini: https://sentry.io/organizations/reelcrafter/issues/1772989686/?project=5319096

Bantuan apa pun akan sangat dihargai! Kami sangat bergantung pada arsitektur tanpa server, jadi kami sangat membutuhkan Sentry untuk mencatat semuanya secara akurat. Terima kasih!

Oh, dan jalankan sh release untuk melakukan rilis ke Sentry dan menyebarkan.

@ffxsam Anda lupa mengimpor metode basename dari paket path bawaan
Saya akan melihat sisa kodenya besok dan menghubungi Anda kembali.

Ups! Saya tidak ingat apakah itu ada di sana terakhir kali. Konfigurasi webpack hampir sama dengan apa yang dibuat Serverless di luar kotak.

Terima kasih atas bantuan Anda! Dan jangan ragu untuk memodifikasi repo saya secara langsung.

@ffxsam berfungsi seperti pesona, cukup impor basename dan selesai :)

image

@kamilogorek Masih belum beruntung bagi saya.

Bisakah Anda mengkloning repo ini (https://github.com/ffxsam/source-map-test/), ubah DSN, jalankan sh release , dan lihat apa yang terjadi pada Anda? Saya masih mendapatkan ini, bahkan setelah perubahan yang Anda sarankan:

image

@ffxsam ada 2 hal yang saya temukan.

  1. Skrip rilis Anda selalu menggunakan versi yang sama (karena versi yang diusulkan didasarkan pada rilis sebelumnya + komit baru [rilis sebelumnya selalu sama untuk kasus repro sederhana ini]). Ini menyebabkan peristiwa baru menggunakan artefak yang di-cache dan menyelesaikan baris dengan tidak benar. Untuk tujuan pengujian, Anda dapat menggunakan export RELEASE=$(date +%s) sebagai gantinya, yang akan selalu membuat rilis baru.

  2. mode: "production" mengaktifkan source-map-support, yang mengacaukan source sepenuhnya, sayangnya saya tidak menemukan cara untuk menonaktifkannya, karena ada di dalam plugin @babel/register itu sendiri :|

Setelah saya mengubah 2 hal ini, saya membuatnya berfungsi tanpa perubahan kode apa pun.

@kamilogorek Saya sengaja membuat komit untuk memiliki hash rilis unik setiap kali, jadi itu seharusnya tidak menjadi masalah.

Saya akan mencoba menghapus mode: "production" dan melihat apa yang terjadi. Aku akan kembali padamu!

Tidak ada keberuntungan bagi saya.

Hasil yang sama seperti di atas, ada beberapa baris. Saya memang mencoba menggunakan date +%s sebagai rilis, hanya untuk amannya, dan menghapus mode: "production" dari konfigurasi webpack. Anda dapat memeriksa repo. Saya bahkan memulai dengan proyek/DSN baru juga.

Setelah saya menjalankan sh release , saya hanya melakukan curl https://xx.execute-api.us-east-1.amazonaws.com/dev/test untuk memaksa kesalahan, lalu saya memeriksa Sentry.

BTW, saya menghargai semua waktu dan bantuan Anda! Jangan khawatir, saya pelanggan Sentry berbayar.

PERINGATAN dalam konfigurasi. Opsi 'mode' belum disetel, webpack akan mundur ke 'produksi' untuk nilai ini. Setel opsi 'mode' ke 'pengembangan' atau 'produksi' untuk mengaktifkan default untuk setiap lingkungan.

Saya menemukan masalah utama. TerserPlugin bermain-main dengan kode sumber.

optimization: {
  minimize: false,
},

Tambahkan ini ke konfigurasi webpack Anda dan Anda akan menjadi baik tidak peduli apa mode diatur! (ini adalah satu-satunya perubahan yang saya lakukan berdasarkan status repo Anda saat ini).

Anda dapat bermain-main dengan opsi default TerserPlugin untuk menemukan _tepat_ mana yang menjadi penyebab jika Anda tetap ingin menggunakannya - https://webpack.js.org/plugins/terser-webpack-plugin/#terseroptions

BTW, saya menghargai semua waktu dan bantuan Anda! Jangan khawatir, saya pelanggan Sentry berbayar.

Kapan-kapan, saya sendiri penasaran ada apa di sini :D

@kamilogorek Kamu keren!! Ini benar-benar menyelesaikannya, terima kasih!

Jadi, apakah ini masalah dengan Webpack secara umum? Atau hanya cara template Tanpa Server ini diatur?

BTW, sepertinya menghapus frameContextLines: 0 tidak berpengaruh apa-apa setelah semua ini.

@ffxsam Saya juga berjuang dengan masalah ini untuk sementara waktu. Beberapa minggu yang lalu saya menulis artikel tentang cara membuatnya bekerja. Mungkin itu membantu Anda: Perbaiki peta sumber penjaga di fungsi lambda AWS

TLDR:

  • paket berfungsi secara individual
  • awalan nama file dengan nama fungsi di stacktraces sehingga akan cocok dengan struktur sls webpack yang telah diunggah ke penjaga dengan rilis

@botond-veress terima kasih atas tulisannya! :)

Jadi, apakah ini masalah dengan Webpack secara umum? Atau hanya cara template Tanpa Server ini diatur?

@ffxsam rupanya ada cara untuk menjaga pengoptimalan jika Anda mempertahankan sumber asli (vide blogpost di atas). sampai!

@botond-veress Ada yang salah dengan posting blog Anda. Blok kode semuanya satu baris.

image

Juga, kode di repo Anda sepertinya tidak cocok dengan posting blog.

Ahh, saya baru tahu mengapa solusi ini berfungsi dengan baik pada proyek pengujian saya, tetapi bukan proyek nyata yang sebenarnya!

Dalam proyek saya yang sebenarnya, semua kode saya di bawah src/ . Jadi saya harus mengubah include di webpack.config.js :

    new SentryPlugin({
      release: process.env.SENTRY_RELEASE,
      include: "./.webpack/service/src",
    }),

Ketika itu hanya include: "./.webpack/service", , peta sumbernya jauh.

Bagi siapa saja yang mungkin masih memiliki masalah dengan nomor baris peta sumber saat menggunakan plugin Terser, saya dapat membuatnya berfungsi dengan baik dengan menonaktifkan opsi kompres berikut di terserOptions :

compress: {
  conditionals: false,
  sequences: false
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat