|
Note
|
Release notes are best read in our documentation at elastic.co |
-
The agent now collects cgroup memory metrics (see [metrics])
-
Experimental support for runtime attachment now also for OSGi containers, JBoss, and WildFly
-
New mitigation of OSGi bootdelegation errors (
NoClassDefFoundError). You can remove anyorg.osgi.framework.bootdelegationrelated configuration. This release also removes the configuration optionboot_delegation_packages. -
Overhaul of the
ExecutorServiceinstrumentation that avoidsClassCastExceptionissues - {pull}1206[#1206] -
Support for
ForkJoinPoolandScheduledExecutorService(see [supported-async-frameworks]) -
Support for
ExecutorService#invokeAnyandExecutorService#invokeAll -
Added support for
java.util.TimerTask- {pull}1235[#1235] -
Add capturing of request body in Elasticsearch queries:
_msearch,_count,_msearch/template,_search/template,_rollup_search- {pull}1222[#1222] -
Add
enabledflag -
Add experimental support for Scala Futures
-
The agent now collects heap memory pools metrics - {pull}1228[#1228]
-
Deprecating
ignore_urlsconfig in favour oftransaction_ignore_urlsto align with other agents, while still allowing the old config name for backward compatibility - {pull}1315[#1315] -
Enabling instrumentation of classes compiled with Java 1.4. This is reverting the restriction of instrumenting only bytecode of Java 1.5 or higher ({pull}320[#320]), which was added due to potential
VerifyError. Such errors should be avoided now by the usage ofTypeConstantAdjustment- {pull}1317[#1317] -
Enabling agent to work without attempting any communication with APM server, by allowing setting
server_urlswith an empty string - {pull}1295[#1295] -
Add micrometer support - {pull}1303[#1303]
-
Add
profiling_inferred_spans_lib_directoryoption to override the default temp directory used for exporting the async-profiler library. This is useful for server-hardened environments where/tmpis often configured withnoexec, leading tojava.lang.UnsatisfiedLinkErrorerrors - {pull}1350[#1350]
-
Fixes error capturing for log4j2 loggers. Version 1.17.0 introduced a regression.
-
Fixes
NullPointerExceptionrelated to JAX-RS and Quartz instrumentation - {pull}1249[#1249] -
Expanding k8s pod ID discovery to some formerly non-supported environments
-
When
recordingis set tofalse, the agent will not send captured errors anymore. -
Fixes NPE in Dubbo instrumentation that occurs when the application is acting both as a provider and as a consumer - {pull}1260[#1260]
-
Adding a delay by default what attaching the agent to Tomcat using the premain route to work around the JUL deadlock issue - {pull}1262[#1262]
-
Fixes missing
jboss.as:*MBeans on JBoss - {pull}1257[#1257] -
Fixes a
NoClassDefFoundErrorin the JMS instrumentation ofMessageListener- {pull}1287[#1287] -
Fix
/ by zeroerror message when settingserver_urlswith an empty string - {pull}1295[#1295] -
Fix
ClassNotFoundExceptionorClassCastExceptionin some cases where special log4j configurations are used - {pull}1322[#1322] -
Fix
NumberFormatExceptionwhen using early access Java version - {pull}1325[#1325] -
Fix
service_nameconfig being ignored when set to the same auto-discovered default value - {pull}1324[#1324] -
Fix service name error when updating a web app on a Servlet container - {pull}1326[#1326]
This release candidate adds some highly anticipated features: It’s now possible to attach the agent at runtime in more cases than before. Most notably, it enables runtime attachment on JBoss, WildFly, Glassfish/Payara, and other OSGi runtimes such as Atlassian Jira and Confluence.
To make this and other significant features, such as external plugins, possible,
we have implemented major changes to the architecture of the agent.
The agent now relies on the invokedynamic bytecode instruction to make plugin development easier, safer, and more efficient.
As early versions of Java 7 and Java 8 have unreliable support for invokedynamic,
we now require a minimum update level of 60 for Java 7 (7u60+) in addition to the existing minimum update level of 40 for Java 8 (8u40+).
We’re looking for users who would like to try this out to give feedback.
If we see that the invokedynamic-based approach (indy plugins) works well, we can continue and migrate the rest of the plugins.
After the migration has completed, we can move forward with external plugins and remove the experimental label from runtime attachment.
If all works like in our testing, you would not see NoClassDefFoundError s anymore when, for example, trying to attach the agent at runtime to an OSGi container or a JBoss server.
Also, non-standard OSGi containers, such as Atlassian Jira and other technologies with restrictive class loading policies, such as MuleSoft ESB, will benefit from this change.
In the worst case, there might be JVM crashes due to invokedynamic-related JVM bugs.
However, we already disable the agent when attached to JVM versions that are known to be problematic.
Another potentially problematic area is that we now dynamically raise the bytecode version of instrumented classes to be at least bytecode version 51 (Java 7).
This is needed in order to be able to use the invokedynamic instruction.
This requires re-computation of stack map frames which makes instrumentation a bit slower.
We don’t anticipate notable slowdowns unless you extensively (over-)use trace_methods.
-
Early Java 7 versions, prior to update 60, are not supported anymore. When trying to attach to a non-supported version, the agent will disable itself and not apply any instrumentations.
-
Experimental support for runtime attachment now also for OSGi containers, JBoss, and WildFly
-
New mitigation of OSGi bootdelegation errors (
NoClassDefFoundError). You can remove anyorg.osgi.framework.bootdelegationrelated configuration. This release also removes the configuration optionboot_delegation_packages. -
Overhaul of the
ExecutorServiceinstrumentation that avoidsClassCastExceptionissues - {pull}1206[#1206] -
Support for
ForkJoinPoolandScheduledExecutorService(see [supported-async-frameworks]) -
Support for
ExecutorService#invokeAnyandExecutorService#invokeAll -
Added support for
java.util.TimerTask- {pull}1235[#1235] -
Add capturing of request body in Elasticsearch queries:
_msearch,_count,_msearch/template,_search/template,_rollup_search- {pull}1222[#1222] -
Add
enabledflag -
Add experimental support for Scala Futures
-
The agent now collects heap memory pools metrics - {pull}1228[#1228]
-
Fixes error capturing for log4j2 loggers. Version 1.17.0 introduced a regression.
-
Fixes
NullPointerExceptionrelated to JAX-RS and Quartz instrumentation - {pull}1249[#1249] -
Expanding k8s pod ID discovery to some formerly non-supported environments
-
When
recordingis set tofalse, the agent will not send captured errors anymore. -
Fixes NPE in Dubbo instrumentation that occurs when the application is acting both as a provider and as a consumer - {pull}1260[#1260]
-
Adding a delay by default what attaching the agent to Tomcat using the premain route to work around the JUL deadlock issue - {pull}1262[#1262]
-
Fixes missing
jboss.as:*MBeans on JBoss - {pull}1257[#1257]
-
Log files are now rotated after they reach [config-log-file-size]. There will always be one history file
${log_file}.1. -
Add [config-log-format-sout] and [config-log-format-file] with the options
PLAIN_TEXTandJSON. The latter uses ecs-logging-java to format the logs. -
Exposing [config-classes-excluded-from-instrumentation] config - {pull}1187[#1187]
-
Add support for naming transactions based on Grails controllers. Supports Grails 3+ - {pull}1171[#1171]
-
Add support for the Apache/Alibaba Dubbo RPC framework
-
Async Profiler version upgraded to 1.7.1, with a new debugging flag for the stack frame recovery mechanism - {pull}1173[#1173]
-
Fixes
IndexOutOfBoundsExceptionthat can occur when profiler-inferred spans are enabled. This also makes the profiler more resilient by just removing the call tree related to the exception (which might be in an invalid state) as opposed to stopping the profiler when an exception occurs. -
Fix
NumberFormatExceptionwhen parsing Ingres/Actian JDBC connection strings - {pull}1198[#1198] -
Prevent agent from overriding JVM configured truststore when not using HTTPS for communication with APM server - {pull}1203[#1203]
-
Fix
java.lang.IllegalStateExceptionwithjpsJVM when using continuous runtime attach - {pull}1205[1205] -
Fix agent trying to load log4j2 plugins from application - {pull}1214[1214]
-
Fix memory leak in gRPC instrumentation plugin - {pull}1196[1196]
-
Fix HTTPS connection failures when agent is configured to use HTTPS to communicate with APM server {pull}1209[1209]
-
The log correlation feature now adds
error.idto the MDC. See [supported-logging-frameworks] for details. - {pull}1050[#1050] -
Deprecating the
incubatingtag in favour of theexperimentaltag. This is not a breaking change, so formerdisable_instrumentationconfiguration containing theincubatingtag will still be respected - {pull}1123[#1123] -
Add a
--without-emulated-attachoption for runtime attachment to allow disabling this feature as a workaround. -
Add workaround for JDK bug JDK-8236039 with TLS 1.3 {pull}1149[#1149]
-
Add log level
OFFto silence agent logging -
Adds
span_min_durationoption to exclude fast executing spans. When set together with one of the more specific thresholds -trace_methods_duration_thresholdorprofiling_inferred_spans_min_duration, the higher threshold will determine which spans will be discarded. -
Automatically instrument quartz jobs from the quartz-jobs artifact {pull}1170[#1170]
-
Perform re-parenting of regular spans to be a child of profiler-inferred spans. Requires APM Server and Kibana 7.8.0. {pull}1117[#1117]
-
Upgrade Async Profiler version to 1.7.0
-
When Servlet-related Exceptions are handled through exception handlers that return a 200 status code, agent shouldn’t override with 500 - {pull}1103[#1103]
-
Exclude Quartz 1 from instrumentation to avoid
IncompatibleClassChangeError: Found class org.quartz.JobExecutionContext, but interface was expected- {pull}1108[#1108] -
Fix breakdown metrics span sub-types {pull}1113[#1113]
-
Fix flaky gRPC server instrumentation {pull}1122[#1122]
-
Fix side effect of calling
Statement.getUpdateCountmore than once {pull}1139[#1139] -
Stop capturing JDBC affected rows count using
Statement.getUpdateCountto prevent unreliable side-effects {pull}1147[#1147] -
Fix OpenTracing error tag handling (set transaction error result when tag value is
true) {pull}1159[#1159] -
Due to a bug in the build we didn’t include the gRPC plugin in the build so far
-
java.lang.ClassNotFoundException: Unable to load class 'jdk.internal…'is thrown when tracing specific versions of Atlassian systems {pull}1168[#1168] -
Make sure spans are kept active during
AsyncHandlermethods in theAsyncHttpClient -
CPU and memory metrics are sometimes not reported properly when using IBM J9 {pull}1148[#1148]
-
NullPointerExceptionthrown by the agent on WebLogic {pull}1142[#1142]
-
Ordering of configuration sources has slightly changed, please review [configuration]:
-
elasticapm.propertiesfile now has higher priority over java system properties and environment variables,
This change allows to change dynamic options values at runtime by editing file, previously values set in java properties or environment variables could not be overridden, even if they were dynamic.
-
-
Renamed some configuration options related to the experimental profiler-inferred spans feature ({pull}1084[#1084]):
-
profiling_spans_enabled→profiling_inferred_spans_enabled -
profiling_sampling_interval→profiling_inferred_spans_sampling_interval -
profiling_spans_min_duration→profiling_inferred_spans_min_duration -
profiling_included_classes→profiling_inferred_spans_included_classes -
profiling_excluded_classes→profiling_inferred_spans_excluded_classes -
Removed
profiling_intervalandprofiling_duration(both are fixed to 5s now)
-
-
Gracefully abort agent init when running on a known Java 8 buggy JVM {pull}1075[#1075].
-
Add support for Redis Redisson client
-
Makes [config-instrument], [config-trace-methods], and [config-disable-instrumentations] dynamic. Note that changing these values at runtime can slow down the application temporarily.
-
Do not instrument Servlet API before 3.0 {pull}1077[#1077]
-
Add support for API keys for apm backend authentication {pull}1083[#1083]
-
Add support for gRPC client & server instrumentation {pull}1019[#1019]
-
Deprecating
activeconfiguration option in favor ofrecording. Settingactivestill works as it’s now an alias forrecording.
-
When JAX-RS-annotated method delegates to another JAX-RS-annotated method, transaction name should include method A - {pull}1062[#1062]
-
Fixed bug that prevented an APM Error from being created when calling
org.slf4j.Logger#error- {pull}1049[#1049] -
Wrong address in JDBC spans for Oracle, MySQL and MariaDB when multiple hosts are configured - {pull}1082[#1082]
-
Document and re-order configuration priorities {pull}1087[#1087]
-
Improve heuristic for
service_namewhen not set through config {pull}1097[#1097]
-
Support for the official W3C
traceparentandtracestateheaders.
The agent now accepts both theelastic-apm-traceparentand the officialtraceparentheader. By default, it sends both headers on outgoing requests, unlessuse_elastic_traceparent_headeris set to false. -
Creating spans for slow methods with the help of the sampling profiler async-profiler. This is a low-overhead way of seeing which methods make your transactions slow and a replacement for the
trace_methodsconfiguration option. See [supported-java-methods] for more details -
Adding a Circuit Breaker to pause the agent when stress is detected on the system and resume when the stress is relieved. See [circuit-breaker] and {pull}1040[#1040] for more info.
-
Span#captureExceptionandTransaction#captureExceptionin public API return reported error id - {pull}1015[#1015]
-
java.lang.IllegalStateException: Cannot resolve type description for <com.another.commercial.apm.agent.Class> - {pull}1037[#1037]
-
properly handle
java.sql.SQLExceptionfor unsupported JDBC features {pull}[#1035] #1025
-
Add support for Redis Lettuce client
-
Add
context.message.age.msfield for JMS message receiving spans and transactions - {pull}970[#970] -
Instrument log4j2 Logger#error(String, Throwable) ({pull}919[#919]) Automatically captures exceptions when calling
logger.error("message", exception) -
Add instrumentation for external process execution through
java.lang.Processand Apachecommons-exec- {pull}903[#903] -
Add
destinationfields to exit span contexts - {pull}976[#976] -
Removed
context.message.topic.namefield - {pull}993[#993] -
Add support for Kafka clients - {pull}981[#981]
-
Add support for binary
traceparentheader format (see the spec for more details) - {pull}1009[#1009] -
Add support for log correlation for log4j and log4j2, even when not used in combination with slf4j. See [supported-logging-frameworks] for details.
-
Fix parsing value of
trace_methodsconfiguration property {pull}930[#930] -
Workaround for
java.util.loggingdeadlock {pull}965[#965] -
JMS should propagate traceparent header when transactions are not sampled {pull}999[#999]
-
Spans are not closed if JDBC implementation does not support
getUpdateCount{pull}1008[#1008]
-
JMS Enhancements {pull}911[#911]:
-
Add special handling for temporary queues/topics
-
Capture message bodies of text Messages
-
Rely on the existing
ELASTIC_APM_CAPTURE_BODYagent config option (off by default). -
Send as
context.message.body -
Limit size to 10000 characters. If longer than this size, trim to 9999 and append with ellipsis
-
-
Introduce the
ignore_message_queuesconfiguration to disable instrumentation (message tagging) for specific queues/topics as suggested in {pull}710[#710] -
Capture predefined message headers and all properties
-
Rely on the existing
ELASTIC_APM_CAPTURE_HEADERSagent config option. -
Send as
context.message.headers -
Sanitize sensitive headers/properties based on the
sanitize_field_namesconfig option
-
-
-
Added support for the MongoDB sync driver. See supported data stores.
-
JDBC regression-
PreparedStatement#executeUpdate()andPreparedStatement#executeLargeUpdate()are not traced {pull}918[#918] -
When systemd cgroup driver is used, the discovered Kubernetes pod UID contains "_" instead of "-" {pull}920[#920]
-
DB2 jcc4 driver is not traced properly {pull}926[#926]
-
Add the ability to configure a unique name for a JVM within a service through the
service_node_nameconfig option] -
Add ability to ignore some exceptions to be reported as errors ignore_exceptions
-
Applying new logic for JMS
javax.jms.MessageConsumer#receiveso that, instead of the transaction created for the polling method itself (ie fromreceivestart to end), the agent will create a transaction attempting to capture the code executed during actual message handling. This logic is suitable for environments where polling APIs are invoked within dedicated polling threads. This polling transaction creation strategy can be reversed through a configuration option (message_polling_transaction_strategy) that is not exposed in the properties file by default. -
Send IP obtained through
javax.servlet.ServletRequest#getRemoteAddr()incontext.request.socket.remote_addressinstead of parsing from headers {pull}889[#889] -
Added
ElasticApmAttacher.attach(String propertiesLocation)to specify a custom properties location -
Logs message when
transaction_max_spanshas been exceeded {pull}849[#849] -
Report the number of affected rows by a SQL statement (UPDATE,DELETE,INSERT) in 'affected_rows' span attribute {pull}707[#707]
-
Add
@Tracedannotation which either creates a span or a transaction, depending on the context -
Report JMS destination as a span/transaction context field {pull}906[#906]
-
Added
capture_jmx_metricsconfiguration option
-
JMS creates polling transactions even when the API invocations return without a message
-
Support registering MBeans which are added after agent startup
-
Add ability to manually specify reported hostname
-
Add support for Redis Jedis client
-
Add support for identifying target JVM to attach apm agent to using JVM property. See also the documentation of the
--includeand--excludeflags -
Added
capture_jmx_metricsconfiguration option -
Improve servlet error capture {pull}812[#812] Among others, now also takes Spring MVC `@ExceptionHandler`s into account
-
Instrument Logger#error(String, Throwable) {pull}821[#821] Automatically captures exceptions when calling
logger.error("message", exception) -
Easier log correlation with https://github.com/elastic/java-ecs-logging. See docs.
-
Avoid creating a temp agent file for each attachment {pull}859[#859]
-
Instrument
View#renderinstead ofDispatcherServlet#render{pull}829[#829] This makes the transaction breakdown graph more useful. Instead ofdispatcher-servlet, the graph now shows a type which is based on the view name, for example,FreeMarkerorThymeleaf.
-
Error in log when setting server_urls to an empty string -
co.elastic.apm.agent.configuration.ApmServerConfigurationSource - Expected previousException not to be null -
Avoid terminating the TCP connection to APM Server when polling for configuration updates {pull}823[#823]
-
Upgrading supported OpenTracing version from 0.31 to 0.33
-
Added annotation and meta-annotation matching support for
trace_methods, for example:-
public @java.inject.* org.example.*(for annotation) -
public @@javax.enterprise.context.NormalScope org.example.*(for meta-annotation)
-
-
The runtime attachment now also works when the
tools.jaror thejdk.attachmodule is not available. This means you don’t need a full JDK installation - the JRE is sufficient. This makes the runtime attachment work in more environments such as minimal Docker containers. Note that the runtime attachment currently does not work for OSGi containers like those used in many application servers such as JBoss and WildFly. See the documentation for more information. -
Support for Hibernate Search
-
A warning in logs saying APM server is not available when using 1.8 with APM server 6.x. Due to that, agent 1.8.0 will silently ignore non-string labels, even if used with APM server of versions 6.7.x or 6.8.x that support such. If APM server version is <6.7 or 7.0+, this should have no effect. Otherwise, upgrade the Java agent to 1.9.0+.
-
ApacheHttpAsyncClientInstrumentationmatching increases startup time considerably -
Log correlation feature is active when
active==false -
Tomcat’s memory leak prevention mechanism is causing a… memory leak. JDBC statement map is leaking in Tomcat if the application that first used it is undeployed/redeployed. See this related discussion.
-
The
apm-agent-attach.jaris not executable anymore. Useapm-agent-attach-standalone.jarinstead.
-
Added support for tracking time spent by span type. Can be disabled by setting
breakdown_metricstofalse. -
Added support for central configuration. Can be disabled by setting
central_configtofalse. -
Added support for Spring’s JMS flavor - instrumenting
org.springframework.jms.listener.SessionAwareMessageListener -
Added support to legacy ApacheHttpClient APIs (which adds support to Axis2 configured to use ApacheHttpClient)
-
Added support for setting
server_urlsdynamically via properties file {pull}723[#723] -
Added
config_fileoption -
Added option to use
@javax.ws.rs.Pathvalue as transaction nameuse_jaxrs_path_as_transaction_name -
Instrument quartz jobs docs
-
SQL parsing improvements {pull}696[#696]
-
Introduce priorities for transaction name {pull}748[#748]. Now uses the path as transaction name if
use_path_as_transaction_nameis set totruerather thanServletClass#doGet. But if a name can be determined from a high level framework, like Spring MVC, that takes precedence. User-supplied names from the API always take precedence over any others. -
Use JSP path name as transaction name as opposed to the generated servlet class name {pull}751[#751]
-
Some JMS Consumers and Producers are filtered due to class name filtering in instrumentation matching
-
Jetty: When no display name is set and context path is "/" transaction service names will now correctly fall back to configured values
-
JDBC’s
executeBatchis not traced -
Drops non-String labels when connected to APM Server < 6.7 to avoid validation errors {pull}687[#687]
-
Parsing container ID in cloud foundry garden {pull}695[#695]
-
Automatic instrumentation should not override manual results {pull}752[#752]
-
The log correlation feature does not add
span.idto the MDC anymore but onlytrace.idandtransaction.id{pull}742[#742].
-
Added the
trace_methods_duration_thresholdconfig option. When using thetrace_methodsconfig option with wild cards, this enables considerable reduction of overhead by limiting the number of spans captured and reported (see more details in config documentation). NOTE: Using wildcards is still not the recommended approach for thetrace_methodsfeature. -
Add
Transaction#addCustomContext(String key, String|Number|boolean value)to public API -
Added support for AsyncHttpClient 2.x
-
Added
global_labelsconfiguration option. This requires APM Server 7.2+. -
Added basic support for JMS- distributed tracing for basic scenarios of
send,receive,receiveNoWaitandonMessage. Both Queues and Topics are supported. AsyncsendAPIs are not supported in this version. NOTE: This feature is currently marked as "experimental" and is disabled by default. In order to enable, it is required to set thedisable_instrumentationsconfiguration property to an empty string. -
Improved OSGi support: added a configuration option for
bootdelegationpackages {pull}641[#641] -
Better span names for SQL spans. For example,
SELECT FROM userinstead of justSELECT{pull}633[#633]
-
ClassCastException related to async instrumentation of Pilotfish Executor causing thread hang (applied workaround)
-
NullPointerException when computing Servlet transaction name with null HTTP method name
-
FileNotFoundException when trying to find implementation version of jar with encoded URL
-
NullPointerException when closing Apache AsyncHttpClient request producer
-
Fixes loading of
elasticapm.propertiesfor Spring Boot applications -
Fix startup error on WebLogic 12.2.1.2.0 {pull}649[#649]
-
Disable metrics reporting and APM Server health check when active=false {pull}653[#653]
-
Fixes transaction name for non-sampled transactions #581
-
Makes log_file option work again #594
-
Async context propagation fixes
-
Fixes Manifest version reading error to support
jar:fileprotocol #601 -
Fixes transaction name for non-sampled transactions #597
-
Fixes potential classloader deadlock by preloading
FileSystems.getDefault()#603
-
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.countmetric, indicating the number of live threads in the JVM (daemon and non-daemon) -
Added support for WebLogic
-
Added support for Spring
@Scheduledand EJB@Scheduleannotations - #569
-
If you didn’t explicitly set the
service_namepreviously and you are dealing with a servlet-based application (including Spring Boot), yourservice_namewill change. See the documentation forservice_nameand 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 {pull}497[497]. This change also renames
tagtolabelon 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 underlabelsin Elasticsearch. Previously, they were stored undercontext.tags. -
Support async queries made by Elasticsearch REST client
-
Added
setStartTimestamp(long epochMicros)andend(long epochMicros)API methods toSpanandTransaction, allowing to set custom start and end timestamps. -
Auto-detection of the
service_namebased on the<display-name>element of theweb.xmlwith a fallback to the servlet context path. If you are using a spring-based application, the agent will use the setting forspring.application.namefor itsservice_name. See the documentation forservice_namefor more information. Note: this requires APM Server 7.0+. If using previous versions, nothing will change. -
Previously, enabling
capture_bodycould only capture form parameters. Now it supports all UTF-8 encoded plain-text content types. The optioncapture_body_content_typescontrols which `Content-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"));
-
-
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_methodsconfiguration now allows to omit the method matcher. Example:com.example.*traces all classes and methods within thecom.examplepackage 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_metricswhich disables the collection of metrics via a wildcard expression. -
Support for HttpUrlConnection
-
Adds
subtypeandactionto 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.createSpanandSpan.setTypeare deprecated starting this version. Instead, type-less spans can be created using the newSpan.startSpanAPI 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
@WebServiceclasses and@WebMethodmethods.
-
Fixes a failure in BitBucket when agent deployed #349
-
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
nullfor metrics that have a NaN value -
Fixes JVM crash with Java 7 #458
-
Fixes an application deployment failure when using EclipseLink and
trace_methodsconfiguration #474
-
The agent now collects system and JVM metrics #360
-
Add API methods
ElasticApm#startTransactionWithRemoteParentandSpan#injectTraceHeadersto allow for manual context propagation #396. -
Added
trace_methodsconfiguration option which lets you define which methods in your project or 3rd party libraries should be traced. To create spans for allpublicmethods of classes whose name ends inServicewhich are in a sub-package oforg.example.servicesuse 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 program 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
-
Support async API’s used with AsyncContext.start #388
-
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_headersconfiguration option. Set tofalseto 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,setUserandsetResultfluent, 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
-
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.hostnameandsystem.platformorder sent to APM server
-
Fixes NoSuchMethodError CharBuffer.flip() which occurs when using the Elasticsearch RestClient and Java 7 or 8 {pull}313[#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
@CaptureTransactionand@CaptureSpanannotations which let you declaratively add custom transactions and spans. Note that it is required to configure theapplication_packagesfor 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
*Asyncmethods 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#setResultto the public API {pull}293[#293]
-
Fix for situations where status code is reported as
200, even though it actually was500{pull}225[#225] -
Capturing the username now properly works when using Spring security {pull}183[#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. -
Wildcard patterns are case insensitive by default. Prepend
(?-i)to make the matching case sensitive.
-
Support for Distributed Tracing
-
Adds
@CaptureTransactionand@CaptureSpanannotations which let you declaratively add custom transactions and spans. Note that it is required to configure theapplication_packagesfor 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
*Asyncmethods 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 {pull}261[#261]
-
Support for JAX-RS annotations. Transactions are named based on your resources (
ResourceClass#resourceMethod).
-
Fix for situations where status code is reported as
200, even though it actually was500{pull}225[#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.startTransactionandTransaction#createSpandon’t activate the transaction and spans and are thus not available viaElasticApm.activeTransactionandElasticApm.activeSpan.
-
Public API
-
Add
Span#captureExceptionandTransaction#captureExceptionto public API.ElasticApm.captureExceptionis deprecated now. UseElasticApm.currentSpan().captureException(exception)instead. -
Added
Transaction.getIdandSpan.getIdmethods
-
-
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_nameandurl_groups, which allow to use the URL path as the transaction name. As that could contain path parameters, like/user/$userIdhowever, You can set theurl_groupsoption 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,sandm) 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_urlhas been renamed toserver_urlsto reflect this change. However,server_urlstill works for backwards compatibility. -
The configuration option
service_nameis 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_nameexplicitly. 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.