- Fixes transaction name for non-sampled transactions #581
- Fixes exceptions when using WildFly managed executor services #589
- Java APM Agent became part of the Cloud Foundry Java Buildpack as of Release v4.19
- Support Apache HttpAsyncClient - span creation and cross-service trace context propagation
- Added the
jvm.thread.count
metric, indicating the number of live threads in the JVM (daemon and non-daemon) - Added support for WebLogic
- Added support for Spring
@Scheduled
and EJB@Schedule
annotations - #569
- Avoid that the agent blocks server shutdown in case the APM Server is not available - #554
- Public API annotations improper retention prevents it from being used with Groovy - #567
- Eliminate side effects of class loading related to Instrumentation matching mechanism
- If you didn't explicitly set the
service_name
previously and you are dealing with a servlet-based application (including Spring Boot), yourservice_name
will change. See the documentation forservice_name
and the corresponding section in Features for more information. Note: this requires APM Server 7.0+. If using previous versions, nothing will change.
- Added property "allow_path_on_hierarchy" to JAX-RS plugin, to lookup inherited usage of
@path
- Support for number and boolean labels in the public API (#497).
This change also renames
tag
tolabel
on the API level to be compliant with the Elastic Common Schema (ECS). TheaddTag(String, String)
method is still supported but deprecated in favor ofaddLabel(String, String)
. As of version 7.x of the stack, labels will be stored underlabels
in Elasticsearch. Previously, they were stored undercontext.tags
. - Support async queries made by Elasticsearch REST client
- Added
setStartTimestamp(long epochMicros)
andend(long epochMicros)
API methods toSpan
andTransaction
, allowing to set custom start and end timestamps. - Auto-detection of the
service_name
based on the<display-name>
element of theweb.xml
with a fallback to the servlet context path. If you are using a spring-based application, the agent will use the setting forspring.application.name
for itsservice_name
. See the documentation forservice_name
for more information. Note: this requires APM Server 7.0+. If using previous versions, nothing will change. - Previously, enabling
capture_body
could only capture form parameters. Now it supports all UTF-8 encoded plain-text content types. The optioncapture_body_content_types
controls whichContent-Type
s should be captured. - Support async calls made by OkHttp client (
Call#enqueue
) - Added support for providing config options on agent attach.
- CLI example:
--config server_urls=http://localhost:8200,http://localhost:8201
- API example:
ElasticApmAttacher.attach(Map.of("server_urls", "http://localhost:8200,http://localhost:8201"));
- CLI example:
- Logging integration through MDC is not working properly - #499
- ClassCastException with adoptopenjdk/openjdk11-openj9 - #505
- Span count limitation is not working properly - reported in our forum
- Java agent causes Exceptions in Alfresco cluster environment due to failure in the instrumentation of Hazelcast
Executor
s - reported in our forum
- Added support for sync calls of OkHttp client
- Added support for context propagation for
java.util.concurrent.ExecutorService
s - The
trace_methods
configuration now allows to omit the method matcher. Example:com.example.*
traces all classes and methods within thecom.example
package and sub-packages. - Added support for JSF. Tested on WildFly, WebSphere Liberty and Payara with embedded JSF implementation and on Tomcat and Jetty with MyFaces 2.2 and 2.3
- Introduces a new configuration option
disable_metrics
which disables the collection of metrics via a wildcard expression. - Support for HttpUrlConnection
- Adds
subtype
andaction
to spans. This replaces former typing mechanism where type, subtype and action were all set through the type in an hierarchical dotted-syntax. In order to support existing API usages, dotted types are parsed into subtype and action, howeverSpan.createSpan
andSpan.setType
are deprecated starting this version. Instead, type-less spans can be created using the newSpan.startSpan
API and typed spans can be created using the newSpan.startSpan(String type, String subtype, String action)
API - Support for JBoss EAP 6.4, 7.0, 7.1 and 7.2
- Improved startup times
- Support for SOAP (JAX-WS).
SOAP client create spans and propagate context.
Transactions are created for
@WebService
classes and@WebMethod
methods.
- Fixes a failure in BitBucket when agent deployed (#349)
- Fixes increased CPU consumption (#443 and #453)
- Fixed some OpenTracing bridge functionalities that were not working when auto-instrumentation is disabled
- Fixed an error occurring when ending an OpenTracing span before deactivating
- Sending proper
null
for metrics that have a NaN value - Fixes JVM crash with Java 7 (#458)
- Fixes an application deployment failure when using EclipseLink and
trace_methods
configuration (#474)
- The agent now collects system and JVM metrics (#360)
- Add API methods
ElasticApm#startTransactionWithRemoteParent
andSpan#injectTraceHeaders
to allow for manual context propagation (#396). - Added
trace_methods
configuration option which lets you define which methods in your project or 3rd party libraries should be traced. To create spans for allpublic
methods of classes whose name ends inService
which are in a sub-package oforg.example.services
use this matcher:public org.example.services.*.*Service#*
(#398) - Added span for
DispatcherServlet#render
(#409). - Flush reporter on shutdown to make sure all recorded Spans are sent to the server before the programm exits (#397)
- Adds Kubernetes (#383) and Docker metadata to, enabling correlation with the Kibana Infra UI.
- Improved error handling of the Servlet Async API (#399)
- Fixing a potential memory leak when there is no connection with APM server
- Fixes NoSuchMethodError CharBuffer.flip() which occurs when using the Elasticsearch RestClient and Java 7 or 8 (#401)
- Added
capture_headers
configuration option. Set tofalse
to disable capturing request and response headers. This will reduce the allocation rate of the agent and can save you network bandwidth and disk space. - Makes the API methods
addTag
,setName
,setType
,setUser
andsetResult
fluent, so that calls can be chained.
- Catch all errors thrown within agent injected code
- Enable public APIs and OpenTracing bridge to work properly in OSGi systems, fixes this WildFly issue
- Remove module-info.java to enable agent working on early Tomcat 8.5 versions
- Fix async Servlet API issue
- Some memory allocation improvements
- Enabling bootdelegation for agent classes in Atlassian OSGI systems
- Update dsl-json which fixes a memory leak. See ngs-doo/dsl-json#102 for details.
- Avoid
VerifyError
s by non instrumenting classes compiled for Java 4 or earlier - Enable APM Server URL configuration with path (fixes #339)
- Reverse
system.hostname
andsystem.platform
order sent to APM server
- Fixes NoSuchMethodError CharBuffer.flip() which occurs when using the Elasticsearch RestClient and Java 7 or 8 (#313)
- Remove intake v1 support. This version requires APM Server 6.5.0+ which supports the intake api v2.
Until the time the APM Server 6.5.0 is officially released,
you can test with docker by pulling the APM Server image via
docker pull docker.elastic.co/apm/apm-server:6.5.0-SNAPSHOT
.
- Adds
@CaptureTransaction
and@CaptureSpan
annotations which let you declaratively add custom transactions and spans. Note that it is required to configure theapplication_packages
for this to work. See the documentation for more information. - The public API now supports to activate a span on the current thread.
This makes the span available via
ElasticApm#currentSpan()
Refer to the documentation for more details. - Capturing of Elasticsearch RestClient 5.0.2+ calls.
Currently, the
*Async
methods are not supported, only their synchronous counterparts. - Added API methods to enable correlating the spans created from the JavaScrip Real User Monitoring agent with the Java agent transaction. More information can be found in the documentation.
- Added
Transaction.isSampled()
andSpan.isSampled()
methods to the public API - Added
Transaction#setResult
to the public API (#293)
- Fix for situations where status code is reported as
200
, even though it actually was500
(#225) - Capturing the username now properly works when using Spring security (#183)
- Remove intake v1 support. This version requires APM Server 6.5.0+ which supports the intake api v2.
Until the time the APM Server 6.5.0 is officially released,
you can test with docker by pulling the APM Server image via
docker pull docker.elastic.co/apm/apm-server:6.5.0-SNAPSHOT
.
- Adds
@CaptureTransaction
and@CaptureSpan
annotations which let you declaratively add custom transactions and spans. Note that it is required to configure theapplication_packages
for this to work. See the documentation for more information. - The public API now supports to activate a span on the current thread.
This makes the span available via
ElasticApm#currentSpan()
Refer to the documentation for more details. - Capturing of Elasticsearch RestClient 5.0.2+ calls.
Currently, the
*Async
methods are not supported, only their synchronous counterparts. - Added API methods to enable correlating the spans created from the JavaScrip Real User Monitoring agent with the Java agent transaction. More information can be found in the documentation.
- Microsecond accurate timestamps (#261)
- Fix for situations where status code is reported as
200
, even though it actually was500
(#225)
- Wildcard patterns are case insensitive by default. Prepend
(?-i)
to make the matching case sensitive.
- Wildcard patterns are now not limited to only one wildcard in the middle and can be arbitrarily complex now.
Example:
*foo*bar*baz
. - Support for JAX-RS annotations.
Transactions are named based on your resources (
ResourceClass#resourceMethod
).
- Removed
ElasticApm.startSpan
. Spans can now only be created from their transactions viaTransaction#createSpan
. ElasticApm.startTransaction
andTransaction#createSpan
don't activate the transaction and spans and are thus not available viaElasticApm.activeTransaction
andElasticApm.activeSpan
.
- Public API
- Add
Span#captureException
andTransaction#captureException
to public API.ElasticApm.captureException
is deprecated now. UseElasticApm.currentSpan().captureException(exception)
instead. - Added
Transaction.getId
andSpan.getId
methods
- Add
- Added support for async servlet requests
- Added support for Payara/Glassfish
- Incubating support for Apache HttpClient
- Support for Spring RestTemplate
- Added configuration options
use_path_as_transaction_name
andurl_groups
, which allow to use the URL path as the transaction name. As that could contain path parameters, like/user/$userId
however, You can set theurl_groups
option to define a wildcard pattern, like/user/*
, to group those paths together. This is especially helpful when using an unsupported Servlet API-based framework. - Support duration suffixes (
ms
,s
andm
) for duration configuration options. Not using the duration suffix logs out a deprecation warning and will not be supported in future versions. - Add ability to add multiple APM server URLs, which enables client-side load balancing.
The configuration option
server_url
has been renamed toserver_urls
to reflect this change. However,server_url
still works for backwards compatibility. - The configuration option
service_name
is now optional. It defaults to the main class name, the name of the executed jar file (removing the version number), or the application server name (for exampletomcat-application
). In a lot of cases, you will still want to set theservice_name
explicitly. But it helps getting started and seeing data easier, as there are no required configuration options anymore. In the future we will most likely determine more useful application names for Servlet API-based applications.