1.27.0 - YYYY/MM/DDedit

Potentially breaking changesedit
  • transaction_ignore_urls now relies on full request URL path - #2146

    • On a typical application server like Tomcat, deploying an app.war application to the non-ROOT context makes it accessible with http://localhost:8080/app/
    • Ignoring the whole webapp through /app/* was not possible until now.
    • Existing configuration may need to be updated to include the deployment context, thus for example /static/*.js used to exclude known static files in all applications might be changed to /app/static/*.js or */static/*.js.
    • It only impacts prefix patterns due to the additional context path in pattern.
    • It does not impact deployment within the ROOT context like Spring-boot which do not have such context path prefix.
  • The metrics transaction.duration.sum.us, transaction.duration.count and transaciton.breakdown.count are no longer recorded - #2194
  • Automatic hostname discovery mechanism had changed, so the resulted host.name and host.hostname in events reported by the agent may be different. This was done in order to improve the integration with host metrics in the APM UI.
  • Improved capturing of logged exceptions when using Log4j2 - #2139
  • Update to async-profiler 1.8.7 and set configured safemode at load time though a new system property - #2165
  • Added support to capture context.message.routing-key in rabbitmq, spring amqp instrumentations - #1767
Performance improvementsedit
  • Disable compression when sending data to a local APM Server
Bug fixesedit
  • Fix k8s metadata discovery for containerd-cri envs - #2126
  • Fixing/reducing startup delays related to ensureInstrumented - #2150
  • Fix runtime attach when bytebuddy is in application classpath - #2116
  • Fix failed integration between agent traces and host metrics coming from Beats/Elastic-Agent due to incorrect hostname discovery - #2205
  • Loading the agent from an isolated class loader - #2109
  • Refactorings in the apm-agent-plugin-sdk that may imply breaking changes for beta users of the external plugin mechanism

    • WeakMapSupplier.createMap() is now WeakConcurrent.buildMap() and contains more builders - #2136
    • GlobalThreadLocal has been removed in favor of DetachedThreadLocal. To make it global, use GlobalVariables - #2136
    • DynamicTransformer.Accessor.get().ensureInstrumented is now DynamicTransformer.ensureInstrumented - #2164
    • The @AssignTo.* annotations have been removed. Use the @Advice.AssignReturned.* annotations that come with the latest version of Byte Buddy. If your plugin uses the old annotations, it will be skipped. #2171
  • Switching last instrumentations (trace_methods, sparkjava, JDK HttpServer and Struts 2) to TracerAwareInstrumentation - #2170
  • Replace concurrency plugin maps to SpanConcurrentHashMap ones - #2173
  • Align User-Agent HTTP header with other APM agents - #2177