diff --git a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/instana_aws_product.js b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/instana_aws_product.js index 0448455c50..db51d59c39 100644 --- a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/instana_aws_product.js +++ b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/instana_aws_product.js @@ -5,6 +5,8 @@ 'use strict'; +const tracingUtil = require('../../../../tracingUtil'); + class InstanaAWSProduct { /** * @param {string} spanName @@ -50,7 +52,7 @@ class InstanaAWSProduct { span.ec = 1; const spanData = span.data && span.data[this.spanName]; if (spanData) { - spanData.error = err.message || err.code || JSON.stringify(err); + spanData.error = tracingUtil.extractErrorMessage(err); } } } diff --git a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/instana_aws_product.js b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/instana_aws_product.js index 96181df944..a68eb76c43 100644 --- a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/instana_aws_product.js +++ b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/instana_aws_product.js @@ -5,6 +5,8 @@ 'use strict'; +const tracingUtil = require('../../../../tracingUtil'); + class InstanaAWSProduct { /** * @param {string} spanName @@ -49,7 +51,7 @@ class InstanaAWSProduct { if (err) { span.ec = 1; if (span.data?.[this.spanName]) { - span.data[this.spanName].error = err.message || err.code || JSON.stringify(err); + span.data[this.spanName].error = tracingUtil.extractErrorMessage(err); } } } diff --git a/packages/core/src/tracing/instrumentation/databases/memcached.js b/packages/core/src/tracing/instrumentation/databases/memcached.js index 5392aa64bf..072c8fe0ed 100644 --- a/packages/core/src/tracing/instrumentation/databases/memcached.js +++ b/packages/core/src/tracing/instrumentation/databases/memcached.js @@ -137,7 +137,7 @@ function addErrorToSpan(err, span) { if (err) { span.ec = 1; if (span.data?.[SPAN_NAME]) { - span.data[SPAN_NAME].error = err.message || err.code || JSON.stringify(err); + span.data[SPAN_NAME].error = tracingUtil.extractErrorMessage(err); } } } diff --git a/packages/core/src/tracing/instrumentation/databases/redis.js b/packages/core/src/tracing/instrumentation/databases/redis.js index 21a14665ee..be81fdea7f 100644 --- a/packages/core/src/tracing/instrumentation/databases/redis.js +++ b/packages/core/src/tracing/instrumentation/databases/redis.js @@ -511,18 +511,13 @@ function instrumentMultiExec(origCtx, origArgs, original, address, isAtomic, cbS if (err) { span.ec = 1; - if (err.message) { - span.data.redis.error = err.message; - } else if (Array.isArray(err) && err.length) { - span.data.redis.error = err[0].message; + if (Array.isArray(err) && err.length) { + span.data.redis.error = tracingUtil.extractErrorMessage(err[0]); + } else if (err.errors && err.errors.length) { + // v3 = provides sub errors + span.data.redis.error = err.errors.map(subErr => tracingUtil.extractErrorMessage(subErr)).join('\n'); } else { - span.data.redis.error = 'Unknown error'; - } - - // v3 = provides sub errors - if (err.errors && err.errors.length) { - // TODO: Not updating now as special case - span.data.redis.error = err.errors.map(subErr => subErr.message).join('\n'); + span.data.redis.error = tracingUtil.extractErrorMessage(err); } } diff --git a/packages/core/src/tracing/instrumentation/frameworks/express.js b/packages/core/src/tracing/instrumentation/frameworks/express.js index 2f4a89ff17..8b4113b999 100644 --- a/packages/core/src/tracing/instrumentation/frameworks/express.js +++ b/packages/core/src/tracing/instrumentation/frameworks/express.js @@ -68,7 +68,7 @@ function shimExpressHandle(realHandle) { function wrapExpress4HandleFn(fn) { return function wrappedHandleFn(err) { - if (err && err.message && err.stack) { + if (err && (err.message || err.cause) && err.stack) { annotateHttpEntrySpanWithError(err); } return fn.apply(this, arguments); diff --git a/packages/core/src/tracing/instrumentation/protocols/graphql.js b/packages/core/src/tracing/instrumentation/protocols/graphql.js index 5fcbcef99c..dc7764c8c7 100644 --- a/packages/core/src/tracing/instrumentation/protocols/graphql.js +++ b/packages/core/src/tracing/instrumentation/protocols/graphql.js @@ -299,7 +299,7 @@ function finishSpan(span, result) { function finishWithException(span, err) { span.ec = 1; span.d = Date.now() - span.ts; - span.data.graphql.errors = err.message; + span.data.graphql.errors = tracingUtil.extractErrorMessage(err); if (!span.postponeTransmit) { span.transmit(); } diff --git a/packages/core/src/tracing/instrumentation/protocols/grpcJs.js b/packages/core/src/tracing/instrumentation/protocols/grpcJs.js index 8bc4e83e1f..2283fa50d9 100644 --- a/packages/core/src/tracing/instrumentation/protocols/grpcJs.js +++ b/packages/core/src/tracing/instrumentation/protocols/grpcJs.js @@ -110,7 +110,7 @@ function modifyArgs(name, originalArgs, span) { span.d = Date.now() - span.ts; if (err) { - const errorMessage = err.details || err.message; + const errorMessage = tracingUtil.extractErrorMessage(err); if (typeof errorMessage === 'string' && errorMessage.toLowerCase().includes('cancelled')) { // No-op, we do not want to mark cancelled calls as erroneous. } else { @@ -420,7 +420,7 @@ function instrumentedClientMethod( call.on('error', err => { span.d = Date.now() - span.ts; - const errorMessage = err.details || err.message; + const errorMessage = tracingUtil.extractErrorMessage(err); if (typeof errorMessage === 'string' && errorMessage.toLowerCase().includes('cancelled')) { // No-op, we do not want to mark cancelled calls as erroneous. } else { diff --git a/packages/core/src/tracing/instrumentation/protocols/httpClient.js b/packages/core/src/tracing/instrumentation/protocols/httpClient.js index 7b94593db9..6ad73a78b1 100644 --- a/packages/core/src/tracing/instrumentation/protocols/httpClient.js +++ b/packages/core/src/tracing/instrumentation/protocols/httpClient.js @@ -298,7 +298,7 @@ function instrument(coreModule, forceHttps) { }); clientRequest.on('error', err => { - let errorMessage = err.message || err.code; + let errorMessage = tracingUtil.extractErrorMessage(err); if (isTimeout) { errorMessage = 'Timeout exceeded';