---
title: Java OpenTelemetry instrumentation
description: This tutorial demonstrates how to instrument your Java applications to capture OpenTelemetry traces and send them to Coralogix.OpenTelemetry-Java automatic instrumentation is the most efficient method for adding instrumentation to Java applications. Requiring minimal modifications to the code, it uses a Java agent that can be attached to any Java 8+ application and dynamically injects bytecode to capture telemetry from a number of popular libraries and frameworks.
url: https://coralogix.com/docs/opentelemetry/instrumentation-options/java-opentelemetry-instrumentation/
product: apm
feature: OTel Agent
feature_id: apm-otel-agent
feature_identifier: apm/apm-otel-agent
last_updated: '2026-11-12'
---

# Java

This tutorial demonstrates how to instrument your Java applications to capture [OpenTelemetry](https://coralogix.com/docs/opentelemetry/getting-started.md) traces and send them to Coralogix.

OpenTelemetry-Java automatic instrumentation is the most efficient method for adding instrumentation to Java applications. Requiring minimal modifications to the code, it uses a Java agent that can be attached to any **Java 8+** application and dynamically injects bytecode to capture telemetry from several popular libraries and frameworks.

Send JVM runtime metrics

With the OpenTelemetry Java agent attached, the same setup can also report JVM runtime metrics, heap, garbage collection, threads, CPU, and class loading. See [Send JVM metrics](https://coralogix.com/docs/user-guides/apm/features/runtime-metrics/send-jvm-metrics.md) to enable the metrics exporter, then view the data in the [Runtime metrics](https://coralogix.com/docs/user-guides/apm/features/runtime-metrics.md) tab in Service Catalog.

## Installation

The instructions below conform to the [latest](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest) OpenTelemetry Java Auto Instrumentation, currently Java agent version **`1.22.1`**.

**STEP 1**. Download and distribute the agent JAR.

* Download the [latest OpenTelemetry Java agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar).

* Apply the agent to each service host or container that requires access to it.

* The JVM will require access to the agent to function properly.

**STEP 2**. Update the JVM configuration.

Either of the following options may be used as the template, with the following changes:

* `JAVA_TOOL_OPTIONS`: Replace the path to the java agent JAR and the `coralogix-opentelemetry` JAR files with the file's location downloaded and distributed in **STEP 1** above.

* `OTEL_EXPORTER_OTLP_ENDPOINT`: Choose the <!-- -->ingress.:443<!-- --> endpoint that corresponds to your Coralogix [domain](https://coralogix.com/docs/user-guides/account-management/account-settings/coralogix-domain.md) using the domain selector at the top of the page.

* `OTEL_RESOURCE_ATTRIBUTES`: Specify your Service.Name.

* `OTEL_RESOURCE_ATTRIBUTES`: Specify Your Coralogix [Send-Your-Data API key](https://coralogix.com/docs/user-guides/account-management/api-keys/send-your-data-api-key.md), [application](https://coralogix.com/docs/user-guides/account-management/account-settings/application-and-subsystem-names.md), and [subsystem name](https://coralogix.com/docs/user-guides/account-management/account-settings/application-and-subsystem-names.md).

* Specify 4 RESOURCE\_ATTRIBUTES for application and subsystem:

  * `application.name`: Replace with the name used for the identification of your Coralogix application name

  * `api.name`: Replace with the name used for the identification of your Coralogix subsystem name

  * `cx.application.name`: Replace with the name used for the identification of your Coralogix application name

  * `cx.subsystem.name`: Replace with the name used for the identification of your Coralogix subsystem name

**Option 1** (**recommended**): Leveraging environment variables

* Pass the Configuration parameters as system properties environment variables in the JVM:

```
export JAVA_TOOL_OPTIONS="-javaagent:path/to/opentelemetry-javaagent.jar —Dotel.javaagent.extensions=build/libs/opentelemetry-java-instrumentation-extension-demo-1.0-all.jar"



export OTEL_TRACES_EXPORTER="otlp"

export OTEL_METRICS_EXPORTER="none"

export OTEL_LOGS_EXPORTER="none"

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="grpc"

export OTEL_EXPORTER_OTLP_ENDPOINT="ingress.eu2.coralogix.com:443"

export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CXPrivateKey>"

export OTEL_RESOURCE_ATTRIBUTES=service.name=<ServiceName>,application.name=<CXApplicationName>,api.name=<CXSubsystemName>,cx.application.name=<CXApplicationName>,cx.subsystem.name=<CXSubsystemName>



java -javaagent:</path/to/>opentelemetry-javaagent.jar -jar myapp.jar
```

* View the full range of configuration options [here](https://opentelemetry.io/docs/instrumentation/java/automatic/agent-config/).

**Option 2**: Changing the Java command line

* Enable the instrumentation agent using the `-javaagent` flag to the JVM and pass the Configuration parameters as Java system properties (`-D` flags):

```
java -javaagent:path/to/opentelemetry-javaagent.jar \

	—Dotel.javaagent.extensions=build/libs/opentelemetry-java-instrumentation-extension-demo-1.0-all.jar" \

    -Dotel.traces.exporter=otlp \

    -Dotel.metrics.exporter=none \

    -Dotel.logs.exporter=none \

    -Dotel.exporter.otlp.traces.protocol=grpc \

    -Dotel.exporter.otlp.traces.endpoint="ingress.eu2.coralogix.com:443" \

    -Dotel.exporter.otlp.traces.headers=Authorization=Bearer "<CXPrivateKey>" \

    -Dotel.resource.attributes=service.name=<ServiceName>,application.name=<CXApplicationName>,api.name=<CXSubsystemName>,cx.application.name=<CXApplicationName>,cx.subsystem.name=<CXSubsystemName> \

    -jar myapp.jar
```

## Troubleshooting

Confirm that the instrumentation was installed by looking for the following log lines in your console:

```
[otel.javaagent 2023-02-14 10:40:00:811 +0000] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.21.1
```

| Symptom                                                                      | Cause                                                                                                                                                                                                                                                           | What to do                                                                                                                                                                                                                                                                                                                   |
| ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| The agent logs failed span exports with a timeout to the Coralogix endpoint. | An export request didn't complete within the exporter timeout, 10 seconds by default. Common causes are a proxy or firewall between the application and Coralogix, DNS or network latency, or an endpoint that doesn't match your Coralogix domain or protocol. | Confirm that the application host can reach `OTEL_EXPORTER_OTLP_ENDPOINT` and that the endpoint matches your domain. If the network is slow but reachable, raise `otel.exporter.otlp.timeout`. Application requests aren't delayed; see [Export timeouts and application latency](#export-timeouts-and-application-latency). |
| `db.statement` shows `?` in place of literal values.                         | The agent masks query literals by default.                                                                                                                                                                                                                      | See [Troubleshooting](https://coralogix.com/docs/user-guides/apm/features/database-monitoring.md#troubleshooting) in Databases.                                                                                                                                                                                              |

### Export timeouts and application latency

Export timeouts don't slow down your application's requests. The agent hands each finished span to a batch span processor, which places it in an in-memory queue and returns immediately. A separate background thread sends spans from the queue to Coralogix in batches. Request threads never wait for an export to finish.

While exports keep timing out:

* The background thread retries each failed request, up to 5 attempts with a backoff of 1 to 5 seconds.
* Spans build up in the queue. When the queue is full, the processor drops new spans instead of blocking the application, so traces have gaps in Coralogix.
* Memory use grows by at most the size of a full queue.

To size these trade-offs, use the following settings. Each one also has an environment variable form, for example `OTEL_BSP_MAX_QUEUE_SIZE`.

| Setting                          | Default      | What it controls                                                                       |
| -------------------------------- | ------------ | -------------------------------------------------------------------------------------- |
| `otel.exporter.otlp.timeout`     | `10000` (ms) | How long one export request waits for Coralogix to respond.                            |
| `otel.bsp.max.queue.size`        | `2048`       | How many spans wait in memory before new spans are dropped.                            |
| `otel.bsp.max.export.batch.size` | `512`        | How many spans each export request carries.                                            |
| `otel.bsp.schedule.delay`        | `5000` (ms)  | How long the processor waits between exports.                                          |
| `otel.bsp.export.timeout`        | `30000` (ms) | How long the processor waits for one batch, including retries, before giving up on it. |

## Example

[JPetStore](https://github.com/mybatis/jpetstore-6) 6 is a full web application built on top of MyBatis 3, Spring 5, and Stripes.

**STEP 1**. Install a version of the Java Development Kit. It will not deploy when using only the Java Runtime Environment.

**STEP 2**. [Download](https://www.oracle.com/uk/java/technologies/downloads/#java19) the JDK for your platform.

**STEP 3**. Clone the [jpetstore](https://github.com/kazuki43zoo/mybatis-spring-boot-jpetstore.git) git repo:

```
git clone <https://github.com/kazuki43zoo/mybatis-spring-boot-jpetstore.git>
```

**STEP 4**. Run the following:

```
./mvnw clean package -DskipTests=true
```

**STEP 5**. [Download](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar) the OpenTelemetry agent.

**STEP 6**. Apply the environment variables:

```
export OTEL_TRACES_EXPORTER="otlp"

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="grpc"

export OTEL_EXPORTER_OTLP_ENDPOINT="ingress.eu2.coralogix.com:443"

export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CXPrivateKey>"

export OTEL_RESOURCE_ATTRIBUTES=service.name=<ServiceName>,application.name=<CXApplicationName>,api.name=<CXSubsystemName>,cx.application.name=<CXApplicationName>,cx.subsystem.name=<CXSubsystemName>
```

**STEP 7**. Run the project with the agent:

```
java -javaagent:</path/to/>opentelemetry-javaagent.jar -jar mybatis-spring-boot-jpetstore-2.0.0-SNAPSHOT.jar
```

**STEP 8**. Navigate to [](http://localhost:8080/)<http://localhost:8080/>.

**STEP 9**. View the traces in your Coralogix dashboard.

[![Dashboard Java OTel instrumentation](/docs/assets/images/image-12-1024x854-607daf039aaefcb941c69e33ca0cba50.webp)](https://coralogix.com/docs/assets/images/image-12-1024x854-607daf039aaefcb941c69e33ca0cba50.webp)

## Additional instrumentation using annotations

**STEP 1**. Open the project with your favorite IDE/text editor.

**STEP 2**. Edit the `pom.xml` file and add the following maven dependency:

```
<dependency>

	<groupId>io.opentelemetry.instrumentation</groupId>

	<artifactId>opentelemetry-instrumentation-annotations</artifactId>

	<version>1.22.1</version>

</dependency>
```

[![Java OTel instrumentation](/docs/assets/images/image-13-1024x566-28653576ac253ff18e5182b5a73f93a5.webp)](https://coralogix.com/docs/assets/images/image-13-1024x566-28653576ac253ff18e5182b5a73f93a5.webp)

**STEP 3**. Edit file src/main/java/com/kazuki43zoo/jpetstore/ui/Cart.java.

**STEP 4**. Add this import to the Java file where the methods you want to trace are present.

```
import io.opentelemetry.instrumentation.annotations.WithSpan;
```

**STEP 5**. Before the function you wish to trace, add the annotation "WithSpan".

[![Java OTel instrumentation](/docs/assets/images/image-14-917x1024-002554cfdb1bf20f94b075b08da1edab.webp)](https://coralogix.com/docs/assets/images/image-14-917x1024-002554cfdb1bf20f94b075b08da1edab.webp)

**Example**: `cart.java`

**STEP 6.** Rebuild your springboot application applying the changes (using either your IDE or command line).

**STEP 7**. Run your application again with the OTel agent:

```
java -javaagent:</path/to/>opentelemetry-javaagent.jar -jar mybatis-spring-boot-jpetstore-2.0.0-SNAPSHOT
```

## Validation

Access **Explore > Tracing** to view the traces generated by your application.

Your traces should now contain additional spans on annotated methods.

[![Java OTel instrumentation annotated methods](/docs/assets/images/image-15-1024x676-1477a46175c249535d1a21c834dd57eb.webp)](https://coralogix.com/docs/assets/images/image-15-1024x676-1477a46175c249535d1a21c834dd57eb.webp)

[![Java OTel instrumentation](data:image/webp;base64,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)](data:image/webp;base64,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)

## Exceptions

Java exception logging is available through the OpenTelemetry Logs API and through the Log4j appender instrumentation. When an exception is attached to a log record, the exported log follows the OpenTelemetry semantic conventions for exceptions in logs.

### OpenTelemetry Java API

The stable `LogRecordBuilder.setException()` API is available in `io.opentelemetry:opentelemetry-api` starting in version `1.60.0`. If you are using the incubator logs API, `ExtendedLogRecordBuilder.setException()` is available starting in `1.50.0-alpha`.

**STEP 1**. Add the required dependencies:

```
<dependency>

  <groupId>io.opentelemetry</groupId>

  <artifactId>opentelemetry-api</artifactId>

  <version>1.60.0</version>

</dependency>

<dependency>

  <groupId>io.opentelemetry</groupId>

  <artifactId>opentelemetry-sdk</artifactId>

  <version>1.60.0</version>

</dependency>

<dependency>

  <groupId>io.opentelemetry</groupId>

  <artifactId>opentelemetry-sdk-logs</artifactId>

  <version>1.60.0</version>

</dependency>

<dependency>

  <groupId>io.opentelemetry</groupId>

  <artifactId>opentelemetry-exporter-logging</artifactId>

  <version>1.60.0</version>

</dependency>
```

**STEP 2**. Configure a `LoggerProvider` and emit a log with an exception:

```
import io.opentelemetry.api.OpenTelemetry;

import io.opentelemetry.api.logs.Logger;

import io.opentelemetry.api.logs.Severity;

import io.opentelemetry.exporter.logging.SystemOutLogRecordExporter;

import io.opentelemetry.sdk.OpenTelemetrySdk;

import io.opentelemetry.sdk.logs.SdkLoggerProvider;

import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;



SdkLoggerProvider loggerProvider =

    SdkLoggerProvider.builder()

        .addLogRecordProcessor(

            SimpleLogRecordProcessor.create(SystemOutLogRecordExporter.create()))

        .build();



OpenTelemetry openTelemetry =

    OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build();



Logger logger =

    openTelemetry.getLogsBridge().loggerBuilder("java-exceptions-example").build();



IllegalStateException error =

    new IllegalStateException("database connection failed");



logger

    .logRecordBuilder()

    .setSeverity(Severity.ERROR)

    .setBody("request failed")

    .setException(error)

    .emit();
```

### Log4j 2

The `io.opentelemetry.instrumentation:opentelemetry-log4j-appender-2.17` artifact supports Log4j 2.17 and higher and is published as an alpha artifact. Exception mapping is available in this artifact starting in `1.14.0-alpha`.

**STEP 1**. Add the required dependencies:

```
<dependency>

  <groupId>io.opentelemetry</groupId>

  <artifactId>opentelemetry-sdk</artifactId>

  <version>1.60.0</version>

</dependency>

<dependency>

  <groupId>io.opentelemetry</groupId>

  <artifactId>opentelemetry-sdk-logs</artifactId>

  <version>1.60.0</version>

</dependency>

<dependency>

  <groupId>io.opentelemetry</groupId>

  <artifactId>opentelemetry-exporter-logging</artifactId>

  <version>1.60.0</version>

</dependency>

<dependency>

  <groupId>io.opentelemetry.instrumentation</groupId>

  <artifactId>opentelemetry-log4j-appender-2.17</artifactId>

  <version>2.26.1-alpha</version>

</dependency>
```

**STEP 2**. Configure the Log4j appender in `log4j2.xml`:

```
<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="WARN">

  <Appenders>

    <OpenTelemetry name="OpenTelemetryAppender"/>

  </Appenders>

  <Loggers>

    <Root level="all">

      <AppenderRef ref="OpenTelemetryAppender"/>

    </Root>

  </Loggers>

</Configuration>
```

**STEP 3**. Install the appender during application startup:

```
import io.opentelemetry.exporter.logging.SystemOutLogRecordExporter;

import io.opentelemetry.instrumentation.log4j.appender.v2_17.OpenTelemetryAppender;

import io.opentelemetry.sdk.OpenTelemetrySdk;

import io.opentelemetry.sdk.logs.SdkLoggerProvider;

import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;



SdkLoggerProvider loggerProvider =

    SdkLoggerProvider.builder()

        .addLogRecordProcessor(

            SimpleLogRecordProcessor.create(SystemOutLogRecordExporter.create()))

        .build();



OpenTelemetrySdk openTelemetry =

    OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build();



OpenTelemetryAppender.install(openTelemetry);
```

**STEP 4**. Log the exception:

```
import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;



Logger logger = LogManager.getLogger("java-log4j-exceptions-example");

IllegalStateException error =

    new IllegalStateException("database connection failed");



logger.error("request failed", error);
```

### SLF4J with Log4j 2

When SLF4J is configured to use the Log4j 2 backend, the same Log4j appender setup is used. SLF4J to Log4j 2 support is available starting in `1.23.0-alpha`.

**STEP 1**. Add the SLF4J API and the Log4j 2 binding:

```
<dependency>

  <groupId>org.slf4j</groupId>

  <artifactId>slf4j-api</artifactId>

  <version>2.0.17</version>

</dependency>

<dependency>

  <groupId>org.apache.logging.log4j</groupId>

  <artifactId>log4j-slf4j2-impl</artifactId>

  <version>2.25.2</version>

</dependency>
```

**STEP 2**. Reuse the `log4j2.xml` and `OpenTelemetryAppender.install(...)` configuration from the Log4j 2 section, and log the exception through SLF4J:

```
import org.slf4j.Logger;

import org.slf4j.LoggerFactory;



Logger logger = LoggerFactory.getLogger("java-slf4j-exceptions-example");

IllegalStateException error =

    new IllegalStateException("database connection failed");



logger.error("request failed", error);
```
