Add New Relic Node.js APM monitoring to backend

- Install newrelic package for server-side APM
- Create newrelic.js configuration with distributed tracing enabled
- Update npm scripts to preload agent via -r flag for ES modules
- Correlates with existing browser agent for end-to-end tracing

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Michael Mainguy 2026-01-13 15:15:27 -06:00
parent 3155cc930f
commit d9cd0692b5
3 changed files with 1700 additions and 12 deletions

36
newrelic.js Normal file
View File

@ -0,0 +1,36 @@
'use strict'
/**
* New Relic Node.js APM Configuration
*
* This file configures the New Relic agent for backend monitoring.
* Requires NEW_RELIC_LICENSE_KEY environment variable to be set.
*
* Distributed tracing is enabled to correlate with browser agent traces.
*/
exports.config = {
app_name: ['dasfad'],
license_key: process.env.NEW_RELIC_KEY,
distributed_tracing: {
enabled: true
},
logging: {
level: 'info'
},
allow_all_headers: true,
attributes: {
exclude: [
'request.headers.cookie',
'request.headers.authorization',
'request.headers.proxyAuthorization',
'request.headers.setCookie*',
'request.headers.x*',
'response.headers.cookie',
'response.headers.authorization',
'response.headers.proxyAuthorization',
'response.headers.setCookie*',
'response.headers.x*'
]
}
}

1665
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,18 @@
{ {
"name": "immersive", "name": "immersive",
"private": true, "private": true,
"version": "0.0.8-47", "version": "0.0.8-48",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=18.0.0" "node": ">=18.0.0"
}, },
"scripts": { "scripts": {
"dev": "node server.js", "dev": "node -r newrelic server.js",
"test": "vitest", "test": "vitest",
"build": "node versionBump.js && vite build", "build": "node versionBump.js && vite build",
"start": "NODE_ENV=production node server.js", "start": "NODE_ENV=production node -r newrelic server.js",
"start:api": "API_ONLY=true node server.js", "start:api": "API_ONLY=true node -r newrelic server.js",
"socket": "node server/server.js", "socket": "node server/server.js",
"serverBuild": "cd server && tsc", "serverBuild": "cd server && tsc",
"havok": "cp ./node_modules/@babylonjs/havok/lib/esm/HavokPhysics.wasm ./node_modules/.vite/deps" "havok": "cp ./node_modules/@babylonjs/havok/lib/esm/HavokPhysics.wasm ./node_modules/.vite/deps"
@ -33,6 +33,7 @@
"@mantine/form": "^7.17.8", "@mantine/form": "^7.17.8",
"@mantine/hooks": "^7.17.8", "@mantine/hooks": "^7.17.8",
"@maptiler/client": "1.8.1", "@maptiler/client": "1.8.1",
"@newrelic/browser-agent": "^1.306.0",
"@picovoice/cobra-web": "^2.0.3", "@picovoice/cobra-web": "^2.0.3",
"@picovoice/eagle-web": "^1.0.0", "@picovoice/eagle-web": "^1.0.0",
"@picovoice/web-voice-processor": "^4.0.9", "@picovoice/web-voice-processor": "^4.0.9",
@ -40,7 +41,6 @@
"@types/node": "^18.14.0", "@types/node": "^18.14.0",
"@types/react": "^18.2.72", "@types/react": "^18.2.72",
"@types/react-dom": "^18.2.22", "@types/react-dom": "^18.2.22",
"@newrelic/browser-agent": "^1.306.0",
"axios": "^1.10.0", "axios": "^1.10.0",
"canvas-hypertxt": "1.0.3", "canvas-hypertxt": "1.0.3",
"cors": "^2.8.5", "cors": "^2.8.5",
@ -54,6 +54,7 @@
"leveldown": "^6.1.1", "leveldown": "^6.1.1",
"loglevel": "^1.9.1", "loglevel": "^1.9.1",
"meaningful-string": "^1.4.0", "meaningful-string": "^1.4.0",
"newrelic": "^13.9.1",
"peer-lite": "2.0.2", "peer-lite": "2.0.2",
"pouchdb": "^8.0.1", "pouchdb": "^8.0.1",
"pouchdb-adapter-leveldb": "^9.0.0", "pouchdb-adapter-leveldb": "^9.0.0",