securenow 8.10.0 → 8.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -374
- package/cli/agent.js +65 -0
- package/cli.js +60 -43
- package/firewall-only.js +31 -28
- package/internal-thread.js +22 -0
- package/legacy-semconv.js +349 -0
- package/mcp/catalog.js +85 -0
- package/nextjs.js +773 -768
- package/nuxt-server-plugin.mjs +510 -506
- package/package.json +191 -186
- package/register.js +9 -6
- package/tracing.js +16 -5
package/package.json
CHANGED
|
@@ -1,55 +1,58 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "securenow",
|
|
3
|
-
"version": "8.
|
|
4
|
-
"description": "OpenTelemetry instrumentation for Node.js, Next.js, and Nuxt - Send traces and logs to any OTLP-compatible backend",
|
|
5
|
-
"type": "commonjs",
|
|
6
|
-
"main": "register.js",
|
|
7
|
-
"types": "register.d.ts",
|
|
8
|
-
"bin": {
|
|
9
|
-
"securenow": "cli.js",
|
|
10
|
-
"securenow-mcp": "mcp/server.js"
|
|
11
|
-
},
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "securenow",
|
|
3
|
+
"version": "8.11.1",
|
|
4
|
+
"description": "OpenTelemetry instrumentation for Node.js, Next.js, and Nuxt - Send traces and logs to any OTLP-compatible backend",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "register.js",
|
|
7
|
+
"types": "register.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"securenow": "cli.js",
|
|
10
|
+
"securenow-mcp": "mcp/server.js"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"test": "node test-app-config.js && node test-resolve-ip.js && node test-otel-defaults.js && node test-telemetry.js && node test-legacy-semconv.js && node test-internal-thread.js && node test-package-contents.js"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"opentelemetry",
|
|
17
|
+
"otel",
|
|
18
|
+
"tracing",
|
|
19
|
+
"logging",
|
|
20
|
+
"logs",
|
|
21
|
+
"observability",
|
|
22
|
+
"apm",
|
|
23
|
+
"monitoring",
|
|
24
|
+
"cli",
|
|
25
|
+
"nextjs",
|
|
26
|
+
"next.js",
|
|
27
|
+
"instrumentation",
|
|
28
|
+
"telemetry",
|
|
29
|
+
"distributed-tracing",
|
|
30
|
+
"node",
|
|
31
|
+
"express",
|
|
32
|
+
"fastify",
|
|
33
|
+
"nestjs",
|
|
34
|
+
"nuxt",
|
|
35
|
+
"nuxt3",
|
|
36
|
+
"nitro",
|
|
37
|
+
"vue",
|
|
38
|
+
"firewall",
|
|
39
|
+
"ip-blocking",
|
|
40
|
+
"waf",
|
|
41
|
+
"security"
|
|
42
|
+
],
|
|
43
|
+
"exports": {
|
|
44
|
+
".": {
|
|
45
|
+
"types": "./register.d.ts",
|
|
46
|
+
"default": "./register.js"
|
|
47
|
+
},
|
|
48
|
+
"./register": {
|
|
49
|
+
"types": "./register.d.ts",
|
|
50
|
+
"default": "./register.js"
|
|
51
|
+
},
|
|
52
|
+
"./tracing": {
|
|
53
|
+
"types": "./tracing.d.ts",
|
|
54
|
+
"default": "./tracing.js"
|
|
55
|
+
},
|
|
53
56
|
"./events": {
|
|
54
57
|
"types": "./events.d.ts",
|
|
55
58
|
"default": "./events.js"
|
|
@@ -58,144 +61,146 @@
|
|
|
58
61
|
"types": "./telemetry-schema.d.ts",
|
|
59
62
|
"default": "./telemetry-schema.js"
|
|
60
63
|
},
|
|
61
|
-
"./sessions": {
|
|
62
|
-
"types": "./sessions.d.ts",
|
|
63
|
-
"default": "./sessions.js"
|
|
64
|
-
},
|
|
65
|
-
"./console-instrumentation": {
|
|
66
|
-
"default": "./console-instrumentation.js"
|
|
67
|
-
},
|
|
68
|
-
"./nextjs": {
|
|
69
|
-
"types": "./nextjs.d.ts",
|
|
70
|
-
"default": "./nextjs.js"
|
|
71
|
-
},
|
|
72
|
-
"./nextjs-auto-capture": {
|
|
73
|
-
"types": "./nextjs-auto-capture.d.ts",
|
|
74
|
-
"default": "./nextjs-auto-capture.js"
|
|
75
|
-
},
|
|
76
|
-
"./nextjs-middleware": {
|
|
77
|
-
"types": "./nextjs-middleware.d.ts",
|
|
78
|
-
"default": "./nextjs-middleware.js"
|
|
79
|
-
},
|
|
80
|
-
"./nextjs-wrapper": {
|
|
81
|
-
"types": "./nextjs-wrapper.d.ts",
|
|
82
|
-
"default": "./nextjs-wrapper.js"
|
|
83
|
-
},
|
|
84
|
-
"./nextjs-webpack-config": "./nextjs-webpack-config.js",
|
|
85
|
-
"./package.json": "./package.json",
|
|
86
|
-
"./nuxt": {
|
|
87
|
-
"types": "./nuxt.d.ts",
|
|
88
|
-
"import": "./nuxt.mjs",
|
|
89
|
-
"default": "./nuxt.mjs"
|
|
90
|
-
},
|
|
91
|
-
"./firewall": {
|
|
92
|
-
"default": "./firewall.js"
|
|
93
|
-
},
|
|
94
|
-
"./challenge": {
|
|
95
|
-
"default": "./challenge.js"
|
|
96
|
-
},
|
|
97
|
-
"./rate-limits": {
|
|
98
|
-
"types": "./rate-limits.d.ts",
|
|
99
|
-
"default": "./rate-limits.js"
|
|
100
|
-
},
|
|
101
|
-
"./firewall-only": {
|
|
102
|
-
"default": "./firewall-only.js"
|
|
103
|
-
},
|
|
104
|
-
"./cidr": {
|
|
105
|
-
"default": "./cidr.js"
|
|
106
|
-
},
|
|
107
|
-
"./resolve-ip": {
|
|
108
|
-
"default": "./resolve-ip.js"
|
|
109
|
-
},
|
|
110
|
-
"./register-vite": "./register-vite.js",
|
|
111
|
-
"./web-vite": {
|
|
112
|
-
"import": "./web-vite.mjs",
|
|
113
|
-
"default": "./web-vite.mjs"
|
|
114
|
-
},
|
|
115
|
-
"./app-config": {
|
|
116
|
-
"default": "./app-config.js"
|
|
117
|
-
},
|
|
118
|
-
"./mcp": {
|
|
119
|
-
"default": "./mcp/server.js"
|
|
120
|
-
},
|
|
121
|
-
"./mcp/catalog": {
|
|
122
|
-
"default": "./mcp/catalog.js"
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
|
-
"files": [
|
|
126
|
-
"register.js",
|
|
127
|
-
"register.d.ts",
|
|
128
|
-
"tracing.js",
|
|
129
|
-
"tracing.d.ts",
|
|
64
|
+
"./sessions": {
|
|
65
|
+
"types": "./sessions.d.ts",
|
|
66
|
+
"default": "./sessions.js"
|
|
67
|
+
},
|
|
68
|
+
"./console-instrumentation": {
|
|
69
|
+
"default": "./console-instrumentation.js"
|
|
70
|
+
},
|
|
71
|
+
"./nextjs": {
|
|
72
|
+
"types": "./nextjs.d.ts",
|
|
73
|
+
"default": "./nextjs.js"
|
|
74
|
+
},
|
|
75
|
+
"./nextjs-auto-capture": {
|
|
76
|
+
"types": "./nextjs-auto-capture.d.ts",
|
|
77
|
+
"default": "./nextjs-auto-capture.js"
|
|
78
|
+
},
|
|
79
|
+
"./nextjs-middleware": {
|
|
80
|
+
"types": "./nextjs-middleware.d.ts",
|
|
81
|
+
"default": "./nextjs-middleware.js"
|
|
82
|
+
},
|
|
83
|
+
"./nextjs-wrapper": {
|
|
84
|
+
"types": "./nextjs-wrapper.d.ts",
|
|
85
|
+
"default": "./nextjs-wrapper.js"
|
|
86
|
+
},
|
|
87
|
+
"./nextjs-webpack-config": "./nextjs-webpack-config.js",
|
|
88
|
+
"./package.json": "./package.json",
|
|
89
|
+
"./nuxt": {
|
|
90
|
+
"types": "./nuxt.d.ts",
|
|
91
|
+
"import": "./nuxt.mjs",
|
|
92
|
+
"default": "./nuxt.mjs"
|
|
93
|
+
},
|
|
94
|
+
"./firewall": {
|
|
95
|
+
"default": "./firewall.js"
|
|
96
|
+
},
|
|
97
|
+
"./challenge": {
|
|
98
|
+
"default": "./challenge.js"
|
|
99
|
+
},
|
|
100
|
+
"./rate-limits": {
|
|
101
|
+
"types": "./rate-limits.d.ts",
|
|
102
|
+
"default": "./rate-limits.js"
|
|
103
|
+
},
|
|
104
|
+
"./firewall-only": {
|
|
105
|
+
"default": "./firewall-only.js"
|
|
106
|
+
},
|
|
107
|
+
"./cidr": {
|
|
108
|
+
"default": "./cidr.js"
|
|
109
|
+
},
|
|
110
|
+
"./resolve-ip": {
|
|
111
|
+
"default": "./resolve-ip.js"
|
|
112
|
+
},
|
|
113
|
+
"./register-vite": "./register-vite.js",
|
|
114
|
+
"./web-vite": {
|
|
115
|
+
"import": "./web-vite.mjs",
|
|
116
|
+
"default": "./web-vite.mjs"
|
|
117
|
+
},
|
|
118
|
+
"./app-config": {
|
|
119
|
+
"default": "./app-config.js"
|
|
120
|
+
},
|
|
121
|
+
"./mcp": {
|
|
122
|
+
"default": "./mcp/server.js"
|
|
123
|
+
},
|
|
124
|
+
"./mcp/catalog": {
|
|
125
|
+
"default": "./mcp/catalog.js"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"files": [
|
|
129
|
+
"register.js",
|
|
130
|
+
"register.d.ts",
|
|
131
|
+
"tracing.js",
|
|
132
|
+
"tracing.d.ts",
|
|
130
133
|
"events.js",
|
|
131
134
|
"events.d.ts",
|
|
132
135
|
"telemetry-schema.js",
|
|
133
136
|
"telemetry-schema.d.ts",
|
|
134
137
|
"telemetry-schema.json",
|
|
135
|
-
"sessions.js",
|
|
136
|
-
"sessions.d.ts",
|
|
137
|
-
"console-instrumentation.js",
|
|
138
|
-
"nextjs.js",
|
|
139
|
-
"nextjs.d.ts",
|
|
140
|
-
"nextjs-auto-capture.js",
|
|
141
|
-
"nextjs-auto-capture.d.ts",
|
|
142
|
-
"nextjs-middleware.js",
|
|
143
|
-
"nextjs-middleware.d.ts",
|
|
144
|
-
"nextjs-wrapper.js",
|
|
145
|
-
"nextjs-wrapper.d.ts",
|
|
146
|
-
"nextjs-webpack-config.js",
|
|
147
|
-
"nuxt.mjs",
|
|
148
|
-
"nuxt.d.ts",
|
|
149
|
-
"nuxt-server-plugin.mjs",
|
|
150
|
-
"cli.js",
|
|
151
|
-
"cli/",
|
|
152
|
-
"mcp/",
|
|
153
|
-
"free-trial-banner.js",
|
|
154
|
-
"resolve-ip.js",
|
|
155
|
-
"cidr.js",
|
|
156
|
-
"firewall.js",
|
|
157
|
-
"challenge.js",
|
|
158
|
-
"otel-defaults.js",
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"firewall-
|
|
164
|
-
"firewall-
|
|
165
|
-
"
|
|
166
|
-
"
|
|
167
|
-
"
|
|
168
|
-
"
|
|
138
|
+
"sessions.js",
|
|
139
|
+
"sessions.d.ts",
|
|
140
|
+
"console-instrumentation.js",
|
|
141
|
+
"nextjs.js",
|
|
142
|
+
"nextjs.d.ts",
|
|
143
|
+
"nextjs-auto-capture.js",
|
|
144
|
+
"nextjs-auto-capture.d.ts",
|
|
145
|
+
"nextjs-middleware.js",
|
|
146
|
+
"nextjs-middleware.d.ts",
|
|
147
|
+
"nextjs-wrapper.js",
|
|
148
|
+
"nextjs-wrapper.d.ts",
|
|
149
|
+
"nextjs-webpack-config.js",
|
|
150
|
+
"nuxt.mjs",
|
|
151
|
+
"nuxt.d.ts",
|
|
152
|
+
"nuxt-server-plugin.mjs",
|
|
153
|
+
"cli.js",
|
|
154
|
+
"cli/",
|
|
155
|
+
"mcp/",
|
|
156
|
+
"free-trial-banner.js",
|
|
157
|
+
"resolve-ip.js",
|
|
158
|
+
"cidr.js",
|
|
159
|
+
"firewall.js",
|
|
160
|
+
"challenge.js",
|
|
161
|
+
"otel-defaults.js",
|
|
162
|
+
"internal-thread.js",
|
|
163
|
+
"legacy-semconv.js",
|
|
164
|
+
"rate-limits.js",
|
|
165
|
+
"rate-limits.d.ts",
|
|
166
|
+
"firewall-only.js",
|
|
167
|
+
"firewall-tcp.js",
|
|
168
|
+
"firewall-iptables.js",
|
|
169
|
+
"firewall-cloud.js",
|
|
170
|
+
"register-vite.js",
|
|
171
|
+
"web-vite.mjs",
|
|
172
|
+
"app-config.js",
|
|
173
|
+
"README.md",
|
|
169
174
|
"NPM_README.md",
|
|
170
175
|
"TELEMETRY-SQL.md",
|
|
171
|
-
"SKILL-CLI.md",
|
|
172
|
-
"SKILL-API.md"
|
|
173
|
-
],
|
|
174
|
-
"dependencies": {
|
|
175
|
-
"@opentelemetry/api": ">=1.9.0 <1.10.0",
|
|
176
|
-
"@opentelemetry/api-logs": "0.
|
|
177
|
-
"@opentelemetry/auto-instrumentations-node": "0.
|
|
178
|
-
"@opentelemetry/core": "2.
|
|
179
|
-
"@opentelemetry/exporter-logs-otlp-http": "0.
|
|
180
|
-
"@opentelemetry/exporter-trace-otlp-http": "0.
|
|
181
|
-
"@opentelemetry/instrumentation": "0.
|
|
182
|
-
"@opentelemetry/instrumentation-document-load": "0.
|
|
183
|
-
"@opentelemetry/instrumentation-fetch": "0.
|
|
184
|
-
"@opentelemetry/instrumentation-http": "0.
|
|
185
|
-
"@opentelemetry/instrumentation-mongodb": "0.
|
|
186
|
-
"@opentelemetry/instrumentation-user-interaction": "0.
|
|
187
|
-
"@opentelemetry/instrumentation-xml-http-request": "0.
|
|
188
|
-
"@opentelemetry/resources": "2.
|
|
189
|
-
"@opentelemetry/sdk-logs": "0.
|
|
190
|
-
"@opentelemetry/sdk-metrics": "2.
|
|
191
|
-
"@opentelemetry/sdk-node": "0.
|
|
192
|
-
"@opentelemetry/sdk-trace-base": "2.
|
|
193
|
-
"@opentelemetry/sdk-trace-web": "2.
|
|
194
|
-
"@opentelemetry/semantic-conventions": "1.43.0"
|
|
195
|
-
},
|
|
196
|
-
"optionalDependencies": {
|
|
197
|
-
"@vercel/otel": "2.1.3"
|
|
198
|
-
},
|
|
199
|
-
"sideEffects": true,
|
|
200
|
-
"license": "ISC"
|
|
201
|
-
}
|
|
176
|
+
"SKILL-CLI.md",
|
|
177
|
+
"SKILL-API.md"
|
|
178
|
+
],
|
|
179
|
+
"dependencies": {
|
|
180
|
+
"@opentelemetry/api": ">=1.9.0 <1.10.0",
|
|
181
|
+
"@opentelemetry/api-logs": "0.222.0",
|
|
182
|
+
"@opentelemetry/auto-instrumentations-node": "0.80.0",
|
|
183
|
+
"@opentelemetry/core": "2.11.0",
|
|
184
|
+
"@opentelemetry/exporter-logs-otlp-http": "0.222.0",
|
|
185
|
+
"@opentelemetry/exporter-trace-otlp-http": "0.222.0",
|
|
186
|
+
"@opentelemetry/instrumentation": "0.222.0",
|
|
187
|
+
"@opentelemetry/instrumentation-document-load": "0.67.0",
|
|
188
|
+
"@opentelemetry/instrumentation-fetch": "0.222.0",
|
|
189
|
+
"@opentelemetry/instrumentation-http": "0.222.0",
|
|
190
|
+
"@opentelemetry/instrumentation-mongodb": "0.75.0",
|
|
191
|
+
"@opentelemetry/instrumentation-user-interaction": "0.66.0",
|
|
192
|
+
"@opentelemetry/instrumentation-xml-http-request": "0.222.0",
|
|
193
|
+
"@opentelemetry/resources": "2.11.0",
|
|
194
|
+
"@opentelemetry/sdk-logs": "0.222.0",
|
|
195
|
+
"@opentelemetry/sdk-metrics": "2.11.0",
|
|
196
|
+
"@opentelemetry/sdk-node": "0.222.0",
|
|
197
|
+
"@opentelemetry/sdk-trace-base": "2.11.0",
|
|
198
|
+
"@opentelemetry/sdk-trace-web": "2.11.0",
|
|
199
|
+
"@opentelemetry/semantic-conventions": "1.43.0"
|
|
200
|
+
},
|
|
201
|
+
"optionalDependencies": {
|
|
202
|
+
"@vercel/otel": "2.1.3"
|
|
203
|
+
},
|
|
204
|
+
"sideEffects": true,
|
|
205
|
+
"license": "ISC"
|
|
206
|
+
}
|
package/register.js
CHANGED
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
// For ESM apps ("type": "module"), this file auto-registers the
|
|
5
5
|
// OpenTelemetry ESM loader hook via module.register() (Node >=20.6).
|
|
6
6
|
// On older Node versions it falls back to a warning.
|
|
7
|
-
'use strict';
|
|
8
|
-
|
|
9
|
-
//
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
// Do nothing inside Node's internal ESM-hooks thread (see internal-thread.js).
|
|
10
|
+
if (require('./internal-thread').inInternalThread()) return;
|
|
11
|
+
|
|
12
|
+
// 1. Auto-register the ESM loader hook so customers never need --import
|
|
10
13
|
(() => {
|
|
11
14
|
try {
|
|
12
15
|
const fs = require('fs');
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
const pkgPath = path.resolve(process.cwd(), 'package.json');
|
|
15
18
|
if (!fs.existsSync(pkgPath)) return;
|
|
16
19
|
|
|
17
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8').replace(/^\uFEFF/, ''));
|
|
20
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8').replace(/^\uFEFF/, ''));
|
|
18
21
|
if (pkg.type !== 'module') return;
|
|
19
22
|
|
|
20
23
|
// Already registered via --import?
|
|
@@ -37,5 +40,5 @@
|
|
|
37
40
|
}
|
|
38
41
|
})();
|
|
39
42
|
|
|
40
|
-
// 2. Run the OTel SDK setup
|
|
41
|
-
require('./tracing');
|
|
43
|
+
// 2. Run the OTel SDK setup
|
|
44
|
+
require('./tracing');
|
package/tracing.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
// Do nothing inside Node's internal ESM-hooks thread (see internal-thread.js).
|
|
4
|
+
if (require('./internal-thread').inInternalThread()) return;
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
7
|
* Preload with: node --require securenow/register app.js
|
|
5
8
|
*
|
|
@@ -555,9 +558,13 @@ function installRequestBodyObserver(span, request, contentType) {
|
|
|
555
558
|
// -------- Trusted proxy IP resolution --------
|
|
556
559
|
const { resolveClientIpWithDetails } = require('./resolve-ip');
|
|
557
560
|
|
|
558
|
-
// Configure HTTP instrumentation with body capture
|
|
561
|
+
// Configure HTTP instrumentation with body capture.
|
|
562
|
+
// withLegacyHttpSemconv keeps emitting the http.method/http.target/http.status_code/...
|
|
563
|
+
// attributes the SecureNow pipeline filters on; instrumentation-http >= 0.221
|
|
564
|
+
// only emits the stable HTTP semantic conventions on its own.
|
|
559
565
|
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
|
|
560
|
-
const
|
|
566
|
+
const { withLegacyHttpSemconv, withLegacyDbSemconvExporter } = require('./legacy-semconv');
|
|
567
|
+
const httpInstrumentation = new HttpInstrumentation(withLegacyHttpSemconv({
|
|
561
568
|
requestHook: (span, request) => {
|
|
562
569
|
try {
|
|
563
570
|
const ipDetails = resolveClientIpWithDetails(request);
|
|
@@ -607,7 +614,7 @@ const httpInstrumentation = new HttpInstrumentation({
|
|
|
607
614
|
// Silently fail
|
|
608
615
|
}
|
|
609
616
|
},
|
|
610
|
-
});
|
|
617
|
+
}));
|
|
611
618
|
|
|
612
619
|
// -------- Logging Configuration --------
|
|
613
620
|
// Opt-out default: set config.logging.enabled=false to disable.
|
|
@@ -630,7 +637,9 @@ if (loggingEnabled) {
|
|
|
630
637
|
headers
|
|
631
638
|
});
|
|
632
639
|
|
|
633
|
-
|
|
640
|
+
// @opentelemetry/sdk-logs >= 0.220 takes a single options object; passing the
|
|
641
|
+
// exporter positionally leaves the processor without an exporter (no logs).
|
|
642
|
+
const batchLogProcessor = new BatchLogRecordProcessor({ exporter: logExporter });
|
|
634
643
|
loggerProvider = new LoggerProvider({
|
|
635
644
|
resource: sharedResource,
|
|
636
645
|
processors: [batchLogProcessor],
|
|
@@ -738,7 +747,9 @@ process.on('unhandledRejection', (reason) => {
|
|
|
738
747
|
});
|
|
739
748
|
|
|
740
749
|
// -------- SDK --------
|
|
741
|
-
|
|
750
|
+
// Contrib DB instrumentations >= 0.74 only emit stable db.* names; the wrapper
|
|
751
|
+
// also exports the legacy db.statement/db.system/... aliases SecureNow reads.
|
|
752
|
+
const traceExporter = withLegacyDbSemconvExporter(new OTLPTraceExporter({ url: tracesUrl, headers }));
|
|
742
753
|
const sdk = new NodeSDK({
|
|
743
754
|
...nodeSdkTelemetryOptions,
|
|
744
755
|
traceExporter,
|