Supported technologiesedit
The Elastic APM Java Agent automatically instruments various APIs, frameworks and application servers. This section lists all supported technologies.
If your favorite technology is not supported yet, you can vote for it by participating in our survey. We will use the results to add support for the most requested technologies.
Another option is to add a dependency to the agent’s public API in order to programmatically create custom transactions and spans.
If you want to extend the auto-instrumentation capabilities of the agent, the contributing guide should get you started.
If, for example, the HTTP client library of your choice is not listed, it means that there won’t be spans for those outgoing HTTP requests. If the web framework you are using is not supported, the agent does not capture transactions.
Java versionsedit
Vendor | Supported versions | Notes |
---|---|---|
Oracle JDK |
7u60+, 8u40+, 9, 10, 11 |
|
Open JDK |
7u60+, 8u40+, 9, 10, 11 |
|
IBM J9 VM |
8 service refresh 5+ (build 2.8) |
|
HP-UX JVM |
7.0.10+, 8.0.02+ |
Early Java 8 versions before update 40 are not supported because they have several bugs that might result in JVM crashes when a java agent is active, thus agent will not start on those versions. Similarly, Java 7 versions before update 60 are not supported as they are buggy in regard to invokedynamic.
Here is an example of the message displayed when this happens.
Failed to start agent - JVM version not supported: 1.8.0_31 Java HotSpot(TM) 64-Bit Server VM 25.31-b07. To override Java version verification, set the 'elastic.apm.disable_bootstrap_checks' System property to 'true'.
As this message states, you can disable this check if required by adding -Delastic.apm.disable_bootstrap_checks
to
the JVM arguments.
Web Frameworksedit
Framework | Supported versions | Description | Since |
---|---|---|---|
Servlet API |
3+ |
A transaction will be created for all incoming HTTP requests to your Servlet API-based application.
Starting in version 1.18.0, additional spans are created if the servlet dispatches execution to another servlet through the |
1.0.0 |
Spring Web MVC |
4.x, 5.x |
If you are using Spring MVC (for example with Spring Boot),
the transactions are named based on your controllers ( |
1.0.0 |
JavaServer Faces |
2.2.x, 2.3.x |
If you are using JSF, transactions are named based on the requested Facelets and spans are captured for visibility into execution and rendering |
1.0.0 |
Spring Boot |
1.5+, 2.x |
Supports embedded Tomcat, Jetty and Undertow |
1.0.0 |
JAX-RS |
2.x |
The transactions are named based on your resources ( Note: JAX-RS is only supported when running on a supported Application Server/Servlet Container. |
1.0.0 |
JAX-WS |
The transactions are named based on your Note: JAX-WS is only supported when running on a supported Application Server/Servlet Container and when using the HTTP binding. |
1.4.0 |
|
Grails |
3+ |
1.17.0 |
Application Servers/Servlet Containersedit
The Elastic APM Java agent has generic support for the Servlet API 3+. However, some servers require special handling. The servers listed here are tested by an integration test suite to make sure Elastic APM is compatible with them. Other Servlet 3+ compliant servers will most likely work as well.
Server | Supported versions |
---|---|
7.x, 8.5.x, 9.x |
|
8-16 |
|
6.4, 7.0, 7.1, 7.2 |
|
Jetty (only the |
9.2, 9.3, 9.4 |
8.5.5, 18.0.x |
|
1.4 |
|
4.x, 5.x |
|
12.2 |
Data Storesedit
Database | Supported versions | Description | Since |
---|---|---|---|
JDBC |
4.1+ |
The agent automatically creates DB spans for all your JDBC queries. This includes JDBC queries executed by O/R mappers like Hibernate. Note: Make sure that your JDBC driver is at least compiled for Java 1.4. Drivers compiled with a lower version are not supported. IBM DB2 db2jcc drivers are also not supported. Please update to db2jcc4. |
1.0.0 |
Elasticsearch |
5.0.2+ |
The agent automatically creates Elasticsearch spans for queries done through the official REST client. |
1.0.0, async queries since 1.5.0 |
Hibernate Search |
5.x (on by default), 6.x (off by default) |
The agent automatically creates Hibernate Search spans for queries done through the Hibernate Search API. Note: this feature is marked as experimental for version 6.x, which means it is off by default. In order to enable,
set the |
1.9.0 |
Redis Jedis |
1.4.0-3.x |
The agent creates spans for interactions with the Jedis client. |
1.10.0 |
Redis Lettuce |
3.4+ |
The agent creates spans for interactions with the Lettuce client. |
1.13.0 |
Redis Redisson |
2.1.5+ |
The agent creates spans for interactions with the Redisson client. |
1.15.0 |
MongoDB driver |
3.x |
The agent creates spans for interactions with the MongoDB driver. At the moment, only the synchronous driver (mongo-java-driver) is supported. The asynchronous and reactive drivers are currently not supported. The name of the span is |
1.12.0 |
Networking frameworksedit
Distributed tracing will only work if you are using one of the supported networking frameworks.
For the supported HTTP libraries, the agent automatically creates spans for outgoing HTTP requests and propagates tracing headers.
The spans are named after the schema <method> <host>
, for example GET elastic.co
.
Framework | Supported versions | Note | Since |
---|---|---|---|
Apache HttpClient |
4.3+ |
0.7.0 |
|
Apache HttpAsyncClient |
4.0+ |
1.6.0 |
|
Spring RestTemplate |
3.1.1+ |
0.7.0 |
|
OkHttp |
2, 3 |
1.4.0 (synchronous calls via |
|
HttpUrlConnection |
1.4.0 |
||
JAX-WS client |
JAX-WS clients created via |
1.4.0 |
|
AsyncHttpClient |
2.x |
1.7.0 |
|
Apache Dubbo |
2.5+, except for 2.7.0, 2.7.1, and 2.7.2 |
This is an experimental plugin. Remove |
1.17.0 |
JDK 11 HttpClient |
1.18.0 |
Asynchronous frameworksedit
When a Span is created in a different Thread than its parent, the trace context has to be propagated onto this thread.
This section lists all supported asynchronous frameworks.
Framework | Supported versions | Description | Since |
---|---|---|---|
|
The agent propagates the context for |
1.4.0 |
|
|
The agent propagates the context for |
1.17.0 |
|
|
The agent propagates the context for |
1.17.0 |
|
Scala Future |
2.13.x |
The agent propagates the context when using the NOTE: To enable Scala Future support, you need to enable experimental plugins. |
1.18.0 |
Messaging frameworksedit
When using a messaging framework, sender context is propagated so that receiver events are correlated to the same trace.
Framework | Supported versions | Description | Since |
---|---|---|---|
JMS |
1.1, 2.0 |
The agent captures JMS sends and receives as spans/transactions. In addition, it propagates the context when using
|
Enabled by default since 1.13.0, added as an experimental plugin in 1.7.0 |
Kafka |
<0.11.0 - without distributed tracing; 0.11.0+ - full support |
The agent captures Kafka record sends and polls. If |
1.13.0 |
RabbitMQ |
3.x - 5.x |
The agent captures RabbitMQ Message sends, consumption and polling. When the producer sends a message within a traced transaction, a send span will be created and the transaction resulting from the message consumption will be correlated to the same trace. When a message is consumed, a transaction is created, regardless if the send action is traced. When a message is polled, a span is created for the polling operation and optionally have message fields if a message has been returned. |
1.20.0 |
For RabbitMQ:
-
context.message.queue.name
field will contain queue name when using polling, exchange name otherwise. -
context.message.destination.resource
field will containrabbitmq/XXX
whereXXX
is exchange name.
Some exchange/queue names are normalized in order to keep low cardinality and user-friendlyness
- default exchange is indicated with <default>
.
- null
exchange is normalized to <unknown>
, for example when polling without a message.
- generated queues whose name start with amq.gen-
are normalized to amq.gen-*
.
Scheduling frameworksedit
When using a scheduling framework a transaction for every execution will be created.
Framework | Supported versions | Description | Since |
---|---|---|---|
Scheduling Annotation |
The agent instruments any method defined in a package configured in |
1.6.0 |
|
Quartz |
2.0+ |
The agent instruments the NOTE: only classes from the quartz-jobs dependency will be instrumented automatically. For the instrumentation of other jobs the package must be added to the |
1.8.0 |
TimerTask |
The agent instruments the |
1.18.0 |
Logging frameworksedit
Framework | Supported versions | Description | Since |
---|---|---|---|
slf4j |
1.4.1+ |
When Automatically captures exceptions for |
1.0.0, 1.10.0 (error capturing) |
log4j2 |
2.0+ |
When Automatically captures exceptions for |
1.13.0 |
log4j |
1.x |
When |
1.13.0 |
Process frameworksedit
Framework | Supported versions | Description | Since |
---|---|---|---|
|
Instruments |
1.13.0 |
|
Apache commons-exec |
1.3 |
Async process support through |
1.13.0 |
RPC frameworksedit
Framework | Supported versions | Description | Since |
---|---|---|---|
gRPC |
1.6.1+ |
Client (synchronous & asynchronous) & Server instrumentation. Streaming calls are currently not instrumented. |
1.16.0 |
Java method monitoringedit
If you are seeing gaps in the span timeline and want to include additional methods, there are several options. See How to find slow methods for more information.
Metricsedit
Framework | Description | Since |
---|---|---|
Built-in metrics |
The agent sends various system, JVM, and application metrics. See the metrics documentation. |
1.3.0 |
JMX |
Set the configuration option |
1.11.0 |
Micrometer (beta) |
Automatically detects and reports the metrics of each |
1.18.0 |
Caveatsedit
- Other JVM languages, like Scala, Kotlin and Groovy have not been tested yet.
-
The agent does currently not support running on JVMs with an enabled
SecurityManager
. You may see exceptions like this:java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getProtectionDomain")
. Try to grantjava.security.AllPermission
to the agent.