Skip to content

Latest commit

 

History

History
2877 lines (2163 loc) · 105 KB

CHANGELOG.asciidoc

File metadata and controls

2877 lines (2163 loc) · 105 KB
Note
Release notes are best read in our documentation at elastic.co

Node.js Agent version 4.x

See the [upgrade-to-v4] guide.

4.7.3 - 2024/08/09

Bug fixes
  • Update import-in-the-middle to 1.11.0, which fixes an issue that can crash users using Nuxt and ESM. ({pull}4175[#4175])

4.7.2 - 2024/08/01

Features
Bug fixes
  • Fix for instrumentation for @aws-sdk/sns-client that will prevent a crash if the client is used when there is no parent transaction present. ({pull}4168[#4168])

  • Fix for config resolution process. Before this change falsy config options coming from the elastic-apm-node.js file were ignored. ({pull}4119[#4119])

  • Fix publishing of AWS Lambda layer to all AWS regions. This was broken in the 4.7.1 release. ({issues}4171[#4171])

4.7.1 - 2024/07/24

Bug fixes
  • Update import-in-the-middle internally-used library to v1.9.1. This can fix usage with ESM code (see [esm]) in some cases, e.g. usage with Nuxt 3.

4.7.0 - 2024/06/13

Features
  • Update [opentelemetry-bridge] support to @opentelemetry/api version 1.9.0. ({issues}4078[#4078])

    Support for the new addLink and addLinks methods on Span have been added. However, support for the new synchronous gauge have not yet been added.

4.6.0 - 2024/06/05

Features
  • Make published docker.elastic.co/observability/apm-agent-nodejs Docker images multi-platform, with support for linux/amd64,linux/arm64 for now. This is necessary for users of the Elastic APM Attacher for Kubernetes, when deploying to k8s nodes that are ARM64 (e.g. Gravitron on AWS). ({issues}4038[#4038])

Bug fixes
  • Fix instrumentation for recent @aws-sdk/client-* releases that use @smithy/smithy-client v3. (For example @aws-sdk/client-s3@3.575.0 released 2024-05-13 updated to smithy-client v3.) Before this change the APM agent had been limiting patching of @smithy/smithy-client to >=1 <3. ({pull}4036[#4036])

  • Mark the published AWS Lambda layers as supporting the "nodejs20.x" Lambda Runtime (--compatible-runtimes). The "nodejs20.x" runtime was released by AWS on 2023-11-15. ({issues}4033[#4033])

    Note that this Node.js APM agent supports Node.js 20.x, so the new AWS Lambda runtime was supported when it was released. However, the metadata stating compatible runtimes (which is advisory) was not updated until now.

4.5.4 - 2024/05/13

Bug fixes
  • Change how the "cookie" HTTP request header is represented in APM transaction data to avoid a rare, but possible, intake bug where the transaction could be rejected due to a mapping conflict.

    Before this change a Cookie: foo=bar; sessionid=42 HTTP request header would be represented in the transaction document in Elasticsearch with these document fields (the example assumes [sanitize-field-names] matches "sessionid", as it does by default):

    http.request.headers.cookie: "[REDACTED]"
    ...
    http.request.cookies.foo: "bar"
    http.request.cookies.sessionid: "[REDACTED]"

    After this change it is represented as:

    http.request.headers.cookie: "foo=bar; sessionid=REDACTED"

    In other words, http.request.cookies are no longer separated out. ({issues}4006[#4006])

4.5.3 - 2024/04/23

Bug fixes
  • Fix message handling for tombstone messages in kafkajs instrumentation. ({pull}3985[#3985])

4.5.2 - 2024/04/12

Bug fixes
  • Fix path resolution for requests that contain invalid characters in its host header. ({pull}3923[#3923])

  • Fix span names for getMore command of mongodb. ({pull}3919[#3919])

  • Fix undici instrumentation to cope with a bug in undici@6.11.0 where request.addHeader() was accidentally removed. (It was re-added in undici@6.11.1.) ({pull}3963[#3963])

  • Update undici instrumentation to avoid possibly adding a second 'traceparent' header to outgoing HTTP requests, because this can break Elasticsearch requests. ({issues}3964[#3964])

4.5.0 - 2024/03/13

Features
  • Update [opentelemetry-bridge] support to @opentelemetry/api version 1.8.0.

  • Update tedious instrumentation to support versions 17 and 18. ({pull}3901[#3901], {pull}3911[#3911])

  • Add new kafkajs instrumentation. ({issues}2905[#2905])

Bug fixes
  • Fix instrumentation of mongodb to not break mongodb@6.4.0. Mongodb v6.4.0 included changes that resulted in the APM agent’s instrumentation breaking it. ({pull}3897[#3897])

  • Fix hostname detection on Windows in some cases (where a powershell profile could break collection). ({pull}3899[#3899])

  • Fix a path normalization issue that broke (or partially broke) instrumentation of some modules on Windows: Next.js, redis v4+, mongodb. ({pull}3905[#3905])

4.4.1 - 2024/02/06

Bug fixes
  • Add support for instrumentation of ES module-using (ESM) code with Node.js versions matching ^18.19.0 || >=20.2.0. Before this version of the APM agent, ESM instrumentation was only supported for some earlier Node.js versions. Changes in Node.js’s ESM loader in v18.19.0 and v20 broke earlier ESM support. ({issues}3784[#3784], {pull}3844[#3844])

4.4.0 - 2024/01/12

Known issue: Using the APM agent’s [esm] with Node.js v18.19.0 is not supported in this version. Upgrade to APM agent version v4.5.0 or later, or use Node.js v18.18.1 or earlier. See elastic#3784 for details.

Features
  • Support ELASTIC_APM_ACTIVATION_METHOD=K8S_ATTACH (in addition to the current K8S value) to indicate the agent is being started by apm-k8s-attacher. Newer releases of apm-k8s-attacher will be using this value (to have a common value used between APM agents).

Bug fixes
  • Fix bug where NODE_ENV environment value was not used as a default for the [environment] config setting. The bug was introduced in v4.2.0. ({issues}3807[#3807])

  • Improve Fastify instrumentation to no longer cause the FSTDEP017 and FSTDEP018 deprecation warnings. ({pull}3814[#3814])

4.3.0 - 2023/12/05

Known issue: Using the APM agent’s [esm] with Node.js v18.19.0 is not supported in this version. Upgrade to APM agent version v4.5.0 or later, or use Node.js v18.18.1 or earlier. See elastic#3784 for details.

Features
  • Add the [apm-client-headers] config option, to allow adding custom headers to HTTP requests made to APM server by the APM agent. ({issues}3759[#3759])

Bug fixes
  • Fix the dependency version range for @elastic/ecs-pino-format. ({issues}3774[#3774])

Chores
  • Skip undici tests for undici >=5.28.0 and NodeJS <14.18.0. ({pull}3755[#3755])

  • Change the log level of Sending error to Elastic APM: …​ from info to debug. There is no need to clutter the log output with this message. ({issues}3748[#3748])

  • Explicitly mark this package as being of type="commonjs". The experimental node --experimental-default-type=module …​ option added in Node.js v20.10.0 means that a default to "commonjs" isn’t guaranteed.

4.2.0 - 2023/11/23

Breaking changes
  • Drop support for next@11. Next.js instrumentation support is currently in technical preview, so it is not considered a semver-major change to drop support for this old version of next. ({pull}3664[#3664])

Features
Bug fixes
  • Fix mongodb instrumentation to avoid loosing context when multiple cursors are running concurrently. ({issues}3161[#3161])

  • Set mongodb span’s outcome according to the result of the command being traced. ({pull}3695[#3695])

  • Fix @aws-sdk/client-sqs instrumentation which was failing for SendMessageBatch command when any of the entities does not contain MessageAttributes. ({issues}3746[#3746])

4.1.0 - 2023/10/09

Features
  • Update [opentelemetry-bridge] support to @opentelemetry/api version 1.6.0. {pull}3622[#3622]

  • Add support for @aws-sdk/client-dynamodb, one of the AWS SDK v3 clients. ({issues}2958[#2958])

  • Add support for @aws-sdk/client-sns, one of the AWS SDK v3 clients. ({issues}2956[#2956])

  • Add support for @aws-sdk/client-sqs, one of the AWS SDK v3 clients. ({issues}2957[#2957])

  • Fixes for some values of the [disable-instrumentations] config setting. "redis" will now properly disable instrumentation for redis@4. "next" will propertly disable all Next.js instrumentation. ({pull}3658[#3658])

Bug fixes

4.0.0 - 2023/09/07

See the [upgrade-to-v4] guide.

Breaking changes
  • Set the new minimum supported Node.js to version 14.17.0. Users of earlier Node.js versions can use elastic-apm-node v3.x, which supports back to Node.js v8.6.

  • Ignore a timer option passed to startTransaction() and startSpan() APIs. This option was never documented. It would be surprising if any user is impacted by this.

  • Remove long deprecated support for the ELASTIC_APM_-prefixed environment variables for the Kubernetes config options. For example, one must use KUBERNETES_POD_NAME and not ELASTIC_APM_KUBERNETES_POD_NAME. ({issues}2661[#2661])

  • The config option filterHttpHeaders is now removed. ({pull}3539[#3539])

  • Remove the deprecated span.toString() and transaction.toString() APIs. See the upgrading doc for details. ({issues}2348[#2348])

  • Remove instrumentation support for the old 'hapi' package — the current '@hapi/hapi' package is still instrumented. ({issues}2691[#2691])

  • Change apm.startTransaction() api to return a noop transaction instead of null, if the agent is not yet started. ({issues}2429[#2429])

  • Drop support for the obsolete "patch" context manager, i.e. the contextManager: "patch" config option. This was a limited async context management that predated the preferred AsyncLocalStorage core Node.js mechanism for context tracking. It was deprecated in v3.37.0. As well, the related and deprecated asyncHooks config option has been removed. ({issues}3529[#3529])

  • Remove the logUncaughtExceptions config option. See Upgrading to v4 for details. ({issues}2412[#2412])

  • Remove transaction.subtype and transaction.action properties from API. This also impacts [apm-start-transaction] and transaction.setType(…​), both of which now no longer accept subtype and action parameters. These two properties were deprecated in v3.25.0. ({issues}3557[#3557])

  • Remove support for the erroneous ELASTIC_SANITIZE_FIELD_NAMES and ELASTIC_IGNORE_MESSAGE_QUEUES config environment variables. The correct env vars are ELASTIC_APM_SANITIZE_FIELD_NAMES and ELASTIC_APM_IGNORE_MESSAGE_QUEUES, respectively, and were supported starting in v3.36.0.

Features
  • The apm.destroy() method is now async. Almost no users should need to use this method. However, if used, to be sure to wait for APM agent shutdown to be complete, one can now await apm.destroy(). ({issues}3222[#3222])

  • Support instrumenting mongodb v6. ({pull}3596[#3596])

Bug fixes
  • Fix instrumentation of mongodb to avoid multiple command handler registrations when client is created via MongoClient.connect static method. ({pull}3586[#3586])

Chores
  • Add a warning message when a duration or size config option is provided without units. ({issues}2121[#2121])

  • Change default value of useElasticTraceparentHeader config option to false. This means that for outgoing HTTP requests, the APM agent will no longer add the elastic-apm-traceparent header. This vendor-specific header was used in the past while the W3C trace-context spec was still in development. Now that it is in wide use, the elastic-apm-traceparent header is only useful for interaction with very old Elastic APM agents.

  • Add default ports into context.service.target.name for HTTP spans conforming to the spec update done in elastic/apm#700 ({pull}3590[#3590])

Node.js Agent version 3.x

Note
"3.x" releases are now maintenance releases. See the 3.x release notes in the "3.x" branch for the most recent 3.x releases. The 3.x branch will be maintained until 2024-03-07 (6 months after the 4.0.0 release).

3.49.1 - 2023/08/09

Bug fixes
  • Upgrade import-in-the-middle dependency to v1.4.2 to fix a vulnerability (CVE-2023-38704). Note: This dependency is only used by elastic-apm-node when using the experimental ESM support. ({pull}3569[#3569])

Chores

3.49.0 - 2023/08/03

Bug fixes
  • Fix ESM support: the "loader.mjs" file was accidentally not included in the published package in v3.48.0. ({pull}3534[#3534])

  • Fix instrumentation of @aws-sdk/client-s3 from v3.378.0 and up. The new version requires @smithy/smithy-client v2.0.1 and the agent was instrumenting it within the semver range '>=1 <2'. ({issues}3523[#3523])

  • Fix wrapping of http.request() for node v18.17.0. Before this change, a call with a non-Function callback — http.request(urlString, {}, 'this-is-not-a-cb-function') — would accidentally not fail because of the agent’s instrumentation. ({pull}3511[#3511])

  • Fix tedious instrumentation to recognize "connection.prepare()" usage in tedious@16.2.0 and later. ({pull}3470[#3470])

Chores
  • Add min node verison in tav.json to generate lighter matrix for TAV commands. ({pull}3531[#3531])

  • Inline the elastic-apm-http-client package code into this repo. ({issues}3506[#3506])

3.48.0 - 2023/07/07

Known issue: You must upgrade to 3.49.0 or later for the ESM support described below to work, because the "loader.mjs" file was accidentally not published.

Features
  • Initial and experimental ECMAScript Module (ESM) support. With the following invocation the APM agent will now be able to instrument modules loaded via import. (See the Node.js introduction to ESM.)

    node -r elastic-apm-node/start.js \
      --experimental-loader=elastic-apm-node/loader.mjs \
      server.mjs
    
    # or
    
    NODE_OPTIONS='-r elastic-apm-node/start.js --experimental-loader=elastic-apm-node/loader.mjs'
    node server.mjs

    The new usage requirement is the --experimental-loader=elastic-apm-node/loader.mjs option. This initial release only includes support for instrumenting a subset of the modules listed at [supported-technologies]. This set will grow in subsequent versions. Notably, ESM support does not currently work in node v20 — only in recent versions of node v12-v18. ESM support will remain experimental while the Node.js Loaders API is experimental. See [esm] for full details.

  • Send configured_hostname and detected_hostname metadata separately, rather than the old deprecated single hostname metadatum. As well, the detected hostname now attempts to collect a FQDN to be used in the host.name field in the Elasticsearch document. ({issues}3310[#3310])

Bug fixes
  • Ensure apm.setGlobalLabel(…​) does not throw an error when apm is inactive. ({issues}3442[#3442])

  • Set the trace-context for an incoming HTTP/2 request. Contributed by @paulish. ({issues}1830[#1830])

  • Fix aws-sdk v3 instrumentation (currently just @aws-sdk/client-s3) for versions 3.363.0 and later. ({pull}3455[#3455])

  • Fix a possible crash when using getSignedUrl() from @aws-sdk/s3-request-presigner due to a bug in @aws-sdk/client-s3 instrumentation. ({issues}3464[#3464])

3.47.0 - 2023/06/14

Features
  • Add support for knex version v1 and v2. ({pull}3355[#3355])

  • Add tedious@16.x support. ({pull}3366[#3366])

  • Add apm.setGlobalLabel() to dynamically extend the globalLabels set in the initial config. Refer to [apm-set-global-label] for details. ({pull}3337[#3337])

Bug fixes
  • Change the "start.js" export to not start the APM agent inside a Node.js Worker thread.

    One way to start the APM agent is via node -r elastic-apm-node/start.js …​ or NODE_OPTIONS='-r elastic-apm-node/start.js. When a Node.js Worker thread is started, it inherits the process.execArgv and environment, which results in "start.js" being run in the context of the new thread. Starting an additional APM agent in each new Worker is arguably surprising. For now, "start.js" will avoid starting in a thread. The exact behavior may change in future versions.

    One undesirable effect of this change is that explicit use of "start.js" in code (import 'elastic-apm-node/start.js' or require('elastic-apm-node/start.js')) in a Worker will not start the APM agent. Instead, one must use: require('elastic-apm-node').start() or equivalent.

  • Avoid redaction of response headers while extracting transaction.context.response data from the HTTP response. Contributed by @lytc. ({pull}3427[#3427])

Chores
  • Refactor transport handling to new internal apm-client module. ({pull}3372[#3372])

3.46.0 - 2023/05/15

Features
  • Add support for @aws-sdk/client-s3, one of the AWS SDK v3 clients. ({pull}3287[#3287])

  • Add support for @apollo/server@4 — the new Apollo Server package which replaces apollo-server, apollo-server-express, etc. Contributed by @jmesimak. ({pull}3203[#3203])

  • Add [capture-body] support for Fastify instrumentation. Contributed by @xxzefgh. ({pull}2681[#2681])

  • Add support for mysql2@3. Contributed by @firecow. ({pull}3301[#3301])

  • Improve error handling with AWS Lambda. When used together with the Elastic AWS Lambda extension v1.4.0 or greater, the APM agent will pre-register a partial transaction before the user’s handler function is run. If the handler function fails with a Lambda timeout, uncaughtException, unhandledRejection, or crash then the Lambda extension will report the failed transaction so it can be seen in the Kibana APM app. ({pull}3285[#3285])

  • Add OpenTelemetry Metrics API and Metrics SDK support. This is currently experimental and may change. With this change, you may use the OpenTelemetry Metrics API to create custom metrics and the APM agent will ship those metrics to APM server. As well, you may use the OpenTelemetry Metrics SDK and the APM agent will automatically add a MetricReader to ship metrics to APM server. See the [opentelemetry-bridge] for details. ({pull}3152[#3152])

Chores
  • The config option filterHttpHeaders is now deprecated. It will be removed in a future major version. ({pull}3333[#3333])

  • Add cookie map in transactions' request context and redact cookie header ({pull}3322[#3322])

  • Stop testing express-graphql instrumentation — the module is deprecated. ({pull}3304[#3304])

3.45.0 2023/04/28

Features
Bug fixes
  • Fix a possible crash in AWS Lambda Function instrumentation when an ELB- or API Gateway-triggered invocation received an event object with no headers field. ({issues}3286[#3286])

  • Fix an edge case in instrumentation of http.request() and https.request() with node v19.9.0 and recently nightly builds of node v20. ({issues}3261[#3261])

Chores
  • Update "engines" to support node v20. ({pull}3278[#3278])

  • Restrict Next.js instrumentation to <13.3.0 for now, because of a known issue with instrumentating the next@13.3.0 dev server. ({issues}3263[#3263])

3.44.1 2023/04/06

Bug fixes
  • Fix an issue where the APM agent receiving central config (from APM server) containing a value for sanitized_field_names would crash. ({issues}3247[#3247])

3.44.0 2023/04/03

Features
  • Update the [opentelemetry-bridge] supported version of @opentelemetry/api to version 1.4.x. ({pull}3239[#3239])

Bug fixes
  • Ensure metadata.service.agent.activation_method is only sent for APM server version 8.7.1 or later. APM server 8.7.0 included a bug where receiving activation_method is harmful. ({issues}3230[#3230])

3.43.0 2023/03/02

Features
  • Support mongodb v5. ({issues}3138[#3138])

  • Propagate trace-context in message attributes for SQS (SendMessage and SendMessageBatch) and SNS (Publish), provided the maximum 10 message attributes limit is not passed. SQS message reception (ReceiveMessage) and SQS- and SNS-triggered Lambda functions already produce span links for incoming messages with trace-context. This allows linking between producer and consumer in the Kibana APM app. ({pull}3044[#3044])

  • Extend Lambda instrumentation to capture details for Lambda function URL and ELB-triggered Lambdas. ({issues}2901[#2901])

  • Make Agent.flush() return a Promise if no callback is passed as param. This means that flush is now await`able: `await apm.flush(). ({issues}2857[#2857])

Bug fixes
  • Fix the transaction name for API routes in Next.js >=13.2.x. Before this change internal changes in next@13.2.0 resulted in transactions for Next.js API routes being {method} unknown route.

  • Fix metadata.service.agent.activation_method=k8s-attach handling to (a) use an explicit marker from the k8s apm attacher (ELASTIC_APM_ACTIVATION_METHOD) and (b) use the specified "k8s-attach" value, rather than the incorrect "k8s-attacher". ({issue}3119[#3119])

  • Add missing [opentelemetry-bridge-enabled] ({pull}3121[#3121]) and [context-manager] Agent configuration options to the TypeScript types.

3.42.0 2023/01/18

Features
Bug fixes
  • Fix instrumentation of http.request() and http.get() (and the same for https.) so that Basic auth fields are not lost. Before this change if the first arg was a URL or string with username and/or password values, e.g. https://user:pass@…​;, then the auth fields were not included in the actual HTTP request. ({issues}2044[#2044])

  • Fix span.context.destination.service.resource for S3 spans to have an "s3/" prefix.

    Note: While this is considered a bugfix, but it can potentially be a breaking change in the Kibana APM app: It can break the history of the S3-Spans / metrics for users relying on context.destination.service.resource. If users happen to run agents both with and without this fix (for same or different languages), the same S3-buckets can appear twice in the service map (with and without s3-prefix).

  • Ensure collected dropped spans stats follow the intake API type requirements. Before this change transaction.dropped_spans_stats[*].duration.sum.us could have been a floating-point value, but the intake API requires an int. The result was dropped transactions and errors in the agent log. ({issues}3104[#3104])

Chores

3.41.1 2022/12/21

Bug fixes
  • Fix a bug in span compression with sending spans that were buffered for possible compression. Before this fix, in some cases a compressible span could be sent twice or not sent at all. ({pull}3076[#3076])

3.41.0 2022/12/12

Features
  • Capture HTTP context (status code, headers, etc.) on transactions (and captured errors) for Lambda functions triggered by API Gateway. ({issues}2419[#2419])

  • Support instrumentation for restify@10.

Bug fixes
  • Change default serverUrl from http://localhost:8200 to http://127.0.0.1:8200 to avoid ambiguity between possible IPv4 and IPv6 DNS-resolved values for "localhost". APM server only listens on IPv4 by default, so this avoids a possible surprising mismatch. ({issues}3045[#3045])

  • Add tracestate to the TransactionOptions TypeScript type for apm.startTransaction(…​, options). ({issues}3061[#3061])

Chores
  • Mark the published Lambda layer as supporting the recently released "nodejs18.x" Lambda Runtime (--compatible-runtimes).

3.40.1 2022/11/15

Bug fixes
  • Prevent a possible tight loop in central config fetching. ({issues}3029[#3029])

3.40.0 2022/10/31

Note: This was a bad release. Users should upgrade to v3.40.1 or later. This version of the agent could enter a tight loop re-fetching central config, which increases network traffic, CPU usage, and load on the APM server. See {issues}3029[issue #3029] for details.

Features
  • Enable support for redis v4 ({pull}2945[#2945])

  • preview:[] Next.js server-side instrumentation. See the [nextjs] document.

    This adds instrumentation of the Next.js dev server (next dev) and prod server (next start). The APM transactions for incoming HTTP requests to the server will be named appropriately based on Next.js’s routing — both for user page routes (e.g. GET /a-dynamic-page/[id]) and for internal Next.js routes (e.g. Next.js _next/data route my-page, Next.js Rewrite route /foo → /bar). As well, exceptions in server-side code (e.g. getServerSideProps, server-side run page handlers, API handlers) will be reported. ({pull}2959[#2959])

    This is a technical preview to get feedback from Next.js users. The details on how exactly the instrumentation works may change in future versions.

  • Improve container-info gathering to support AWS ECS/Fargate environments. ({issues}2914[#2914])

Bug fixes
  • Source lines of context in stacktraces is no longer reported for "*.min.js" files that do not have source-map information. These files are assumed to be minimized files, for which source line context won’t be useful. This change is to guard against excessively large stacktrace data.

Chores
  • Add guards to ensure that a crazy Cache-Control: max-age=…​ response header cannot accidentally result in inappropriate intervals for fetching central config. The re-fetch delay is clamped to [5 seconds, 1 day]. ({issues}2941[#2941])

3.39.0 2022/10/17

Features
  • Improve the granularity of data captured about downstream services, e.g. databases, for spans that represent an external call (known as "exit spans"). This data is used for Service Maps and Dependencies in the Kibana APM app.

    This is handled via the new span service.target.* fields that replace the deprecated destination.service.resource field (spec). All instrumentations have been updated to set appropriate service target values. If necessary, e.g. for manual instrumentation, a new public [span-setservicetarget] API has been added to specify these values. ({pull}2882[#2882])

    The never-public-but-available span.setDestinationContext() has been marked for removal (using it will process.emitWarning()). Users of this internal method should switch to the public [span-setservicetarget].

    As part of this change, improvements have been made to some module instrumentations:

    • redis and ioredis: span.type has changed from "cache" to "db" per spec

    • mongodb: span.action used to be "query", now it will be the mongodb command name, e.g. "find", "insert".

    • mongodb and mongodb-core: span.db.instance is now set to the database name ({issues}1494[#1494])

    • mysql and mysql2: span.db.{instance,user} are now populated.

    • @elastic/elasticsearch: The cluster name is heuristically determined for Elastic Cloud deployments and used for the service target name.

    • sqs: span.destination.{address,port} are now populated.

    • pg: span.db.{instance,user} are now populated.

    • cassandra-driver: the Cassandra keyspace is captured for service target data, if available.

    • OpenTelemetry Bridge: OTel spans with kind PRODUCER and CLIENT are now handled as exit spans (e.g. span compression could apply).

  • Support instrumentation of @koa/router (and koa-router) versions 11 and 12. Contributed by @sibelius. ({issues}2811[#2811])

  • Support instrumentation of tedious@15. ({pull}2897[#2897])

  • Improve the captured information for Elasticsearch client instrumentation. For all outgoing Elasticsearch client requests, the full HTTP url is now captured (stored in the "url.original" field). For Elasticsearch requests that do a search, the outgoing request body is captured (to the "span.db.statement" field) as before, but the format has changed to only hold the request body. Before this change the "span.db.statement" would also hold any HTTP query parameters. These are now more naturally captured in "url.original". ({issues}2019[#2019])

    This change also introduces the [elasticsearch-capture-body-urls] configuration option to enable controlling which Elasticsearch REST API paths are considered for request body capture. ({pull}2873[#2873])

  • Support instrumenting core modules when require’d with the optional 'node:'-prefix. For example require('node:http') will now be instrumented. ({issues}2816[#2816])

  • Agent will delay loading of the error-callsites module until agent start time, and will not load the module if the agent is disabled/inactive. This prevents the setting of an Error.prepareStackTrace handler until necessary for stacktrace collection. ({issues}2833[#2833] {pull}2906[#2906])

  • Add principal pattern to default value for sanitizeFieldNames config var, so that it is more likely to redact authentication-related HTTP headers, e.g. on Azure. ({issues}2938[#2938])

Bug fixes
  • Avoid a possible RangeError: Maximum call stack size exceeded in Span timer handler for exceedingly deep Span trees. ({pull}2939[#2939])

  • Fix instrumentation of (very old) 'graphql' module versions ⇐0.9.6. Instrumentation of these older graphql versions was broken in v3.36.0. ({pull}2927[#2927])

Chores
  • Disable knex instrumentation when not collecting span stack traces (because there is no point). This is a performance improvement for Knex usage in the default configuration. ({pull}2879[#2879])

  • Document and add types for parent option to apm.captureError(). ({issues}2977[#2977])

3.38.0 2022/08/11

Features
  • Add instrumentation for the undici HTTP client library. This also adds instrumentation of Node.js v18’s fetch(), which uses undici under the hood. For the instrumentation to work one must be using node v14.17.0 or later, or have installed the 'diagnostics_channel' polyfill. ({issues}2383[#2383])

  • Added exitSpanMinDuration configuration field, allowing end users to set a time threshold for dropping exit spans. ({pull}2843[#2843])

Bug fixes
  • Capturing an error would fail if the Error instance had an attribute that was an invalid date. ({issues}2030[#2030])

  • Fix the span for an instrumented S3 ListBuckets API call to not be invalid for APM server intake. ({pull}2866[#2866])

  • Fix an issue where the transaction name for a trace of a Lambda function implementing a GraphQL server (e.g. via apollo-server-lambda) would not get the GraphQL-specific naming. ({issues}2832[#2832])

3.37.0 2022/07/18

Features
  • The agent will now use AsyncLocalStorage for run-context tracking in new enough versions of Node.js (versions >=14.5 and >=12.19). This can reduce overhead from using the APM agent, especially in Promise-heavy applications. ({pull}2786[#2786])

    This also adds a new contextManager configuration option to control which mechanism the agent uses for run-context tracking. It replaces the, now deprecated, asyncHooks configuration option. If you experience problems with the new AsyncLocalStorage-based tracking, you can restore the older behavior with contextManager: "asynchooks".

Chores
  • The old "patch" mechanism that the APM agent uses for run-context tracking (enabled via contextManager: "patch", or previously enabled via asyncHooks: false) is now deprecated. It will be removed in a future major version (after an 18 month deprecation period).

3.36.0 2022/06/15

Features
  • Adds dropped span statistics to transaction payloads allowing APM Server to calculate more accurate throughput metrics. ({issues}2302[#2302])

  • Improve the grouping of captured API errors from @elastic/elasticsearch instrumentation. When an Elasticsearch client API error is captured, if the response body includes a error.type, e.g. illegal_argument_exception, the captured error.exception.type will be ResponseError (illegal_argument_exception) rather than ResponseError. This means that API errors will be grouped separately in the Kibana APM app based on their client API error type. ({issues}2770[#2770])

  • Graphql v16 support ({issues}2508[#2508])

Bug fixes
  • Fix the automatic wrapping of Lambda handlers to support handler modules created by esbuild bundling — as is done in some Serverless Framework functions that use TypeScript. ({issues}2753[#2753])

  • Fix Express route tracking (used for transaction.name) when an argument is passed to the next(arg) callback of a request handler. Before this change passing next(<some object not an instance of Error>) would be considered an error by Express, but not by the APM agent’s route tracking. ({pull}2750[#2750])

  • Updated sanitizeFieldNames and ignoreMessageQueues environment variables to use ELASTIC_APM_ prefix. (previous variable names are still recgonized, but not documented) ({issues}2636[#2636])

3.35.0 2022/06/01

Features
  • Add support for 'knex' version v0.21 to v1 ({issues}2699[#2699]). Note that instrumentation of knex >=0.95.0 is not support when using the deprecated contextManager=patch configuration option.

  • Change the instrumentation of SQS- and SNS-triggered AWS Lambda invocations: The special-casing of triggers with a single message/record has been removed. That means that instead of a possible continued distributed trace (if a single received message has a 'traceparent'), a span link will be added to the APM transaction for each message with a 'traceparent'. transaction.context.message. fields are no longer collected. ({pull}2708[#2708])

  • Enable support for ioredis v5 ({pull}2714[#2714])

  • A Docker image with the APM agent will be published for each release to docker.elastic.co/observability/apm-agent-nodejs:VERSION, for example: docker.elastic.co/observability/apm-agent-nodejs:3.35.0. ({pull}2742[#2742])

Bug fixes
  • Fixes automatic Lambda handler wrapping to work with handlers that point to subfolders (ex. _HANDLER=path/to/folder.methodName) ({issues}2709[#2709])

3.34.0 2022/05/26

Features
  • Add support for 'tedious' version v10 to v14 ({issues}2517[#2517])

  • When automatically determining [service-name] and [service-version] by looking for a "package.json", the agent will now prefer to start looking from the directory of the script being executed, rather than the current working directory. ({issues}2420[#2420])

  • Add an experimental [opentelemetry-bridge]. Briefly, the OpenTelemetry Bridge allows one to use the vendor-neutral OpenTelemetry Tracing API (@opentelemetry/api) to manually instrument your code, and have the Elastic Node.js APM agent handle those API calls. ({pull}2641[#2641])

  • Add Span Links support. ({issues}2673[#2673])

    The transaction.startSpan() and apm.startTransaction() public APIs now accept a links option for specify links. The OpenTelemetry Bridge also supports specifying links during span creation (with the limitation that span link attributes are not supported).

  • Add a [trace-continuation-strategy] configuration option to allow some control over how the APM Agent uses incoming trace-context headers for context propagation. ({issues}2592[#2592])

  • Add span links to AWS SQS messaging spans on 'ReceiveMessage', one for each message (up to 1000) which has a 'traceparent' message attribute. ({issues}2593[#2593])

  • Add "nodejs16.x" as one of the compatible runtimes for the Node.js APM agent Lambda layers now that this runtime is available on AWS.

Bug fixes
  • Fixes a bug where the the agent would not serialize the database context of a span. ({issues}2715[#2715])

  • Fix a possible crash in span compression handling on a span that was manually created without a parent span (e.g. if created with a custom childOf option). ({pull}2701[#2701])

Chores
  • Add a package-lock.json file to ensure repeatable builds of the AWS Lambda layer and to assist with security issue auditing. ({issues}2626[#2626])

  • Deprecate instrumentation for the legacy "hapi" package. While the APM agent still supports it, that instrumentation is no longer tested and support will be dropped in the next major version of the agent. Note that the "@hapi/hapi" package is still fully supported. ({pull}2698[#2698])

  • Deprecate instrumentation for the obsolete "jade" package. "jade" was renamed to "pug" in 2015. While the APM agent still supports "jade", that instrumentation is no longer tested. ({pull}2711[#2711])

3.33.0 2022/05/05

Features
  • Add a parent option to agent.captureError(err[, options][, cb]) to allow passing in a Transaction or Span to use as the parent for the error. Before this change the current span or transaction, if any, was always used.

    This option is not documented in the user docs, nor added to the TypeScript types, because it is only expected to be useful for coming OTel Bridge work.

Bug fixes
  • Fix a possible crash in the instrumentation of an incoming HTTP/2 request: if the underlying Http2Session was destroyed before the APM transaction was ended (on Http2Stream end). This resulted in the instrumentation using the [stream.session.socket](https://nodejs.org/api/http2.html#http2sessionsocket) proxy, which can throw ERR_HTTP2_SOCKET_UNBOUND after the session is destroyed. ({issues}2670[#2670])

Chores
  • The release process is slightly changed. CI (Jenkins) now handles npm publish …​ when a tag is pushed. ({pull}2667[#2667])

  • Pulled the traceparent NPM module into a local module and replaced the random-poly-fill module with the built in require('crypto').randomFillSync function call ({pull}2669[#2669])

3.32.0 2022/04/27

Features
  • Add support for node v18. ({pull}2652[#2652])

  • Add support for span compression. ({issues}2100[#2100], {issues}2604[#2604])

    By default, consecutive (sibling) exit spans of the same name, type, subtype, and destination with a duration of less than 50ms will be compressed into a single composite span. A possible case is the N+1 query problem. Traces with many consecutive matching spans will be represented — both in data and the APM UI — more efficiently.

    Span compression can be disabled or matching behavior configured with the spanCompression* configuration options.

  • Marks spans as "exit spans" across all instrumentations, preventing additional child spans from being added to the exit spans. See issue for a full list of spans types that will be treated as exit spans. ({issues}2601[#2601])

  • Allow a new span to be created/started even if its transaction has ended. This is expected to be a very rare use case. ({pull}2653[#2653])

  • The Trace Context headers are now propagated for http2 requests. ({pull}2656[#2656])

3.31.0 2022/03/23

Features
  • Add captureBody support for Hapi. ({issues}1905[#1905])

  • If a SNS or SQS single event trigger to an instrumented Lambda function includes message attributes with the name "traceparent" (and "tracestate"), case-insensitive, then those are used to continue the trace. This was already being done for API Gateway event headers.

Bug fixes
  • Fix a bug with Lambda instrumentation where the APM agent would result in an otherwise working Lambda function to respond with null if the Lambda was missing the Elastic APM Lambda Extension. ({issues}2598[#2598])

  • Fix a bug in Lambda instrumentation in the capturing of SNS and SQS event message attributes. ({issues}2605[#2605])

3.30.0 2022/03/10

Breaking changes
  • Added a new config option spanStackTraceMinDuration that replaces both captureSpanStackTraces and spanFramesMinDuration. The latter two are now deprecated, but still supported. If spanStackTraceMinDuration is specified, then any value for the deprecated two options will be ignored.

    There is a significant change in default behavior of the APM agent. If none of these configuration options is specified, then the default (spanStackTraceMinDuration: -1) is that stack traces are not collected and reported for any spans. This change in default behavior was made because the CPU performance impact of collecting span stack traces was found to be too high in practice for busy and/or complex applications. This is mentioned in the "Breaking changes" section to highlight the change, but it is not considered breaking in general. The impact is that the "Stack Trace" tab in the "Span details" view in the Kibana APM app will be empty. This was already the case for some spans based on span duration. ({pull}2565[#2565])

  • Implement the explicit signaling of Lambda invocation completion to the Elastic AWS Lambda Extension. This improves data flushing in a Lambda environment to ensure tracing data is only sent when the Lambda is active. This avoids possible tracing data loss while a Lambda VM is frozen. ({issues}2485[#2485])

    However, because this change triggers a bug in the extension, this version of the APM Node.js Agent must only be used with versions of the AWS Lambda Extension after v0.0.3.

Features
  • Add faas.name and faas.version fields to Lambda transactions. ({issues}2587[#2587])

  • Added automatic wrapping of AWS Lambda handlers ({pull}2577[#2577])

  • Improvements to AWS Lambda instrumentation: Better transaction.name for API Gateway-triggered lambdas. Respect explicitly set serviceName, serviceVersion, and usePathAsTransactionName config settings. Default cloudProvider: none and centralConfig: false to reduce required environment variables for setting up APM instrumentation of Lambdas. ({issues}2531[#2531])

3.29.0 2022/02/10

  • Fix a bug in instrumentation of @elastic/elasticsearch that caused a memory leak. ({issues}2569[#2569])

3.28.0 2022/02/08

Known issue: This release includes a memory leak in instrumentation of the @elastic/elasticsearch package. If you use that package, you should not use v3.28.0 of this APM agent. ({issues}2569[#2569])

Breaking changes

The following changes are not considered breaking. However, they result in a change in behavior and trace output that might impact some users, so they are highlighted here.

  • Change the redis and mysql instrumentations to not patch at all if they are listed in disableInstrumentations. This means that an application that uses one of these packages and lists that package in disableInstrumentations could see changes in the async run-context of callbacks. See {issues}2498[#2498] and the v3.26.0 release notes which has a similar change.

  • Elasticsearch spans (from elasticsearch, @elastic/elasticsearch, and @elastic/elasticsearch-canary instrumentation) will no longer have an HTTP child span(s) for the underlying HTTP request. This is listed in this section to provide awareness in case some users have custom analysis of APM trace data that expects those HTTP spans.

    Per the APM Agent spec for exit spans, Elasticsearch spans are now marked as exit spans and as a result, HTTP child spans are suppressed. ({issues}2000[#2000])

    As part of this change, some HTTP context has been added to Elasticsearch spans, when available: the HTTP response status_code, and the size of the response body (encoded_body_size). ({issues}2484[#2484])

Features
  • Drop unsampled transactions when sending to APM Server v8.0+. ({issues}2455[#2455])

  • The default serviceName string (when it is not configured and cannot be inferred from a "package.json" file) has been changed from "nodejs_service" to "unknown-nodejs-service". This is a standardized pattern used across Elastic APM agents to allow the Kibana APM app to recognize when to provide help to the user on configuring the service name. ({issues}2491[#2491])

  • Add transaction.name to captured APM errors. This will allow the Kibana APM app to correlate error groups and transaction groups. ({issues}2456[#2456])

  • Mark S3 spans (from 'aws-sdk' instrumentation) as exit spans (per https://github.com/elastic/apm/blob/main/specs/agents/tracing-spans.md#exit-spans). The result is that HTTP child spans of S3 spans are no longer captured. ({issues}2125[#2125])

Bug fixes
  • Fixes for run context handling for '@elastic/elasticsearch' instrumentation. ({issues}2430[#2430])

  • Fixes for run context handling for 'cassandra-driver' instrumentation. ({issues}2430[#2430])

  • Fixes for run context handling for 'mongodb-core' instrumentation. ({issues}2430[#2430])

  • Fixes for run context handling for 'elasticsearch' instrumentation. ({issues}2430[#2430])

3.27.0 2022/01/17

Features
  • Add support for express-graphql 0.10.0 - 0.12.0 inclusive. ({pull}2511[#2511])

Bug fixes
  • Fix an issue where the agent’s async task tracking could cause the user’s application to use too much memory. In cases where an application is under sustained load and is running in a memory constrained container, this looked like a memory leak.

    This high memory usage could happen when application code starts async tasks (e.g. Promises, setTimeouts, async I/O) that outlive the APM Transaction (typically an HTTP request handler). The agent’s async task tracking keeps a reference to the APM Transaction (and any APM Spans) until the async task ends, thus extending the lifetime of those APM objects and the references they hold — in particular, HTTP request and response objects. This could lead to higher memory usage.

    With this change, those references are removed when APM Transactions and Spans are ended, and agent memory usage is now the same as what it was before v3.24.0 when this issue was introduced. ({pull}2528[#2528], {issues}2489[#2489])

  • Fixes for run context handling for 'graphql' instrumentation. ({issues}2430[#2430])

  • Fixes for run context handling for DynamoDB instrumentation ('aws-sdk' package) so that a span created after an AWS client command (in the same tick, in the command callback, or promise) is not a child of the automatic AWS span. This change also ensures captured errors from failing client commands are a child of the AWS span. ({issues}2430[#2430])

  • Fixes for run context handling for 'pg' instrumentation. ({issues}2430[#2430])

  • Fixes for run context handling for 'mongodb' instrumentation. ({issues}2512[#2512])

3.26.0 2021/12/07

Breaking changes
  • In earlier versions, the agent would propagate run context in some packages even if instrumentation for that package was disabled via disableInstrumentations. Recent versions change the semantics of disableInstrumentations to mean the agent should not touch the listed packages at all. This means that an application that uses one of these packages and lists that package in disableInstrumentations could see changes in the async run-context of callbacks. This affects: pg (v3.24.0), redis (v3.25.0), mysql (v3.25.0), ioredis (v3.26.0), mysql2 (v3.26.0). See {issues}2498[#2498] for details.

Features
  • Add auth pattern to default value for sanitizeFieldNames config var, so that it is more likely to redact authentication/authorization-related HTTP headers and form fields. This pattern replaces the authorization pattern in the set of defaults. ({issues}2427[#2427])

Bug fixes
  • Fix run-context handling for 'tedious' instrumentation so that automatically created 'mssql' spans are never the currentSpan in user code. ({issues}2430[#2430])

  • Fix 'http2' instrumentation for outgoing requests to not have the created HTTP span context be active in user code. ({issues}2430[#2430])

  • Fix run-context handling in 'ws' instrumentation so that the span created for a ws.send(…​) isn’t the "current span" in subsequent code in the same tick. ({pull}2481[#2481])

  • Fix run-context handling for 'memcached' instrumentation so that the automatically created Memcached span is never the currentSpan in user code. ({issues}2430[#2430])

  • Fix a possible crash when serializing a Transaction if the incoming req.socket is null (possible if the socket has been destroyed). ({issues}2479[#2479])

  • Fixes for run context handling for 'aws-sdk' instrumentation (S3, SQS, SNS) so that a span created after an AWS client command (in the same tick, in the command callback, or promise) is not a child of the automatic AWS span. This change also ensures captured errors from failing client commands are a child of the AWS span. ({issues}2430[#2430])

  • Fix 'http' and 'https' instrumentation for outgoing requests to not have the 'http' span context be active in user code. ({pull}2470[#2470])

  • Fixes for 'ioredis' instrumentation ({pull}2460[#2460]):

    • Fix run-context so that a span created in the same tick as an ioredis client command will no longer be a child of the redis span.

    • Capture an APM error and correctly set span.outcome to "failure" when a redis client command calls back with an error.

    • Avoid a rare possible double-instrumentation of redis commands internally-queued before the RedisClient is "ready". ({issues}2459[#2459])

    • Add destination context so Redis shows up on the Service Map.

  • Fix run-context handling for 'mysql2' instrumentation to avoid accidental creation of child spans of the automatic mysql spans. ({issues}2430[#2430]})

3.25.0 2021/11/24

Bug fixes
  • Fixes for 'redis' instrumentation:

    • Fix run-context so that a span created in the same tick as a redis client command will no longer be a child of the redis span. ({issues}2430[#2430])

    • Capture an APM error and correctly set span.outcome to "failure" when a redis client command calls back with an error.

    • Avoid a rare possible double-instrumentation of redis commands internally-queued before the RedisClient is "ready". ({pull}2446[#2446])

  • Avoid setting the tracestate header for outgoing HTTP requests to the empty string. This can happen for non-trace-root transactions. While the HTTP spec allows empty header values, some servers do not. ({issues}2405[#2405])

  • Deprecate transaction.subtype and transaction.action. These fields were never used by APM server. This also deprecates the apm.startTransaction(…​) call signatures that take subtype and action arguments. In the next major version these two fields will be removed. ({issues}2356[#2356])

  • Fix run-context handling for 'mysql' instrumentation to avoid accidental creation of child spans of the automatic 'mysql' spans. ({issues}2430[#2430]})

3.24.0 2021/11/09

Breaking changes
  • Change disableSend to no longer skip internal processing work. It now only disables communication with APM Server. Use contextPropagationOnly if your use case is to limit the APM agent’s processing to the minimum to support context propagation and log correlation.

    This is listed under "Breaking changes" as a heads-up. The only possible negative result of this disableSend change is some extra CPU processing time by the agent. There is no outward functionality change.

Features
  • Gather AWS Lambda-specific metadata on first function invocation and ensure no intake requests to APM Server are started before that metadata is available. ({issues}2404[#2404])

  • Add contextPropagationOnly configuration option. This supports the use case of using the APM agent to propagate HTTP trace-context and to support log-correlation (adding trace.id et al fields to log records) without an APM server, and to otherwise reduce the processing time of the agent. ({issues}2393[#2393])

    This is similar to disableSend, but differs in that contextPropagationOnly: true tells the agent to skip unnecessary work.

  • The User-Agent header used for communication with APM Server now includes the serviceName and serviceVersion. For some users this can be helpful for APM Server log analysis. ({issues}2364[#2364])

  • In a Lambda enviornment we now collect a number of additional data fields on the Transaction object. See the spec for more information on fields collected. https://github.com/elastic/apm/blob/main/specs/agents/tracing-instrumentation-aws-lambda.md ({issues}2156[#2156])

  • Zero configuration support. The only required agent configuration option is serviceName. Normally the agent will attempt to infer serviceName for the "name" field in a package.json file. However, that could fail. With this version, the agent will cope with: a scoped package name (@scope/name is normalized to scope-name), a "name" that isn’t a valid serviceName, not being able to find a "package.json" file, etc. Ultimately it will fallback to "nodejs_service". ({issues}1944[#1944])

    One consequence of this change is that apm.getServiceName() will return undefined until the agent is started (check with apm.isStarted()).

Bug fixes
  • Stop collecting transaction breakdown metrics (transaction.breakdown.count, transaction.duration.sum.us, transaction.duration.count), as they are not being used in APM UI. ({issues}2370[#2370])

  • Wrap fs.realpath.native when configured with asyncHooks=false. This fixes using that function (which was undefined before this fix) and a crash when importing fs-extra@10. ({issues}2401[#2401])

  • A significant change was made to internal run context tracking (a.k.a. async context tracking). There are no configuration changes or API changes for custom instrumentation. ({pull}2181[#2181])

    One behavior change is that multiple spans created synchronously (in the same async task) will form parent/child relationships; before this change they would all be siblings. This fixes HTTP child spans of Elasticsearch and aws-sdk automatic spans to properly be children. ({issues}1889[#1889])

    Another behavior change is that a span B started after having ended span A in the same async task will no longer be a child of span A. ({pull}1964[#1964])

    This fixes an issue with context binding of EventEmitters, where removeListener would fail to actually remove if the same handler function was added to multiple events.

  • Fix pino’s deprecation warning when using a custom logger with pino@6 ({issues}2332[#2332])

3.23.0 2021/10/25

Breaking changes
  • Remove support for instrumenting versions of fastify earlier than 1.0.0. This instrumentation might still work, but is no longer supported. Fastify v1.0.0 was released in 2018. All current users should be using fastify v2 or v3 at least. See https://www.fastify.io/docs/latest/LTS/ ({pull}2387[#2387])

Features
  • Add initial support for version 8 of @elastic/elasticsearch, which is still in pre-release. ({pull}2385[#2385])

3.22.0 2021/10/21

Features
  • Add support for node v17.

  • When an error is captured, the APM agent will only immediately flush it to APM server if it is an "unhandled" error. Unhandled errors are typically those captured via the uncaughtException process event. Before this change, a captured error (e.g. for a 4xx or 5xx response from an HTTP server) was always immediately flushed. This could negatively impact performance for a service that was generating frequent errors. ({issues}686[#686])

Bug fixes
  • Improve apm.flush([cb]) to wait for inflight spans and errors before flushing data to APM server. Before this change, a recently ended span or recently captured error might not yet have completed processing (for example, stacktrace collection is asynchronous) and might not be included in the flush call. ({issues}2294[#2294])

  • AWS Lambda changes: Disable metrics collection during the experimental phase of (re)implementing Lambda support ({pull}2363[#2363]). Some fixes for better flushing of data at the end of a Lambda invocation.

  • span.toString() and transaction.toString() have been deprecated. The exact string output may change in v4 of the agent.

  • Add Span.ids and Transaction.ids to TypeScript types. ({pull}2347[#2347])

  • Improve span.sync determination (fixes {issues}1996[#1996]) and stop reporting transaction.sync which was never used ({issues}2292[#2292]). A minor semantic change is that span.sync is not set to a final value until span.end() is called. Before span.end() the value will always by true.

  • Guard against a negative value of metricsInterval, which can lead to high CPU usage as metrics are collected as fast as possible. Also ensure no metrics collection can happen if metricsInterval="0s" as intended. Before this change it was possible for some metric collection to still happen, even though none would be reported. ({pull}2330[#2330])

    This change also guards against negative and invalid values in the following configuration options: abortedErrorThreshold, apiRequestTime, and serverTimeout. If an invalid value is given, then will fallback to their default value.

3.21.1 2021/09/16

Bug fixes
  • Update types to avoid imports of @types/…​ modules (other than @types/node), so that TypeScript users of elastic-apm-node need not manually npm install @types/connect @types/pino @types/aws-lambda to compile. ({issues}2331[#2331])

3.21.0 2021/09/15

Features
  • Add the longFieldMaxLength integer configuration option (default 10000). Specific transaction/span/error fields (see the list below) will be truncated at this number of unicode characters. ({pull}2193[#2193], {issues}1921[#1921])

    The errorMessageMaxLength configuration option is now deprecated, but still supported. Users should switch to using longFieldMaxLength. If errorMessageMaxLength is not specified, truncation of error messages will now use the longFieldMaxLength value.

    Note that ultimately the maximum length of any tracing field is limited by the {apm-guide-ref}/configuration-process.html#max_event_size[max_event_size] configured for the receiving APM server.

    The fields affected by longFieldMaxLength are:

    • transaction.context.request.body, error.context.request.body - Before this change these fields were not truncated.

    • transaction.context.message.body, span.context.message.body, error.context.message.body - Before this change these fields were not truncated.

    • span.context.db.statement - Before this change this field was truncated at 10000 bytes. Truncation is now a number of unicode characters.

    • error.exception.message, error.log.message - Before this change, the default 2kB errorMessageMaxLength would apply.

  • Improve the TypeScript types by exporting more of interfaces: AgentConfigOptions, Transaction, Span, TransactionOptions, SpanOptions. ({issues}2118[#2118])

Bug fixes
  • Fix a bug in apm.removePatch(module, aHandler) that would remove the last registered handler if aHandler did not match any currently registered handlers. ({pull}2315[#2315])

  • Fix a crash in instrumentation of the old Elasticsearch client (elasticsearch) for some rarer cases of client options — for example passing multiple hosts. ({pull}2312[#2312])

  • Ensure the internal HTTP(S) client requests made by the APM agent to APM server are not themselves traced. ({issues}1168[#1168], {issues}1136[#1136])

  • Fix crashing error with agent.registerMetric and active:false configuration. ({issues}1799[#1799], {pull}2290[#2290])

3.20.0 2021/08/12

Bug fixes
  • Fix failing tests and a possible runtime crash in @elastic/elasticsearch@7.14.0 instrumentation. ({issues}2187[#2187])

3.19.0 2021/08/05

Features
  • The agent now supports the 3.x branch of apollo-server-express. ({pull}2155[#2155])

  • Add instrumentation support for mongodb@4.x. ({pull}2171[#2171])

Bug fixes
  • The agent will no longer report counting metrics with a value of zero, and will remove these metrics from the registry. ({pull}2163[#2163])

3.18.0 2021/07/20

Features
  • Trace an incoming HTTP/1.1 request to an HTTP/2 server using the allowHTTP1 option. Before this change only incoming requests supporting HTTP/2 would be traced. ({pull}2143[#2143])

  • Add instrumentation of the AWS SNS publish method when using the JavaScript AWS SDK v2 (aws-sdk). ({pull}2157[#2157])

Bug fixes
  • Fixed naming for outgoing HTTP spans to comply with the spec. https://github.com/elastic/apm/blob/main/specs/agents/tracing-instrumentation-http.md#http-client-spans Span names no longer include the path portion of the URL. ({pull}2161[#2161])

  • Fix a header object re-use bug that prevented propagation of trace-context headers (traceparent et al) in AWS requests using AWS v4 signature auth. ({issues}2134[#2134])

  • Fix a possible infinite loop in captureError when handling uncaught exceptions and the process is at or near its file descriptor limit (receiving EMFILE errors). ({issues}2148[#2148])

3.17.0 2021/07/05

Features
  • Add instrumentation of all AWS S3 methods when using the JavaScript AWS SDK v2 (aws-sdk).

  • Add disableSend configuration option. This supports some use cases using the APM agent without an APM server. ({issues}2101[#2101])

  • Add instrumentation of all DynamoDB methods when using the JavaScript AWS SDK v2 (aws-sdk).

Bug fixes
  • Fix inconsistencies in HTTP spans from other APM agents. span.subtype will now be "http" for HTTP, HTTPS, and HTTP/2 outgoing spans — previously it was "http", "https", "http2", respectively. As well, span.action will now be the HTTP method (e.g. "GET", "PUT", "POST"), rather than "http". ({pull}2075[#2075])

  • Fixed error where SQS messages sent without an active transactions could crash the agent. ({issues}2113[#2113])

  • Fixed support for proxies in destination context ({issues}1770[#1770])

3.16.0 - 2021/06/14

Features
  • Added spanFramesMinDuration configuration field, allowing users to set a time threshold value that spans must reach before the agent will add a stack trace to the span. As a result, many short spans that previously included stack traces by default no longer will.

  • Prefer W3C "traceparent" header over "elastic-apm-traceparent" for incoming requests. {pull}2079[#2079]

Bug fixes
  • Fix a crash (TypeError: lastPrepareStackTrace) in the agent when used with React v17 and later ({issues}1980[#1980]).

  • Performance improvements have been made in error and stacktrace capture ({pull}2094[#2094]). This also included in two bug fixes:

    • Before this change, some captured errors (for example a next(new Error('boom') from an Express handler) would mark the error as "unhandled" incorrectly. "Unhandled" exceptions are those caught by an uncaughtException handler.

    • Before this change, source context lines for a stacktrace would not properly use the "sourcesContext" field of a file’s source map.

3.15.0 - 2021/05/19

Features
  • Add support for Node.js v16. (This also drops testing of Node.js v13 releases.) {pull}2055[#2055]

Bug fixes
  • Update TypeScript typings for Agent.setLabel and Agent.addLabels to include the stringify argument that was added in v3.11.0.

3.14.0 - 2021/04/19

Features
  • Add apm.addMetadataFilter(fn) for filtering the metadata object sent to APM server.

  • The handling of sending events (transactions, spans, errors) to APM server has improved in a few ways. During temporary spikes in load and/or an APM server that is unresponsive, the agent will buffer a number of events and drop them above a certain limit (configurable via [max-queue-size]). This helps ensure the agent does not overly consume memory and CPU. As well, the agent will now backoff when the APM server errors. Finally, improved error handling means it will terminate failing requests to the APM server more quickly.

    Note: v1 of this agent (EOL’d 2 years ago), included a maxQueueSize config variable with a different meaning. If you have a lingering usage of that setting (also possibly as the ELASTIC_APM_MAX_QUEUE_SIZE environment variable), then it should be removed.

  • Adds support for Amazon SQS queues via aws-sdk instrumentation that partially implements the APM messaging spec, and adds queue.latency.min.ms, queue.latency.max.ms, and queue.latency.avg.ms metrics for SQS queues.

Bug fixes
  • Fixed bug where the URL property for outgoing HTTP request spans was set with the server’s IP address rather than its hostname. The Agent now sets this property with the actual URL requested by Node.js. {issues}2035[#2035]

  • Fixed bug where external services were not listed under Dependencies on the APM Service Overview page due to the trace-context propagated sample_rate value not being set on either transactions or spans.

3.13.0 - 2021/04/06

Features
  • The APM agent’s own internal logging now uses structured JSON logging using the pino API, and formatted in {ecs-logging-ref}/intro.html[ecs-logging] format. The log records on stdout are now single-line JSON objects. For example:

    # Before
    APM Server transport error (ECONNREFUSED): connect ECONNREFUSED 127.0.0.1:8200
    
    # After
    {"log.level":"error","@timestamp":"2021-03-19T00:21:17.571Z","log":{"logger":"elastic-apm-node"},
    "ecs":{"version":"1.6.0"},"message":"APM Server transport error (ECONNREFUSED): connect ECONNREFUSED 127.0.0.1:8200"}

    Pretty formatting (and filtering) on the console may be done via the ecslog tool.

    A custom [logger] is still supported as before. However, a non-pino custom logger will only receive the "message" field, and not structured log fields as they are added over time.

  • Add support for setting the ELASTIC_APM_LOGGER=false environment variable to disable/ignore a given custom [logger]. This is to support easier [debug-mode] for troubleshooting.

Bug fixes
  • Lock package dependency "elastic-apm-http-client@9.6.0" to avoid using v9.7.0 for now, because it is breaking tests. A coming release will get back on the latest of this dependency. {issues}2032[#2032]

  • Remove the "ancestors" field from a log.trace message on startup. Its info is a duplicate of info in the "startTrace" field in the same log record. {pull}2005[#2005]

  • Remove the accidental nodejs.eventloop.delay.ns metric that was always reporting a zero value. The existing nodejs.eventloop.delay.avg.ms is the intended metric. {pull}1993[#1993]

3.12.1 - 2021/02/25

Bug fixes
  • fix: Update apm-server client to fix a {issues}1749[possible crash] when polling for central config.

3.12.0 - 2021/02/21

Features
  • feat: Set span outcome to success or failure depending on whether an error was captured during when the span was active. {issues}1814[#1814]

  • feat: Adds public setOutcome method to span and transaction APIs, and adds a top level setTransactionOutcome and setSpanOutcome to set outcome values for the current active transaction or active span.

  • Limit the transactionSampleRate value to 4 decimal places of precision according to the shared APM spec. This ensures that propagated sampling rate in the tracestate header is short and consistent. {pull}1979[#1979]

Bug fixes
  • fix: It was possible for fetching central config to result in the cloudProvider config value being reset to its default. {issues}1976[#1976]

  • fix: fixes bug where tedious could crash the agent on bulk inserts {pull}1935[#1935]
    Reported via the forum. The error symptom was: Cannot read property 'statement' of undefined

3.11.0 - 2021/02/08

Features
  • feat: add apm.getServiceName() {pull}1949[#1949]
    This will be used by ecs-logging packages to integrate with APM.

  • feat: support numeric and boolean labels {pull}1909[#1909]
    Add an optional stringify option to apm.setLabel(name, version, stringify = true) and apm.addLabels(labels, stringify = true), which can be set false to allow numeric and boolean labels. Stringify defaults to true for backwards compatibility — stringification will be removed in a future major version.

  • feat: added support for cloud metadata fetching {pull}1937[#1937]
    Agent now collects information about its cloud environment and includes this data in the APM Server’s metadata payload. See the spec for more information.

3.10.0 - 2021/01/11

Features
  • feat: Improve handling of raw body parsing The agent will now report raw/Buffer encoded post bodies as '<Buffer>'.

  • feat: Add support for api keys {pull}1818[#1818]
    This allows the usage of API keys for authentication to the APM server

  • feat: Add automatic instrumentation of the @elastic/elasticsearch package {pull}1877[#1870]

    The instrumentation of the legacy "elasticsearch" package has also changed slightly to commonalize:

    • "span.context.destination" is set on all Elasticsearch spans, not just a subset of query-like API endpoints.

    • For query-like API endpoints (e.g. /_search), the capturing of query details on "span.context.db.statement" has changed (a) to include both the query params and the request body if both exist (separated by \n\n) and (b) to URL encode the query params, rather than JSON encoding.

  • feat: Add captureAttributes boolean option to apm.captureError() to allow disabling the automatic capture of Error object properties. This is useful for cases where those properties should not be sent to the APM Server, e.g. for performance (large string fields) or security (PII data). {pull}1912[#1912]

  • feat: Add log_level central config support. {pull}1908[#1908]
    Spec: https://github.com/elastic/apm/blob/main/specs/agents/logging.md

  • feat: Add sanitize_field_names configuration option.
    Allows users to configure a list of wildcard patterns to remove items from the agent’s HTTP header and application/x-www-form-urlencoded payloads. {pull}1898[#1898]

Bug fixes
  • fix: Fix parsing of comma-separated strings for relevant config vars to allow whitespace around the commas. E.g.:

    export ELASTIC_APM_TRANSACTION_IGNORE_URLS='/ping, /metrics*'

    Config vars affected are: disableInstrumentations, transactionIgnoreUrls addPatch, and globalLabels.

  • fix: Correct the environment variable for setting transactionIgnoreUrl (added in v3.9.0) from ELASTIC_TRANSACTION_IGNORE_URLS to ELASTIC_APM_TRANSACTION_IGNORE_URLS.

3.9.0 - 2020/11/30

Features
  • feat: support fastify 3 {pull}1891[#1891]
    Adds .default and .fastify module.exports to instrumented fastify function for 3.x line, and prefers req.routerMethod and req.routerPath for transaction name

  • feat: Set "destination" context on spans for "mongodb". {pull}1893[#1893]
    This allows Kibana APM Service Maps to show a "mongodb" node for services using the mongodb package (which includes mongoose and mongojs).

  • feat: transactionIgnoreUrl wildcard matching {pull}1870[#1870]
    Allows users to ignore URLs using simple wildcard matching patterns that behave the same across language agents. See elastic/apm#144

Bug fixes
  • fix: treat set-cookie in response headers as sensitive data {pull}1886[#1886]

  • fix: Synchronous spans would never have span.sync == true. {pull}1879[#1879]

3.8.0 - 2020/11/09

Features
  • feat: expand k8s pod ID discovery regex {pull}1863[#1863]

  • feat: implements tracestate {pull}1828[#1828]
    Expands support for the W3C Trace Context specification by adding a tracestate header implementation, and uses this new header to track the Elastic transaction sample rate across a trace’s service boundaries.

  • feat: add span and transaction outcome {pull}1824[#1824]
    This adds an "outcome" field to HTTP(S) transactions and spans.

Bug fixes
  • fix(pg): prevent unhandled promise rejection {pull}1846[#1846]

  • fix: redis@2.x instrumentation was broken {pull}1852[#1852]

  • A number of fixes to the test suite.

3.7.0 - 2020/8/10

  • feat(knex): add support for 0.21.x {pull}1801[#1801]

  • feat(redis): add support for v3.x {pull}1641[#1641]

  • feat(graphql): add support for 15.x {pull}1795[#1795]

  • feat(koa-router): add support for 9.x {pull}1772[#1772]

  • fix(elasticsearch): ensure requests can be aborted {pull}1566[#1566]

  • fix: end span if outgoing http request ends prematurely {pull}1583[#1583]

  • fix: don’t throw on invalid URL {pull}1771[#1771]

  • fix: patch apollo-server-core > 2.14 correctly {pull}1796[#1796]

  • fix: add currentTraceIds to typings {pull}1733[#1733]

3.6.1 - 2020/5/20

  • fix(package): bump elastic-apm-http-client to ^9.4.0 {pull}1756[#1756]

3.6.0 - 2020/5/18

  • feat: add destination metadata for db spans {pull}1687[#1687]

  • feat: add support for Node.js 14 {pull}1742[#1742]

  • feat(pg): add support for pg v8.x {pull}1743[#1743]

  • feat: add metrics for external memory {pull}1724[#1724]

  • feat: enrich spans with destination info {pull}1685[#1685]

  • fix(instrumentation): add .js to module path {pull}1711[#1711]

3.5.0 - 2020/3/9

  • feat(error): get stack trace from Error-like objects {pull}1613[#1613]

  • fix: add logUncaughtExceptions conf option to TypeScript typings {pull}1668[#1668]

3.4.0 - 2020/2/21

  • feat: support W3C TraceContext traceparent header {pull}1587[#1587]

  • feat: add custom metrics API (experimental) {pull}1571[#1571]

  • feat(koa-router): add support for v8.x {pull}1642[#1642]

  • fix(cassandra): improve support for cassandra-driver v4.4.0+ {pull}1636[#1636]

  • fix: support promisifying setTimeout and friends {pull}1636[#1636]

3.3.0 - 2019/12/13

  • feat(config): add serverCaCertFile config {pull}1560[#1560]

  • feat(config): add central config support for transactionMaxSpans and captureBody {pull}1555[#1555]

3.2.0 - 2019/11/19

  • fix(metrics): only register collectors if enabled {pull}1520[#1520]

  • fix(ioredis): prevent unhandled promise rejection {pull}1523[#1523]

  • chore: add Node 13 to supported engines {pull}1524[#1524]

3.1.0 - 2019/10/16

Features
  • feat(mongodb): instrumentation {pull}1423[#1423]

  • fix(package): update elastic-apm-http-client to version 9.0.0 {pull}1419[#1419]

  • perf: cache 'ids' value of transactions and spans {pull}1434[#1434]

Bug fixes
  • fix: always end transaction when socket is closed prematurely {pull}1439[#1439]

  • fix: change logUncaughtExceptions default to false {pull}1432[#1432]

  • fix: write stack trace of uncaught exceptions to STDERR {pull}1429[#1429]

3.0.0 - 2019/9/30

Breaking changes
  • feat: allow manual instrumentation with instrument: false {pull}1114[#1114]

  • feat: allow setting span/transaction type, subtype, and action separately (the behavior of the old type has changed) {pull}1292[#1292]

  • feat: use external as span type instead of ext {pull}1291[#1291]

  • refactor(graphql): use custom transaction type graphql for graphql requests instead of request {pull}1245[#1245]

  • feat(http): add instrumentIncomingHTTPRequests config (disableInstrumentations now behaves differently) {pull}1298[#1298]

  • chore: remove deprecated APIs {pull}1413[#1413]

  • chore: drop support for older Node.js versions {pull}1383[#1383]

Node.js Agent version 2.x

2.17.3 - 2020/2/27

Bug fixes
  • fix: support promisifying setTimeout and friends {pull}1649[#1649]

  • fix(cassandra): improve support for cassandra-driver v4.4.0+ {pull}1649[#1649]

  • fix(knex): make stack traces work in 0.18+ {pull}1500[#1500]

  • fix(tedious): ensure shimmed module exposes same API {pull}1496[#1496]

  • fix(metrics): do not send transaction breakdowns when disabled {pull}1489[#1489]

  • fix(tedious): support 6.5+ {pull}1488[#1488]

  • fix: always end transaction when socket is closed prematurely {pull}1445[#1445]

  • perf: cache 'ids' value of transactions and spans {pull}1438[#1438]

2.17.2 - 2019/10/2

Bug fixes
  • chore(http): workaround(s) to suppress DEP0066 warnings {pull}1424[#1424]

2.17.1 - 2019/9/26

Bug fixes
  • fix: support all falsy return values from error filters {pull}1394[#1394]

  • fix: capture all non-string http bodies {pull}1381[#1381]

2.17.0 - 2019/9/19

Features
  • feat: add support for @koa/router {pull}1346[#1346]

  • feat: add methods for logging trace information {pull}1335[#1335]

Bug fixes
  • fix: improve debug output when detecting incoming http request {pull}1357[#1357]

  • fix(http): response context propagation on Node.js 12.0 - 12.2 {pull}1339[#1339]

2.16.2 - 2019/9/3

Bug fixes
  • fix(lambda): handle traceparent case-insensitively {pull}1319[#1319]

2.16.1 - 2019/8/28

Bug fixes
  • fix: avoid throwing when agent is in active: false mode {pull}1278[#1278]

2.16.0 - 2019/8/26

Features
  • feat(memcached): instrument memcached v2.2.0 and above {pull}1144[#1144]

  • feat(config): add configFile config option {pull}1303[#1303]

Bug fixes
  • fix: bug where spans sometimes wouldn’t have stack traces {pull}1299[#1299]

  • fix(async_hooks): properly update sync flag {pull}1306[#1306]

  • fix: change agent active status log message to debug level {pull}1300[#1300]

2.15.0 - 2019/8/15

Features
  • feat(express-graphql): add support for v0.9 {pull}1255[#1255]

  • feat(metrics): add metricsLimit option {pull}1273[#1273]

2.14.0 - 2019/8/12

Features
  • feat(hapi): support new @hapi/hapi module {pull}1246[#1246]

  • feat: allow agent.clearPatches to be called with array of names {pull}1262[#1262]

Bug fixes
  • fix: be less chatty if span stack traces cannot be parsed {pull}1274[#1274]

  • perf: use for-of instead of forEach {pull}1275[#1275]

2.13.0 - 2019/7/30

Bug fixes
  • fix: standardize user-agent header {pull}1238[#1238]

Features
  • feat: add support for APM Agent Configuration via Kibana {pull}1197[#1197]

  • feat(metrics): breakdown graphs {pull}1219[#1219]

  • feat(config): default serviceVersion to package version {pull}1237[#1237]

2.12.1 - 2019/7/7

Bug fixes
  • fix(knex): abort early on unsupported version of knex {pull}1189[#1189]

2.12.0 - 2019/7/2

Features
  • feat(metrics): add runtime metrics {pull}1021[#1021]

  • feat(config): add environment option {pull}1106[#1106]

2.11.6 - 2019/6/11

Bug fixes
  • fix(express): don’t swallow error handling middleware {pull}1111[#1111]

2.11.5 - 2019/5/27

Bug fixes
  • fix(metrics): report correct CPU usage on Linux {pull}1092[#1092]

  • fix(express): improve names for routes added via app.use() {pull}1013[#1013]

2.11.4 - 2019/5/27

Bug fixes
  • fix: don’t add traceparent header to signed AWS requests {pull}1089[#1089]

2.11.3 - 2019/5/22

Bug fixes
  • fix(span): use correct logger location {pull}1081[#1081]

2.11.2 - 2019/5/21

Bug fixes
  • fix: url.parse expects req.url not req {pull}1074[#1074]

  • fix(express-slash): expose express handle properties {pull}1070[#1070]

2.11.1 - 2019/5/10

Bug fixes
  • fix(instrumentation): explicitly use require {pull}1059[#1059]

  • chore: add Node.js 12 to package.json engines field {pull}1057[#1057]

2.11.0 - 2019/5/3

Bug fixes
  • chore: rename tags to labels {pull}1019[#1019]

Features
  • feat(config): support global labels {pull}1020[#1020]

Bug fixes
  • fix(config): do not use ELASTIC_APM_ prefix for k8s {pull}1041[#1041]

  • fix(instrumentation): prevent handler leak in bindEmitter {pull}1044[#1044]

2.10.0 - 2019/4/15

Features
  • feat(express-graphql): add support for version ^0.8.0 {pull}1010[#1010]

Bug fixes
  • fix(package): bump elastic-apm-http-client to ^7.2.2 so Kubernetes metadata gets corrected recorded {pull}1011[#1011]

  • fix(ts): add TypeScript typings for new traceparent API {pull}1001[#1001]

2.9.0 - 2019/4/10

Features
  • feat: add traceparent getter to agent, span and transaction {pull}969[#969]

  • feat(template): add support for jade and pug {pull}914[#914]

  • feat(elasticsearch): capture more types of queries {pull}967[#967]

  • feat: sync flag on spans and transactions {pull}980[#980]

Bug fixes
  • fix(agent): init config/logger before usage {pull}956[#956]

  • fix: don’t add response listener to outgoing requests {pull}974[#974]

  • fix(agent): fix basedir in debug mode when starting agent with -r {pull}981[#981]

  • fix: ensure Kubernetes/Docker container info is captured {pull}995[#995]

2.8.0 - 2019/4/2

Features
  • feat: add agent.setFramework() method {pull}966[#966]

  • feat(config): add usePathAsTransactionName config option {pull}907[#907]

  • feat(debug): output configuration if logLevel is trace {pull}972[#972]

Bug fixes
  • fix(express): transaction default name is incorrect {pull}938[#938]

2.7.1 - 2019/3/28

Bug fixes
  • fix: instrument http/https.get requests {pull}954[#954]

  • fix: don’t add traceparent header to S3 requests {pull}952[#952]

2.7.0 - 2019/3/26

Features
  • feat: add patch registry {pull}803[#803]

  • feat: allow sub-modules to be patched {pull}920[#920]

  • feat: add TypeScript typings {pull}926[#926]

Bug fixes
  • fix: update measured-reporting to fix Windows installation issue {pull}933[#933]

  • fix(lambda): do not wrap context {pull}931[#931]

  • fix(lambda): fix cloning issues of context {pull}947[#947]

  • fix(metrics): use noop logger in metrics reporter {pull}912[#912]

  • fix(transaction): don’t set transaction result if it’s null {pull}936[#936]

  • fix(agent): allow flush callback to be undefined {pull}934[#934]

  • fix: handle promise rejection in case Elasticsearch client throws {pull}870[#870]

  • chore: change 'npm run' command namespaces {pull}944[#944]

2.6.0 - 2019/3/5

Features
  • feat: add support for Fastify framework {pull}594[#594]

  • feat(lambda): accept parent span in lambda wrapper {pull}881[#881]

  • feat(lambda): support promise form {pull}871[#871]

Bug fixes
  • fix: ensure http headers are always recorded as strings {pull}895[#895]

  • fix(metrics): prevent 0ms timers from being created {pull}872[#872]

  • fix(config): apiRequestSize should be 768kb {pull}848[#848]

  • fix(express): ensure correct transaction names {pull}842[#842]

2.5.1 - 2019/2/4

Bug fixes
  • fix(metrics): ensure NaN becomes 0, not null {pull}837[#837]

2.5.0 - 2019/1/29

Features
  • feat(metrics): added basic metrics gathering {pull}731[#731]

2.4.0 - 2019/1/24

Features
  • feat: add ability to set custom log message for errors {pull}824[#824]

  • feat: add ability to set custom timestamp for errors {pull}823[#823]

  • feat: add support for custom start/end times {pull}818[#818]

2.3.0 - 2019/1/22

Bug fixes
  • fix(parsers): move port fix into parser {pull}820[#820]

  • fix(mongo): support 3.1.10+ {pull}793[#793]

Features
  • feat(config): add captureHeaders config {pull}788[#788]

  • feat(config): add container info options {pull}766[#766]

2.2.1 - 2019/1/21

Bug fixes
  • fix: ensure request.url.port is a string on transactions {pull}814[#814]

2.2.0 - 2019/1/21

Features
  • feat(koa): record framework name and version {pull}810[#810]

  • feat(cassandra): support 4.x {pull}784[#784]

  • feat(config): validate serverUrl port {pull}795[#795]

  • feat: add transaction.type to errors {pull}805[#805]

Bug fixes
  • fix: filter outgoing http headers with any case {pull}799[#799]

  • fix: we don’t support mongodb-core v3.1.10+ {pull}792[#792]

2.1.0 - 2019/1/15

Features
  • feat(error): include sampled flag on errors {pull}767[#767]

  • feat(span): add tags to spans {pull}757[#757]

Bug fixes
  • fix(tedious): don’t fail on newest tedious v4.1.3 {pull}775[#775]

  • fix(graphql): fix span name for unknown queries {pull}756[#756]

2.0.6 - 2018/12/18

Bug fixes
  • fix(graphql): don’t throw on invalid query {pull}747[#747]

  • fix(koa-router): support more complex routes {pull}749[#749]

2.0.5 - 2018/12/12

Bug fixes
  • fix: don’t create spans for APM Server requests {pull}735[#735]

2.0.4 - 2018/12/7

  • chore: update engines field in package.json {pull}727[#727]

  • chore(package): bump random-poly-fill to ^1.0.1 {pull}726[#726]

2.0.3 - 2018/12/7

Bug fixes
  • fix(restify): support an array of handlers {pull}709[#709]

  • fix: don’t throw on older versions of Node.js 6 {pull}711[#711]

2.0.2 - 2018/12/4

Bug fixes
  • fix: use randomFillSync polyfill on Node.js <6.13.0 {pull}702[#702]

  • fix(hapi): ignore internal events channel {pull}700[#700]

2.0.1 - 2018/11/26

Bug fixes
  • fix: log APM Server API errors correctly {pull}692[#692]

2.0.0 - 2018/11/14

Breaking changes
  • chore: remove support for Node.js 4 and 9

  • chore: remove deprecated buildSpan function {pull}642[#642]

  • feat: support APM Server intake API version 2 {pull}465[#465]

  • feat: improved filtering function API {pull}579[#579]

  • feat: replace double-quotes with underscores in tag names {pull}666[#666]

  • feat(config): change config order {pull}604[#604]

  • feat(config): support time suffixes {pull}602[#602]

  • feat(config): stricter boolean parsing {pull}613[#613]

Features
  • feat: add support for Distributed Tracing {pull}538[#538]

  • feat(transaction): add transaction.ensureParentId function {pull}661[#661]

  • feat(config): support byte suffixes {pull}601[#601]

  • feat(transaction): restructure span_count and include total {pull}553[#553]

  • perf: improve Async Hooks implementation {pull}679[#679]

Node.js Agent version 1.x

1.14.3 - 2018/11/13

  • fix(async_hooks): more reliable cleanup {pull}674[#674]

1.14.2 - 2018/11/10

  • fix: prevent memory leak due to potential reference cycle {pull}667[#667]

1.14.1 - 2018/11/8

  • fix: promise.then() resolve point {pull}663[#663]

1.14.0 - 2018/11/6

  • feat(agent): return uuid in captureError callback {pull}636[#636]

  • feat(apollo-server-express): set custom GraphQL transaction names {pull}648[#648]

  • feat(finalhandler): improve capturing of errors in Express {pull}629[#629]

  • fix(http): bind writeHead to transaction {pull}637[#637]

  • fix(shimmer): safely handle property descriptors {pull}634[#634]

1.13.0 - 2018/10/19

  • feat(ioredis): add support for ioredis version 4.x {pull}516[#516]

  • fix(ws): allow disabling WebSocket instrumentation {pull}599[#599]

  • fix: allow flushInterval to be set from env {pull}568[#568]

  • fix: default transactionMaxSpans to 500 {pull}567[#567]

1.12.0 - 2018/8/31

  • feat(restify): add Restify instrumentation {pull}517[#517]

  • feat(config): default serviceName to package name {pull}508[#508]

  • fix: always call agent.flush() callback {pull}537[#537]

1.11.0 - 2018/8/15

  • feat(filters): filter set-cookie headers {pull}485[#485]

  • fix(express): cannot create property symbol {pull}510[#510]

1.10.2 - 2018/8/8

  • fix: ensure logger config can update {pull}503[#503]

  • perf: improve request body parsing speed {pull}492[#492]

1.10.1 - 2018/7/31

  • fix(graphql): handle execute args object {pull}484[#484]

1.10.0 - 2018/7/30

  • feat(cassandra): instrument Cassandra queries {pull}437[#437]

  • feat(mssql): instrument SQL Server queries {pull}444[#444]

1.9.0 - 2018/7/25

  • fix(parsers): use basic-auth rather than req.auth {pull}475[#475]

  • feat(agent): add currentTransaction getter {pull}462[#462]

  • feat: add support for ws 6.x {pull}464[#464]

1.8.3 - 2018/7/11

  • perf: don’t patch newer versions of mimic-response {pull}442[#442]

1.8.2 - 2018/7/4

  • fix: ensure correct streaming when using mimic-response {pull}429[#429]

1.8.1 - 2018/6/27

  • fix: improve ability to run in an environment with muliple APM vendors {pull}417[#417]

1.8.0 - 2018/6/23

  • feat: truncate very long error messages {pull}413[#413]

  • fix: be unicode aware when truncating body {pull}412[#412]

1.7.1 - 2018/6/20

  • fix(express-queue): retain continuity through express-queue {pull}396[#396]

1.7.0 - 2018/6/18

  • feat(mysql): support mysql2 module {pull}298[#298]

  • feat(graphql): add support for the upcoming GraphQL v14.x {pull}399[#399]

  • feat(config): add option to disable certain instrumentations {pull}353[#353]

  • feat(http2): instrument client requests {pull}326[#326]

  • fix: get remoteAddress before HTTP request close event {pull}384[#384]

  • fix: improve capture of spans when EventEmitter is in use {pull}371[#371]

1.6.0 - 2018/5/28

  • feat(http2): instrument incoming http2 requests {pull}205[#205]

  • fix(agent): allow agent.endTransaction() to set result {pull}350[#350]

1.5.4 - 2018/5/15

  • chore: allow Node.js 10 in package.json engines field {pull}345[#345]

1.5.3 - 2018/5/14

  • fix: guard against non string err.message

1.5.2 - 2018/5/11

  • fix(express): string errors should not be reported

1.5.1 - 2018/5/10

  • fix: don’t throw if span callsites can’t be collected

1.5.0 - 2018/5/9

  • feat: add agent.addTags() method {pull}313[#313]

  • feat: add agent.isStarted() method {pull}311[#311]

  • feat: allow calling transaction.end() with transaction result {pull}328[#328]

  • fix: encode spans even if their stack trace can’t be captured {pull}321[#321]

  • fix(config): restore custom logger feature {pull}299[#299]

  • fix(doc): lambda getting started had old argument {pull}296[#296]

1.4.0 - 2018/4/9

  • feat(lambda): implement manual lambda instrumentation {pull}234[#234]

1.3.0 - 2018/3/22

  • feat(request): include ppid {pull}286[#286]

1.2.1 - 2018/3/15

  • fix(span): Do not pass stack frames into promises (memory leak fix) {pull}269[#269]

1.2.0 - 2018/3/13

  • feat(config): add serverTimeout {pull}238[#238]

  • fix(config): set default maxQueueSize to 100 {pull}270[#270]

  • feat(ws): add support for ws v5 {pull}267[#267]

1.1.1 - 2018/3/4

  • fix(mongodb): don’t throw if span cannot be built {pull}265[#265]

1.1.0 - 2018/2/28

  • feat: add agent.startSpan() function {pull}262[#262]

  • feat(debug): output more debug info on start {pull}254[#254]

1.0.3 - 2018/2/14

  • fix: ensure context.url.full property is truncated if too long {pull}242[#242]

1.0.2 - 2018/2/13

  • fix(express): prevent invalid errors from crashing {pull}240[#240]

1.0.1 - 2018/2/9

  • fix: don’t add req/res to unsampled transactions {pull}236[#236]

1.0.0 - 2018/2/6

  • feat(instrumentation): support sampling {pull}154[#154]

  • feat(transaction): add transactionMaxSpans config option {pull}170[#170]

  • feat(errors): add captureError call location stack trace {pull}181[#181]

  • feat: allow setting of framework name and version {pull}228[#228]

  • feat(protcol): add url.full to intake API payload {pull}166[#166]

  • refactor(config): replace logBody with captureBody {pull}214[#214]

  • refactor(config): unify config options with python {pull}213[#213]

  • fix: don’t collect source code for in-app span frames by default {pull}229[#229]

  • fix(protocol): report dropped span counts in intake API payload {pull}172[#172]

  • refactor(protocol): always include handled flag in intake API payload {pull}191[#191]

  • refactor(protocol): move process fields to own namespace in intake API payload {pull}155[#155]

  • refactor(protocol): rename uncaught to handled in intake API payload {pull}140[#140]

  • refactor(protocol): rename in_app to library_frame in intake API payload {pull}96[#96]

  • refactor: rename app to service {pull}93[#93]

  • refactor: rename trace to span {pull}92[#92]

Node.js Agent version 0.x

0.12.0 - 2018/1/24

  • feat(*): control amount of source context lines collected using new config options {pull}196[#196]

  • feat(agent): add public flush function to force flush of transaction queue: agent.flush([callback]) {pull}187[#187]

  • feat(mongodb): add support for mongodb-core 3.x {pull}190[#190]

  • refactor(config): update default flushInterval to 10 seconds (lower memory usage) {pull}186[#186]

  • chore(*): drop support for Node.js 5 and 7 {pull}169[#169]

  • refactor(instrumentation): encode transactions as they are added to the queue (lower memory usage) {pull}184[#184]

0.11.0 - 2018/1/11

  • feat(*): Set default stack trace limit to 50 frames {pull}171[#171]

  • feat(ws): add support for ws@4.x {pull}164[#164]

  • feat(errors): associate errors with active transaction

0.10.0 - 2018/1/3

  • feat(express): auto-track errors (BREAKING CHANGE: removed express middleware) {pull}127[#127]

  • feat(hapi): add hapi 17 support {pull}146[#146]

  • fix(*): fix Node.js 8 support using async_hooks {pull}77[#77]

  • fix(graphql): support sync execute {pull}139[#139]

  • refactor(agent): make all config properties private (BREAKING CHANGE) {pull}107[#107]

0.9.0 - 2017/12/15

  • feat(conf): allow serverUrl to contain a sub-path {pull}116[#116]

  • refactor(*): better format of error messages from the APM Server {pull}108[#108]

0.8.1 - 2017/12/13

  • docs(*): we’re now in beta! {pull}103[#103]

0.8.0 - 2017/12/13

  • feat(handlebars): instrument handlebars {pull}98[#98]

0.7.0 - 2017/12/6

  • feat(parser): add sourceContext config option to control if code snippets are sent to the APM Server {pull}87[#87]

  • fix(*): move https-pem to list of devDependencies

0.6.0 - 2017/11/17

  • feat(queue): add maxQueueSize config option {pull}56[#56]

0.5.0 - 2017/11/17

  • refactor(*): drop support for Node.js <4 {pull}65[#65]

  • refactor(*): rename module to elastic-apm-node {pull}71[#71]

  • feat(queue): add fuzziness to flushInterval {pull}63[#63]

0.4.0 - 2017/11/15

  • fix(https): instrument https.request in Node.js v9

  • refactor(http): log HTTP results in groups of 100 {pull}68[#68]

  • fix(api): add language to APM Server requests {pull}64[#64]

  • refactor(trans): set default transaction.result to success {pull}67[#67]

  • refactor(config): rename timeout config options {pull}59[#59]

0.3.1 - 2017/10/3

  • fix(parsers): don’t log context.request.url.search as null {pull}48[#48]

  • fix(parsers): separate hostname and port when parsing Host header {pull}47[#47]

0.3.0 - 2017/9/20

  • fix(instrumentation): don’t sample transactions {pull}40[#40]

  • feat(graphql): include GraphQL operation name in trace and transaction names {pull}27[#27]

  • feat(tls): add validateServerCert config option {pull}32[#32]

  • feat(parser): support http requests with full URI’s {pull}26[#26]

  • refactor(*): remove appGitRef config option

  • fix(instrumentation): fix setting of custom flushInterval

  • feat(elasticsearch): add simple Elasticsearch instrumentation

  • fix(*): don’t start agent if appName is invalid

0.2.0 - 2017/8/28

  • refactor(*): support new default port 8200 in APM Server

  • refactor(*): support new context.response status code format

0.1.1 - 2017/8/17

  • fix(instrumentation): don’t fail when sending transactions to APM Server

0.1.0 - 2017/8/17

  • Initial release