Improvements
Java 13
The New Relic Java agent is now fully compatible with version 13 of the OpenJDK and Hotspot JDKs.
Bug fixes
- Calls to NewRelic.getAgent().getTracedMethod().addOutboundRequestHeaders() will no longer throw an exception if a traced method has started but a transaction has not. This could happen by calling this in a method annotated with
@Trace(async=true)
before a token is linked. - Updates Guava to the newest release.
- NoClassDefFoundError would occur in agent logs when a spring controller is used without a root level RequestMapping annotation.
- The gc_time metric, which was enabled by default in version 5.2.0, has now been disabled by default since its results are often misleading.
New APIs
- Added getTraceMetadata(). This provides information about the currently executing trace, including the trace and span ids as well as it’s sampled state
- getTraceId(), which provides the currently executing trace’s identifier from the
TraceMetadata
. - getSpanId(), which provides the span identifier associated with the currently executing span from the
TraceMetadata
. - isSampled(), returns whether or not the current transaction is part of a sampled distributed trace from the
TraceMetadata
. - Added getLinkingMetadata(), which provides an opaque map of key/value pairs that can be used to correlate this application in the New Relic backend.
Fixes
- Spring Webflux WebClient would not track external calls when constructed with
baseUrl(String baseUrl)
- The
NewRelic.getAgent().getConfig().getValue()
api would not check configuration values set via environment variables - The agent’s completable-future instrumentation could hold a reference to
Token
s after they were expired, which could cause excessive memory usage. - Error traces could report to the wrong application when
auto_app_naming
is enabled and there were errors from two different application names getting reported during the same harvest - The agent’s MongoDB instrumentation would instrument the same builder used by the async and reactive-streams drivers, resulting in excessive memory usage and incorrect transaction times. Note: The agent will no longer instrument the sync MongoDB driver if the async and/or reactive-streams drivers are on the application’s
classpath
.
New features
Support for Real Time Streaming
- Event data is now sent to New Relic every five seconds, instead of every minute. As a result, transaction, error, and custom events will now be available in New Relic dashboards in near real time. For more information on how to view your events with a five-second refresh, see the real time streaming documentation.
- Note that the overall limits on how many events can be sent per minute have not changed. Also, span events, metrics, and trace data is unaffected, and will still be sent every minute.
Improvements
- The Java agent now uses persistent connections when connecting to New Relic, reducing overhead.
Notes
- x-ray and any x-ray related attributes and identifiers will no longer be available in this version of the java agent. The New Relic x-ray feature reached end-of-life on April 17, 2019
Improvements
- OkHttp This release adds support for OkHttp 4.0. You will now see OkHttp calls as external calls in New Relic.
- Agent configuration settings set via environment variables will be available on the Environment page.
- Improves performance of the Java agent.
Fixes
- Transaction Traces would occasionally miss segments when using the spring @Async annotation with servlets.
- Jax-RS instrumentation was not starting transactions.
- A potential race condition during agent startup that would manifest as a NoClassDefFoundError for internal New Relic classes.
- Akka-http instrumentation would attempt multiple retransforms of the same class.
- The noticeError API would drop custom attributes that weren't of type String, Number, or Boolean, such as an Enum or other custom types.
Improvements
gRPC
The Java agent now has support for gRPC version 1.22
Dragonwell JDK
The Java agent now fully supports Alibaba's Dragonwell JDK
Azul Zing
The Java agent now supports Azul's Zing JVM
Enables ability to migrate to Configurable Security Policies (CSP) on a per agent basis for accounts already using High-security mode (HSM.
When both HSM and CSP are enabled for an account, an agent (this version or later) can successfully connect with either high_security: true or the appropriate security_policies_token configured.
Fixes
- LinkageError for applications using both OpenJ9 and Log4J log manager
- ClassNotFoundException for applications that specify a Log4j ContextSelector via the -DLog4jContextSelector system property
- Akka-http instrumentation would name transactions incorrectly when using an asynchronous onComplete callback to match routes
- The agent’s JaxRS instrumentation did not apply to cases where a concrete class implements the same method from two different interfaces
- The agent would not report JMX metrics when one or more composite attributes were null
- Race condition that could throw a NullPointerException in the agent log during class transformation
- Akka-http path matching instrumentation could produce NullPointerExceptions when using a "repeat" path segment with no values. Transactions that pass some values will report as-is, but transactions that pass no values will be reported with a different segment in the metric name: "().repeat()"
- ignore_status_codes system property was not getting applied correctly
Improvements
MongoDB
This release adds instrumentation for mongo-java-driver clients created using the MongoClients class Previous versions of the agent only supported the MongoClient() constructor Note: The MongoDB Asynchronous Java Drivers are not yet supported.
Custom request header attributes
The Java agent now provides a new configuration option to report HTTP request header(s) as transaction attributes. See the documentation for more details.
Distributed tracing
Datastore span events now include a db.collection attribute. This field represents the collection or primary table name for the associated query. It is accessible in Insights, Distributed Tracing, and anywhere you get your favorite spans.
GC Time
The Java agent now records time spent waiting for garbage collection during the duration of a transaction and includes the GC time on the corresponding transaction trace as well as the transactions time chart.
This setting is configurable as follows in the newrelic.yml:
transaction_tracer: gc_time_enabled: true
Fixes
- Fixes an issue where very long-running transactions with a large number of segments would cause an excessive amount of memory usage. The agent will no longer trace segments once the segment_limit has been reached.
Notes
- The Java agent now enforces a maximum of 10,000 transaction events per minute.
Fixes
- gRPC
This release fixes two bugs in the Java agent's gRPC instrumentation. We highly recommend customers using gRPC instrumentation to upgrade to this and or later agent versions.
- References to transaction segments were not being removed correctly, which can cause a memory leak
- The agent could cause the gRPC server listeners to fail to execute its
completed
and/orcancelled
methods, which can cause unexpected behavior
Improvements
JAX-RS
This release adds support for @PATCH JAX-RS annotation. The agent will create and name transactions based @PATCH annotations.
Fixes
- Fixes an issue in the Scala instrumentation that would cause an
Java.lang.IllegalArgumentException:
to be thrown when the Lightbend Cinnamon agent is in use. - Fixes an issue where Cross Application Tracing headers were incorrectly parsed when Distributed Tracing is enabled. Applications that use both Distributed Tracing and Cross Application Tracing will no longer report external transaction breakdown metrics.
- Fixes an issue where the agent’s Kafka instrumentation would report WakeupExceptions as errors in New Relic. These exceptions will no longer be reported.
- Fixes a Log4J ClassCastException for applications running on the IBM J9 JVM that set a custom logging manager via the
-Djava.util.logging.manager
system parameter. - The agent now supports using the thread profiler when the send_environment_info configuration is disabled.
Notes
- The agent now sends data to New Relic using gzip compression by default. To use the previous compression set the
compressed_content_encoding
configuration value todeflate
- The jdbc-resultset instrumentation is now disabled by default in the newrelic.yml and will be disabled by default in all future releases.
Known Issues
Fixed in 5.1.1
- gRPC
This release contains two bugs in the Java agent's gRPC instrumentation. We highly recommend customers using gRPC instrumentation to upgrade to this and or later agent versions.
- References to transaction segments were not being removed correctly, which can cause a memory leak
- The agent could cause the gRPC server listeners to fail to execute its
completed
and/orcancelled
methods, which can cause unexpected behavior
Improvements
gRPC
The Java agent now supports gRPC. You will now see transactions, errors, external calls, and distributed traces for all of your gRPC-based clients and services.
Vert.x-3.7
The Java agent now supports Vert.x 3.7. The agent instruments Vert.x Web, Vert.x Core, and Vert.x HTTP client. With this instrumentation, the agent will identify and name your transactions based on Vert.x web routing paths. The agent will also time web handlers, track async handlers, and external calls made with Vert.x HTTP client.
OkHttp 3.14.0
This release adds support for OkHttp 3.14.x. You will now see OkHttp 3.14 calls as external calls in New Relic.
spray-can
The Java agent now supports the spray-can client. The agent will now capture outbound http calls made with the spray-can client and report them as external calls and/or distributed traces.
Embedded Derby 10.15.1.3
The Java agent has expanded support for Derby JDBC up to and including version 10.15.1.3.
JVM monitoring
The Java agent now reports JMX stats for off-heap direct byte buffers. These metrics are available via the JVM page
recordCustomEvent API
The recordCustomEvent API has been updated to accept Map<String,?> as a second parameter instead of Map<String,Object>, allowing maps such as Map<String,String> to be passed without having to cast the type of the map's value.
Fixes
- The agent no longer requires a newrelic.yml even when the
app_name
andlicense_key
configuration options are set via environment variables and/or system properties. For more information, see the Java environment variables documentation. - HttpSessions JMX metrics were not reporting for Websphere Liberty Profile applications.
- The
transaction_events.max_samples_stored
configuration value in thenewrelic.yml
would incorrectly override the system properties or environment variable values. - Applications running on WildFly 12 - 15 would fail start with
NoClassDefFound
errors for Java agent classes. - Play applications where external calls inside of future callbacks using
async-http-client
would not be recorded. - Setting
log_limit_in_kbytes
would result in the agent not logging to the agent log file iflog_file_count
was also set to less than 2. - Webflux status codes which were not recognized by Spring Webflux caused a 500 status code to be returned and an exception in application logs.
Known Issues
gRPC: Fixed in 5.1.1
This release contains two bugs in the Java agent's gRPC instrumentation. We highly recommend customers using gRPC instrumentation to upgrade to this and/or later agent versions.
- References to transaction segments were not being removed correctly, which can cause a memory leak.
- The agent could cause the gRPC server listeners to fail to execute its
completed
and/orcancelled
methods, which can cause unexpected behavior.
Deprecation Notes
Self installer
The New Relic Java agent's self-installer has been removed in order to provide a more consistent user experience. To install the Java agent, add the full path to the newrelic.jar
to the -javaagent
flag in your JVM options. For more information on installing the agent on specific application servers, Docker, Maven, or Gradle, see the JVM argument documentation.
Deprecated instrumentation
The following instrumentation modules have been moved out of the default Java agent, and are now provided as a separate download. To continue using these modules, just add them to the agent's extensions directory in your newrelic
folder or wherever your extensions directory is configured.
- Akka 2.0
- Akka 2.1
- Akka-http 1.0
- Akka-http 2.0 - 2.4.1
- Akka-http 2.4.2 - 2.4.4
- Hystrix 1.2
- Hystrix 1.3
- Play 1 (instrumentation for Play-1.x is not available as an extension.)
- Play 2.0
- Play 2.1
- Play 2.2
- Solr 3.1 - 3.4
- Solr 3.5
- Solr 3.6
Fixes
- Fixed an issue where an exception would be thrown during agent initialization which caused the application to shut down when the log file is not writable. In previous agent versions there was an undocumented behavior where the agent would log to STDOUT instead.
- Fixed a regression where a NullPointerException would be logged and instrumentation would not be applied when using an XML extension with comments preceding the instrumentation section.
- Fixed issue where setting the
log_limit_in_kbytes
greater than 0 andlog_file_count
equal to 1 would result in the agent not logging to the agent log file.