getsentry / sentry-javascript

Official Sentry SDKs for JavaScript
https://sentry.io
MIT License
7.95k stars 1.57k forks source link

Crash on init within a docker container - fix: warn about Node ABI version #14015

Open stoneburner opened 6 days ago

stoneburner commented 6 days ago

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/nodejs

SDK Version

8.34.0

Framework Version

Express

Link to Sentry event

No response

Reproduction Example/SDK Setup

No response

Steps to Reproduce

Run app within docker container

Expected Result

the add does not crash

Actual Result

The app crashes with:

Error: Cannot find module '/home/node/app/node_modules/@sentry/profiling-node/lib/sentry_cpu_profiler-linux-x64-musl-131.node'
Require stack:
- Error: Cannot find module '/home/node/app/node_modules/@sentry/profiling-node/lib/sentry_cpu_profiler-linux-x64-musl-131.node'
R node:internal/modules/cjs/loader:1262
  throw err;
  ^

Note the version 131 it wants to load indeed does not exists, when i run nodejs locally and test the code that is used by sentry node profiler i get this:

Welcome to Node.js v22.9.0.
Type ".help" for more information.
> const nodeAbi = require('node-abi');
undefined
> const node_process = require('node:process');
undefined
> nodeAbi.getAbi(node_process.versions.node, 'node');
'127'
>

The file with 127 does exist and sentry works normally

The docker file just uses the official docker image and nothing special:

# Use the official Node.js image as the base image
FROM node:current-alpine

# Set the working directory inside the container
WORKDIR /home/node/app

# Copy package.json and package-lock.json to the working directory
COPY package*.json ./

# Install dependencies
RUN npm install
RUN npm install -g nodemon

# Start the server
CMD ["nodemon", "-x", "bin/www"]

I was forced to remove sentry from the apps within the company so we can deploy them and i rather would reactivate sentry.

chargome commented 6 days ago

Hey @stoneburner, we currently only ship prebuilt binaries for node versions v16-22 (see https://github.com/getsentry/sentry-javascript/blob/develop/packages/profiling-node/README.md#prebuilt-binaries), and current-alpine resolves to v23. Can you try downgrading to node 22?

stoneburner commented 5 days ago

Thanks, downgrading nodejs to 22 worked!

Maybe a check of the abi version would be a good idea, disabling profiling (and warning about that) would be nicer than just crashing

s1gr1d commented 3 days ago

Great to hear that it worked! And yes, checking for the version makes sense. I'll put that on our list.