diff --git a/packages/opentelemetry-instrumentation-http/src/utils.ts b/packages/opentelemetry-instrumentation-http/src/utils.ts index c2b41f10747..d0ac02cabab 100644 --- a/packages/opentelemetry-instrumentation-http/src/utils.ts +++ b/packages/opentelemetry-instrumentation-http/src/utils.ts @@ -465,7 +465,10 @@ export const getIncomingRequestAttributesOnResponse = ( request: IncomingMessage & { __ot_middlewares?: string[] }, response: ServerResponse & { socket: Socket } ): SpanAttributes => { - const { statusCode, statusMessage, socket } = response; + // take socket from the request, + // since it may be detached from the response object in keep-alive mode + const { socket } = request; + const { statusCode, statusMessage } = response; const { localAddress, localPort, remoteAddress, remotePort } = socket; const { __ot_middlewares } = (request as unknown) as { [key: string]: unknown; diff --git a/packages/opentelemetry-plugin-http/src/utils.ts b/packages/opentelemetry-plugin-http/src/utils.ts index e59e14042df..e06b8d59992 100644 --- a/packages/opentelemetry-plugin-http/src/utils.ts +++ b/packages/opentelemetry-plugin-http/src/utils.ts @@ -465,7 +465,10 @@ export const getIncomingRequestAttributesOnResponse = ( request: IncomingMessage & { __ot_middlewares?: string[] }, response: ServerResponse & { socket: Socket } ): SpanAttributes => { - const { statusCode, statusMessage, socket } = response; + // use socket from the request, + // since it may be detached from the response object in keep-alive mode + const { socket } = request; + const { statusCode, statusMessage } = response; const { localAddress, localPort, remoteAddress, remotePort } = socket; const { __ot_middlewares } = (request as unknown) as { [key: string]: unknown;