elastic / apm-agent-nodejs

https://www.elastic.co/guide/en/apm/agent/nodejs/current/index.html
BSD 2-Clause "Simplified" License
581 stars 224 forks source link

next@13.3.0 support #3263

Open trentm opened 1 year ago

trentm commented 1 year ago

Next.js 13.3.0 broke our (experimental) instrumentation -- see the test failures on this dependabot PR: https://github.com/elastic/apm-agent-nodejs/pull/3257

(Similarly, next@13.2.0 broke our instrumentation not so long ago: https://github.com/elastic/apm-agent-nodejs/pull/3178)

This issue is to add support for next@13.3.0. In the interim, we will have a quick PR to change the version guard on Next.js instrumentation support to be on the minor version (... <13.3.0) rather than on the major version (... <14.0.0) as is more typical of other instrumentations. (It makes some sense that our instrumentation is more brittle here, because we are digging into Next.js internal routing code that isn't very amenable to being instrumentation -- at least at the level that I tried for.)

trentm commented 1 year ago
Part of a test failure log ``` ... # -- dev server tests -- # setup: start Next.js dev server (next dev) # [Next.js server stdout] ready - started server on localhost:3000, url: http://localhost:3000 # [Next.js server stdout] event - compiled client and server successfully in 2.3s (161 modules) # [Next.js server stdout] wait - compiling /api/an-api-endpoint (client and server)... # [Next.js server stdout] event - compiled successfully in 39 ms (36 modules) # Next.js server is ready # make requests # makeTestRequest: trailing slash redirect (GET http://localhost:3000/a-page/) ok 117 res.statusCode === 308 ok 118 res.headers["location"] === "/a-page" # makeTestRequest: configured (in next.config.js) redirect (GET http://localhost:3000/redirect-to-a-page) ok 119 res.statusCode === 307 ok 120 res.headers["location"] === "/a-page" # makeTestRequest: rewrite to a page (GET http://localhost:3000/rewrite-to-a-page) # [Next.js server stdout] wait - compiling /a-page (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 635 ms (227 modules) ok 121 res.statusCode === 200 ok 122 res.headers["content-type"] =~ /text\/html/ ok 123 body =~ /This is APage/ # makeTestRequest: rewrite to a dynamic page (GET http://localhost:3000/rewrite-to-a-dynamic-page/3.14159) # [Next.js server stdout] wait - compiling /a-dynamic-page/[num] (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 125 ms (232 modules) ok 124 res.statusCode === 200 ok 125 res.headers["content-type"] =~ /text\/html/ ok 126 body =~ /This is ADynamicPage/ # makeTestRequest: rewrite to a /public/... folder file (GET http://localhost:3000/rewrite-to-a-public-file) ok 127 res.statusCode === 200 ok 128 res.headers["content-type"] === "image/x-icon" # makeTestRequest: rewrite to a 404 (GET http://localhost:3000/rewrite-to-a-404) # [Next.js server stdout] wait - compiling /_error (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 126 ms (233 modules) ok 129 res.statusCode === 404 # makeTestRequest: rewrite to a external site (GET http://localhost:3000/rewrite-external/foo) # [Next.js server stderr] Failed to proxy https://old.example.com/foo Error: getaddrinfo ENOTFOUND old.example.com # | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26) # | at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) { # | errno: -3008, # | code: 'ENOTFOUND', # | syscall: 'getaddrinfo', # | hostname: 'old.example.com' # |} # [Next.js server stderr] error - Error: getaddrinfo ENOTFOUND old.example.com # | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26) # | at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) { # | errno: -3008, # | code: 'ENOTFOUND', # | syscall: 'getaddrinfo', # | hostname: 'old.example.com', # | [Symbol(ElasticAPMNextJsErrIsCaptured)]: true # |} # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-10T01:13:34.179Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"bec94b7178af41635c2bc574fcdaadd3\"}"} ok 130 res.statusCode === 500 # makeTestRequest: index page (GET http://localhost:3000/) # [Next.js server stdout] wait - compiling / (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 123 ms (236 modules) ok 131 res.statusCode === 200 ok 132 res.headers["content-type"] =~ /text\/html/ ok 133 body =~ /This is IndexPage/ # makeTestRequest: a page (Server-Side Generated, SSG) (GET http://localhost:3000/a-page) ok 134 res.statusCode === 200 ok 135 res.headers["content-type"] =~ /text\/html/ ok 136 body =~ /This is APage/ # makeTestRequest: a dynamic page (GET http://localhost:3000/a-dynamic-page/42) ok 137 res.statusCode === 200 ok 138 res.headers["content-type"] =~ /text\/html/ ok 139 body =~ /This is ADynamicPage/ # makeTestRequest: a server-side rendered (SSR) page (GET http://localhost:3000/an-ssr-page) # [Next.js server stdout] wait - compiling /an-ssr-page (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 139 ms (239 modules) ok 140 res.statusCode === 200 ok 141 res.headers["content-type"] =~ /text\/html/ ok 142 body =~ /This is AnSSRPage/ # makeTestRequest: an API endpoint page (GET http://localhost:3000/api/an-api-endpoint) ok 143 res.statusCode === 200 ok 144 res.headers["content-type"] =~ /application\/json/ ok 145 body # makeTestRequest: a dynamic API endpoint page (GET http://localhost:3000/api/a-dynamic-api-endpoint/123) # [Next.js server stdout] wait - compiling /api/a-dynamic-api-endpoint/[num] (client and server)... # [Next.js server stdout] event - compiled successfully in 50 ms (72 modules) ok 146 res.statusCode === 200 ok 147 res.headers["content-type"] =~ /application\/json/ ok 148 body # makeTestRequest: "_next/data catchall" route (GET http://localhost:3000/_next/data/development/a-page.json) ok 149 res.statusCode === 200 ok 150 res.headers["content-type"] =~ /application\/json/ # makeTestRequest: an API endpoint that throws (GET http://localhost:3000/api/an-api-endpoint-that-throws) # [Next.js server stdout] wait - compiling /api/an-api-endpoint-that-throws (client and server)... # [Next.js server stdout] event - compiled successfully in 79 ms (73 modules) # [Next.js server stderr] error - pages/api/an-api-endpoint-that-throws.js (11:8) @ anApiEndpointThatThrows # [Next.js server stderr] error - Error: An error thrown in anApiEndpointThatThrows handler # | at anApiEndpointThatThrows (webpack-internal:///(api)/./pages/api/an-api-endpoint-that-throws.js:12:11) # | at wrappedApiHandler (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/lib/instrumentation/modules/next/dist/server/api-utils/node.js:73:24) # | at /home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/api-utils/node.js:377:16 # | at /home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:92:36 # | at NoopContextManager.with (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NoopTracer.startActiveSpan (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js:65:31) # | at ProxyTracer.startActiveSpan (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js:36:24) # | at /home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:107 # | at NoopContextManager.with (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NextTracerImpl.trace (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:32) # | at Object.apiResolver (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/api-utils/node.js:375:63) # | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) # | at async DevServer.runApi (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/next-server.js:571:9) # | at async Object.fn (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/next-server.js:1018:35) # | at async Router.execute (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/router.js:297:32) # | at async DevServer.runImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:522:29) # | at async DevServer.run (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/dev/next-dev-server.js:869:20) # | at async DevServer.handleRequestImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:456:20) { # | digest: undefined # |} # [Next.js server stderr] 9 | // Always executed server-side. # | 10 | export default function anApiEndpointThatThrows (req, res) { # |> 11 | throw new Error('An error thrown in anApiEndpointThatThrows handler') # | | ^ # | 12 | } # | 13 | # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-10T01:13:35.238Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"4a2311f4d51510aa168aca3d94d54b25\"}"} ok 151 res.statusCode === 500 # makeTestRequest: a throw in a page handler (GET http://localhost:3000/a-throw-in-page-handler) # [Next.js server stdout] wait - compiling /a-throw-in-page-handler (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 133 ms (244 modules) # [Next.js server stderr] Error: throw in page handler # | at AThrowInPageHandler (webpack-internal:///./pages/a-throw-in-page-handler.js:24:11) # | at renderWithHooks (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5658:16) # | at renderIndeterminateComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5731:15) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at finishClassComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5688:3) # | at renderClassComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5696:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5943:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # [Next.js server stderr] error - pages/a-throw-in-page-handler.js (22:8) @ AThrowInPageHandler # |error - Error: throw in page handler # | at AThrowInPageHandler (webpack-internal:///./pages/a-throw-in-page-handler.js:24:11) # | at renderWithHooks (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5658:16) # | at renderIndeterminateComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5731:15) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at finishClassComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5688:3) # | at renderClassComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5696:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5943:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) { # | digest: undefined # |} # | 20 | // or via `curl -i ...`, then this is executed server-side. Only in the # | 21 | // latter case will the Node.js APM agent capture an error, of course. # |> 22 | throw new Error('throw in page handler') # | | ^ # | 23 | } # | 24 | # | 25 | export default AThrowInPageHandler # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-10T01:13:35.503Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"272c21a9bc62bd9246e0627221ac1551\"}"} ok 152 res.statusCode === 500 # makeTestRequest: a throw in getServerSideProps (GET http://localhost:3000/a-throw-in-getServerSideProps) # [Next.js server stdout] wait - compiling /a-throw-in-getServerSideProps (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 87 ms (247 modules) # [Next.js server stderr] error - pages/a-throw-in-getServerSideProps.js (14:8) @ getServerSideProps # [Next.js server stderr] error - Error: thrown error in getServerSideProps # | at getServerSideProps (webpack-internal:///./pages/a-throw-in-getServerSideProps.js:19:11) # | at /home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/render.js:546:26 # | at /home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:92:36 /home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/test.js:224 if (err) throw err ^ Error: non-zero error code at WriteStream.onClose (/home/runner/work/apm-agent-nodejs/apm-agent-nodejs/test/test.js:86:25) at WriteStream.emit (node:events:513:28) at emitCloseNT (node:internal/streams/destroy:132:10) at process.processTicksAndRejections (node:internal/process/task_queues:81:21) { code: 'ENONZERO', exitCode: 1 } ```

It looks like the only failures are in the "dev-server" parts of the tests.

trentm commented 1 year ago
Failure running it locally (on the next@13.3.0 version) ``` % TAV=next npm run test:tav > elastic-apm-node@3.44.1 test:tav > tav --quiet && (cd test/instrumentation/modules/next/a-nextjs-app && tav --quiet) -- ok -- required packages ["react@^18.2.0","react-dom@^18.2.0","next@13.3.0"] -- installing ["react@^18.2.0","react-dom@^18.2.0","next@13.3.0"] -- running test "node ../next.test.js" with next /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/next.test.js:538 t.equal(evt.transaction.name, 'GET /api/an-api-endpoint', 'waitForServerReady request') ^ TypeError: Cannot read properties of undefined (reading 'name') at checkExpectedApmEvents (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/next.test.js:538:27) at ChildProcess. (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/next.test.js:819:7) at ChildProcess.emit (node:events:513:28) at maybeClose (node:internal/child_process:1100:16) at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5) -- detected failing command, flushing stdout... TAP version 13 # SKIP setup: npm ci (in /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app) # setup: filter TEST_REQUESTS # setup: mock APM server # mock APM serverUrl: http://localhost:52014 # -- prod server tests -- # setup: npm run build ok 1 "npm run build" succeeded (took 16.385s) # setup: start Next.js prod server (next start) # [Next.js server stdout] ready - started server on localhost:3000, url: http://localhost:3000 # Next.js server is ready # make requests # makeTestRequest: trailing slash redirect (GET http://localhost:3000/a-page/) ok 2 res.statusCode === 308 ok 3 res.headers["location"] === "/a-page" # makeTestRequest: configured (in next.config.js) redirect (GET http://localhost:3000/redirect-to-a-page) ok 4 res.statusCode === 307 ok 5 res.headers["location"] === "/a-page" # makeTestRequest: rewrite to a page (GET http://localhost:3000/rewrite-to-a-page) ok 6 res.statusCode === 200 ok 7 res.headers["content-type"] =~ /text\/html/ ok 8 body =~ /This is APage/ # makeTestRequest: rewrite to a dynamic page (GET http://localhost:3000/rewrite-to-a-dynamic-page/3.14159) ok 9 res.statusCode === 200 ok 10 res.headers["content-type"] =~ /text\/html/ ok 11 body =~ /This is ADynamicPage/ # makeTestRequest: rewrite to a /public/... folder file (GET http://localhost:3000/rewrite-to-a-public-file) ok 12 res.statusCode === 200 ok 13 res.headers["content-type"] === "image/x-icon" # makeTestRequest: rewrite to a 404 (GET http://localhost:3000/rewrite-to-a-404) ok 14 res.statusCode === 404 # makeTestRequest: rewrite to a external site (GET http://localhost:3000/rewrite-external/foo) # [Next.js server stderr] Failed to proxy https://old.example.com/foo Error: getaddrinfo ENOTFOUND old.example.com # | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) # | at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) { # | errno: -3008, # | code: 'ENOTFOUND', # | syscall: 'getaddrinfo', # | hostname: 'old.example.com' # |} # [Next.js server stderr] Error: getaddrinfo ENOTFOUND old.example.com # | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) # | at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) { # | errno: -3008, # | code: 'ENOTFOUND', # | syscall: 'getaddrinfo', # | hostname: 'old.example.com' # |} ok 15 res.statusCode === 500 # makeTestRequest: index page (GET http://localhost:3000/) ok 16 res.statusCode === 200 ok 17 res.headers["content-type"] =~ /text\/html/ ok 18 body =~ /This is IndexPage/ # makeTestRequest: a page (Server-Side Generated, SSG) (GET http://localhost:3000/a-page) ok 19 res.statusCode === 200 ok 20 res.headers["content-type"] =~ /text\/html/ ok 21 body =~ /This is APage/ # makeTestRequest: a dynamic page (GET http://localhost:3000/a-dynamic-page/42) ok 22 res.statusCode === 200 ok 23 res.headers["content-type"] =~ /text\/html/ ok 24 body =~ /This is ADynamicPage/ # makeTestRequest: a server-side rendered (SSR) page (GET http://localhost:3000/an-ssr-page) ok 25 res.statusCode === 200 ok 26 res.headers["content-type"] =~ /text\/html/ ok 27 body =~ /This is AnSSRPage/ # makeTestRequest: an API endpoint page (GET http://localhost:3000/api/an-api-endpoint) ok 28 res.statusCode === 200 ok 29 res.headers["content-type"] =~ /application\/json/ ok 30 body # makeTestRequest: a dynamic API endpoint page (GET http://localhost:3000/api/a-dynamic-api-endpoint/123) ok 31 res.statusCode === 200 ok 32 res.headers["content-type"] =~ /application\/json/ ok 33 body # makeTestRequest: "_next/data catchall" route (GET http://localhost:3000/_next/data/KAicVjm4MhvfI59lWffAf/a-page.json) ok 34 res.statusCode === 200 ok 35 res.headers["content-type"] =~ /application\/json/ # makeTestRequest: an API endpoint that throws (GET http://localhost:3000/api/an-api-endpoint-that-throws) # [Next.js server stderr] Error: An error thrown in anApiEndpointThatThrows handler # | at anApiEndpointThatThrows (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/.next/server/pages/api/an-api-endpoint-that-throws.js:22:11) # | at wrappedApiHandler (/Users/trentm/el/apm-agent-nodejs2/lib/instrumentation/modules/next/dist/server/api-utils/node.js:73:24) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/api-utils/node.js:377:16 # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:92:36 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NoopTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js:65:31) # | at ProxyTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js:36:24) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:107 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NextTracerImpl.trace (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:32) # | at Object.apiResolver (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/api-utils/node.js:375:63) # | at processTicksAndRejections (node:internal/process/task_queues:96:5) # | at async NextNodeServer.runApi (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/next-server.js:571:9) # | at async Object.fn (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/next-server.js:1018:35) # | at async Router.execute (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/router.js:297:32) # | at async NextNodeServer.runImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:522:29) # | at async NextNodeServer.handleRequestImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:456:20) { # | [Symbol(ElasticAPMNextJsErrIsCaptured)]: true # |} ok 36 res.statusCode === 500 # makeTestRequest: a throw in a page handler (GET http://localhost:3000/a-throw-in-page-handler) # [Next.js server stderr] Error: throw in page handler # | at AThrowInPageHandler (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/.next/server/pages/a-throw-in-page-handler.js:34:11) # | at Wc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:68:44) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:253) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Xc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:68:409) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:210) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at $c (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98) # | at bd (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:77:404) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:217) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:71:479) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at $c (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98) # | at bd (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:77:404) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:217) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:71:479) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at $c (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:71:145) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at ok 37 res.statusCode === 500 # makeTestRequest: a throw in getServerSideProps (GET http://localhost:3000/a-throw-in-getServerSideProps) # [Next.js server stderr] Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # [Next.js server stderr] Error: throw in page handler # | at AThrowInPageHandler (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/.next/server/pages/a-throw-in-page-handler.js:34:11) # | at Wc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:68:44) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:253) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Xc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:68:409) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:210) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at $c (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98) # | at bd (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:77:404) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:217) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:71:479) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:74:209) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at $c (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98) # | at bd (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:77:404) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:217) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:71:479) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at $c (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:78:98) # | at Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:71:145) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # | at # [Next.js server stderr] Zc (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:70:481) # | at Z (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js:76:89) # [Next.js server stderr] Error: thrown error in getServerSideProps # | at getServerSideProps (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/.next/server/pages/a-throw-in-getServerSideProps.js:29:11) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/render.js:546:26 # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:92:36 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NoopTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js:65:31) # | at ProxyTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js:36:24) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:107 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NextTracerImpl.trace (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:32) # | at Object.renderToHTML (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/render.js:541:51) # | at processTicksAndRejections (node:internal/process/task_queues:96:5) # | at async doRender (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:936:34) # | at async cacheEntry1.responseCache.get.incrementalCache.incrementalCache (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:1059:28) # | at async /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/response-cache/index.js:83:36 ok 38 res.statusCode === 500 # check all APM events # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-11T19:02:57.808Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"6fef42424e0bc5b980c8c5a484a62944\"}"} # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-11T19:02:57.824Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"97db114fd112947b78edaa984997fee0\"}"} # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-11T19:02:57.824Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"84c6bd8d8360f7fb5bdfcf1f5fab28d6\"}"} ok 39 Next.js server exit status was 0 ok 40 metadata is first event ok 41 metadata.service.name ok 42 metadata.service.framework.name ok 43 metadata.service.framework.version ok 44 waitForServerReady request ok 45 transaction.outcome # check APM events for "trailing slash redirect" ok 46 should be strictly equal ok 47 transaction.name ok 48 transaction.context.response.status_code # check APM events for "configured (in next.config.js) redirect" ok 49 should be strictly equal ok 50 transaction.name ok 51 transaction.context.response.status_code # check APM events for "rewrite to a page" ok 52 should be strictly equal ok 53 transaction.name ok 54 transaction.context.response.status_code # check APM events for "rewrite to a dynamic page" ok 55 should be strictly equal ok 56 transaction.name ok 57 transaction.context.response.status_code # check APM events for "rewrite to a /public/... folder file" ok 58 should be strictly equal ok 59 transaction.name ok 60 transaction.context.response.status_code # check APM events for "rewrite to a 404" ok 61 should be strictly equal ok 62 transaction.name ok 63 transaction.context.response.status_code # check APM events for "rewrite to a external site" ok 64 expected number of APM events ok 65 transaction.name ok 66 transaction.context.response.status_code # check APM events for "index page" ok 67 should be strictly equal ok 68 transaction.name ok 69 transaction.context.response.status_code # check APM events for "a page (Server-Side Generated, SSG)" ok 70 should be strictly equal ok 71 transaction.name ok 72 transaction.context.response.status_code # check APM events for "a dynamic page" ok 73 should be strictly equal ok 74 transaction.name ok 75 transaction.context.response.status_code # check APM events for "a server-side rendered (SSR) page" ok 76 should be strictly equal ok 77 transaction.name ok 78 transaction.context.response.status_code # check APM events for "an API endpoint page" ok 79 should be strictly equal ok 80 transaction.name ok 81 transaction.context.response.status_code # check APM events for "a dynamic API endpoint page" ok 82 should be strictly equal ok 83 transaction.name ok 84 transaction.context.response.status_code # check APM events for ""_next/data catchall" route" ok 85 should be strictly equal ok 86 transaction.name ok 87 transaction.context.response.status_code # check APM events for "an API endpoint that throws" ok 88 should be strictly equal ok 89 transaction.name ok 90 transaction.context.response.status_code ok 91 captured an APM error ok 92 transaction and error are in same trace ok 93 error is a child of the transaction ok 94 error.transaction.type ok 95 error.transaction.name ok 96 error.exception.message # check APM events for "a throw in a page handler" ok 97 should be strictly equal ok 98 transaction.name ok 99 transaction.context.response.status_code ok 100 captured an APM error ok 101 transaction and error are in same trace ok 102 error is a child of the transaction ok 103 error.transaction.type ok 104 error.transaction.name ok 105 error.exception.message # check APM events for "a throw in getServerSideProps" ok 106 should be strictly equal ok 107 transaction.name ok 108 transaction.context.response.status_code ok 109 captured an APM error ok 110 transaction and error are in same trace ok 111 error is a child of the transaction ok 112 error.transaction.type ok 113 error.transaction.name ok 114 error.exception.message ok 115 no additional unexpected APM server events: [] # -- dev server tests -- # setup: start Next.js dev server (next dev) # [Next.js server stdout] ready - started server on localhost:3000, url: http://localhost:3000 # [Next.js server stdout] event - compiled client and server successfully in 1253 ms (161 modules) # [Next.js server stdout] wait - compiling /api/an-api-endpoint (client and server)... # [Next.js server stdout] event - compiled successfully in 27 ms (36 modules) # Next.js server is ready # make requests # makeTestRequest: trailing slash redirect (GET http://localhost:3000/a-page/) ok 116 res.statusCode === 308 ok 117 res.headers["location"] === "/a-page" # makeTestRequest: configured (in next.config.js) redirect (GET http://localhost:3000/redirect-to-a-page) ok 118 res.statusCode === 307 ok 119 res.headers["location"] === "/a-page" # makeTestRequest: rewrite to a page (GET http://localhost:3000/rewrite-to-a-page) # [Next.js server stdout] wait - compiling /a-page (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 441 ms (243 modules) ok 120 res.statusCode === 200 ok 121 res.headers["content-type"] =~ /text\/html/ ok 122 body =~ /This is APage/ # makeTestRequest: rewrite to a dynamic page (GET http://localhost:3000/rewrite-to-a-dynamic-page/3.14159) # [Next.js server stdout] wait - compiling /a-dynamic-page/[num] (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 77 ms (248 modules) ok 123 res.statusCode === 200 ok 124 res.headers["content-type"] =~ /text\/html/ ok 125 body =~ /This is ADynamicPage/ # makeTestRequest: rewrite to a /public/... folder file (GET http://localhost:3000/rewrite-to-a-public-file) ok 126 res.statusCode === 200 ok 127 res.headers["content-type"] === "image/x-icon" # makeTestRequest: rewrite to a 404 (GET http://localhost:3000/rewrite-to-a-404) # [Next.js server stdout] wait - compiling /_error (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 59 ms (249 modules) ok 128 res.statusCode === 404 # makeTestRequest: rewrite to a external site (GET http://localhost:3000/rewrite-external/foo) # [Next.js server stderr] Failed to proxy https://old.example.com/foo Error: getaddrinfo ENOTFOUND old.example.com # | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) # | at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) { # | errno: -3008, # | code: 'ENOTFOUND', # | syscall: 'getaddrinfo', # | hostname: 'old.example.com' # |} # [Next.js server stderr] error - Error: getaddrinfo ENOTFOUND old.example.com # | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) # | at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) { # | errno: -3008, # | code: 'ENOTFOUND', # | syscall: 'getaddrinfo', # | hostname: 'old.example.com', # | [Symbol(ElasticAPMNextJsErrIsCaptured)]: true # |} # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-11T19:03:07.032Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"46a5c6baaa1d5ace12576542258865d2\"}"} ok 129 res.statusCode === 500 # makeTestRequest: index page (GET http://localhost:3000/) # [Next.js server stdout] wait - compiling / (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 79 ms (252 modules) ok 130 res.statusCode === 200 ok 131 res.headers["content-type"] =~ /text\/html/ ok 132 body =~ /This is IndexPage/ # makeTestRequest: a page (Server-Side Generated, SSG) (GET http://localhost:3000/a-page) ok 133 res.statusCode === 200 ok 134 res.headers["content-type"] =~ /text\/html/ ok 135 body =~ /This is APage/ # makeTestRequest: a dynamic page (GET http://localhost:3000/a-dynamic-page/42) ok 136 res.statusCode === 200 ok 137 res.headers["content-type"] =~ /text\/html/ ok 138 body =~ /This is ADynamicPage/ # makeTestRequest: a server-side rendered (SSR) page (GET http://localhost:3000/an-ssr-page) # [Next.js server stdout] wait - compiling /an-ssr-page (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 65 ms (255 modules) ok 139 res.statusCode === 200 ok 140 res.headers["content-type"] =~ /text\/html/ ok 141 body =~ /This is AnSSRPage/ # makeTestRequest: an API endpoint page (GET http://localhost:3000/api/an-api-endpoint) ok 142 res.statusCode === 200 ok 143 res.headers["content-type"] =~ /application\/json/ ok 144 body # makeTestRequest: a dynamic API endpoint page (GET http://localhost:3000/api/a-dynamic-api-endpoint/123) # [Next.js server stdout] wait - compiling /api/a-dynamic-api-endpoint/[num] (client and server)... # [Next.js server stdout] event - compiled successfully in 17 ms (72 modules) ok 145 res.statusCode === 200 ok 146 res.headers["content-type"] =~ /application\/json/ ok 147 body # makeTestRequest: "_next/data catchall" route (GET http://localhost:3000/_next/data/development/a-page.json) ok 148 res.statusCode === 200 ok 149 res.headers["content-type"] =~ /application\/json/ # makeTestRequest: an API endpoint that throws (GET http://localhost:3000/api/an-api-endpoint-that-throws) # [Next.js server stdout] wait - compiling /api/an-api-endpoint-that-throws (client and server)... # [Next.js server stdout] event - compiled successfully in 18 ms (73 modules) # [Next.js server stderr] error - pages/api/an-api-endpoint-that-throws.js (11:8) @ anApiEndpointThatThrows # [Next.js server stderr] error - Error: An error thrown in anApiEndpointThatThrows handler # | at anApiEndpointThatThrows (webpack-internal:///(api)/./pages/api/an-api-endpoint-that-throws.js:12:11) # | at wrappedApiHandler (/Users/trentm/el/apm-agent-nodejs2/lib/instrumentation/modules/next/dist/server/api-utils/node.js:73:24) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/api-utils/node.js:377:16 # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:92:36 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NoopTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js:65:31) # | at ProxyTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js:36:24) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:107 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NextTracerImpl.trace (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:32) # | at Object.apiResolver (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/api-utils/node.js:375:63) # | at processTicksAndRejections (node:internal/process/task_queues:96:5) # | at async DevServer.runApi (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/next-server.js:571:9) # | at async Object.fn (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/next-server.js:1018:35) # | at async Router.execute (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/router.js:297:32) # | at async DevServer.runImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:522:29) # | at async DevServer.run (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/dev/next-dev-server.js:869:20) # | at async DevServer.handleRequestImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:456:20) { # | digest: undefined # |} # | 9 | // Always executed server-side. # | 10 | export default function anApiEndpointThatThrows (req, res) { # |> 11 | throw new Error('An error thrown in anApiEndpointThatThrows handler') # | | ^ # | 12 | } # | 13 | ok 150 res.statusCode === 500 # makeTestRequest: a throw in a page handler (GET http://localhost:3000/a-throw-in-page-handler) # [Next.js server stdout] wait - compiling /a-throw-in-page-handler (client and server)... # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-11T19:03:07.624Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"e70ce596dfc3070413314c0c56413479\"}"} # [Next.js server stdout] event - compiled client and server successfully in 63 ms (260 modules) # [Next.js server stderr] Error: throw in page handler # | at AThrowInPageHandler (webpack-internal:///./pages/a-throw-in-page-handler.js:24:11) # | at renderWithHooks (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5658:16) # | at renderIndeterminateComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5731:15) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at finishClassComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5688:3) # | at renderClassComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5696:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5943:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/ # [Next.js server stderr] apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # [Next.js server stderr] error - pages/a-throw-in-page-handler.js (22:8) @ AThrowInPageHandler # |error - Error: throw in page handler # | at AThrowInPageHandler (webpack-internal:///./pages/a-throw-in-page-handler.js:24:11) # | at renderWithHooks (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5658:16) # | at renderIndeterminateComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5731:15) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at finishClassComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5688:3) # | at renderClassComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5696:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5943:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderNode (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12) # | at renderChildrenArray (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5971:9) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderIndeterminateComponent (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5785:7) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5946:7) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cj # [Next.js server stderr] s/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) # | at renderElement (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6017:11) # | at renderNodeDestructiveImpl (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11) # | at renderNodeDestructive (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14) # | at renderContextProvider (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5920:3) { # | digest: undefined # |} # | 20 | // or via `curl -i ...`, then this is executed server-side. Only in the # | 21 | // latter case will the Node.js APM agent capture an error, of course. # |> 22 | throw new Error('throw in page handler') # | | ^ # | 23 | } # | 24 | # | 25 | export default AThrowInPageHandler # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-11T19:03:07.722Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"bacb18135730a7ac71ae6381a22c0c7d\"}"} ok 151 res.statusCode === 500 # makeTestRequest: a throw in getServerSideProps (GET http://localhost:3000/a-throw-in-getServerSideProps) # [Next.js server stdout] wait - compiling /a-throw-in-getServerSideProps (client and server)... # [Next.js server stdout] event - compiled client and server successfully in 65 ms (263 modules) # [Next.js server stderr] error - pages/a-throw-in-getServerSideProps.js (14:8) @ getServerSideProps # [Next.js server stderr] error - Error: thrown error in getServerSideProps # | at getServerSideProps (webpack-internal:///./pages/a-throw-in-getServerSideProps.js:19:11) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/render.js:546:26 # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:92:36 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NoopTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js:65:31) # | at ProxyTracer.startActiveSpan (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js:36:24) # | at /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:107 # | at NoopContextManager.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:25:19) # | at ContextAPI.with (/Users/trentm/el/apm-agent-nodejs2/node_modules/@opentelemetry/api/build/src/api/context.js:60:46) # | at NextTracerImpl.trace (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/lib/trace/tracer.js:81:32) # | at Object.renderToHTML (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/render.js:541:51) # | at processTicksAndRejections (node:internal/process/task_queues:96:5) # | at async doRender (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:936:34) # | at async cacheEntry1.responseCache.get.incrementalCache.incrementalCache (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/base-server.js:1059:28) # | at async /Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/a-nextjs-app/node_modules/next/dist/server/response-cache/index.js:83:36 { # | digest: undefined # |} # | 12 | // Gets called on every request. # | 13 | export async function getServerSideProps () { # |> 14 | throw new Error('thrown error in getServerSideProps') # | | ^ # | 15 | } # | 16 | # | 17 | function AThrowInGetServerSideProps () { # [Next.js server stdout] {"log.level":"info","@timestamp":"2023-04-11T19:03:07.855Z","log":{"logger":"elastic-apm-node"},"ecs":{"version":"1.6.0"},"message":"Sending error to Elastic APM: {\"id\":\"d7783919e004d34022069d3d3652ff70\"}"} ok 152 res.statusCode === 500 # check all APM events ok 153 Next.js server exit status was 0 ok 154 metadata is first event not ok 155 metadata.service.name --- operator: equal expected: |- 'a-nextjs-app' actual: |- 'jest-worker' at: checkExpectedApmEvents (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/next.test.js:526:5) stack: |- Error: metadata.service.name at Test.assert [as _assert] (/Users/trentm/el/apm-agent-nodejs2/node_modules/tape/lib/test.js:312:48) at Test.bound [as _assert] (/Users/trentm/el/apm-agent-nodejs2/node_modules/tape/lib/test.js:95:17) at Test.strictEqual (/Users/trentm/el/apm-agent-nodejs2/node_modules/tape/lib/test.js:476:7) at Test.bound [as equal] (/Users/trentm/el/apm-agent-nodejs2/node_modules/tape/lib/test.js:95:17) at checkExpectedApmEvents (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/next.test.js:526:5) at ChildProcess. (/Users/trentm/el/apm-agent-nodejs2/test/instrumentation/modules/next/next.test.js:819:7) at ChildProcess.emit (node:events:513:28) at maybeClose (node:internal/child_process:1100:16) at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5) ... ok 156 metadata.service.framework.name ok 157 metadata.service.framework.version -- fatal: Test exited with code 1 ```
trentm commented 1 year ago

Possibly changes for next@13.4.x as well now. See https://github.com/elastic/apm-agent-nodejs/pull/3331

sebastiangrebe commented 1 year ago

Any update on this? We are running 13.4.8 and we a lot of unknown routes

jthorupp commented 9 months ago

Are there any plans for Next@14.x.x ? We are getting some issues for parsing URLs for transaction data.

trentm commented 9 months ago

We are running 13.4.8 and we a lot of unknown routes

and

Are there any plans for Next@14.x.x?

Currently we don't have an ETA for working on updated the Next instrumentation. The Next.js instrumentation has required depending on internal implementation details of the Next.js router that we've found can change subtle and/or significantly in minor versions -- which is mainly why the support has lagged.

A hope of mine is that Next.js's core support for OpenTelemetry -- https://nextjs.org/docs/app/building-your-application/optimizing/open-telemetry -- will be a better alternative. Has anyone listening on this issue has a chance to try this? It should be straightforward to use that and configure it with something like the following environment to have it send tracing data to an APM server:

ELASTIC_APM_SERVER_URL=...
ELASTIC_APM_SECRET_TOKEN=...

OTEL_EXPORTER_OTLP_ENDPOINT=$ELASTIC_APM_SERVER_URL
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer $ELASTIC_APM_SECRET_TOKEN"

However, I haven't had a chance to try it yet.

jthorupp commented 9 months ago

NextJS Open Telemetry would ofc be the best long-term solution. Perhaps Elastic and Vercel could work together here? I assume that both companies can benefit from that.