---
title: "OpenTelemetry Agent"
description: "Using OpenTelemetry with sentry-opentelemetry-agent."
url: https://docs.sentry.io/platforms/java/guides/servlet/opentelemetry/setup/agent/
---

# OpenTelemetry Agent | Sentry for Servlet

This is our recommended way of setting up Sentry with OpenTelemetry as it offers the broadest support for frameworks and libraries.

The `sentry-opentelemetry-agent` makes use of the [`java` command's `-javaagent` argument](https://docs.oracle.com/en/java/javase/17/docs/api/java.instrument/java/lang/instrument/package-summary.html). This Java Agent will run some code before starting your application, configuring OpenTelemetry and Sentry and also dynamically injects bytecode into your application.

The injected code allows OpenTelemetry and by extension also Sentry to:

* Instrument your application by creating spans around things like HTTP requests, database queries, and many more.
* Propagate OpenTelemetry `Context` and Sentry `Scopes` through libraries
* Extract tracing information from incoming requests and consumed messages
* Inject tracing information into outgoing requests and produced messages

The `sentry-opentelemetry-agent` is packaged as a JAR file and is separate from your applications JAR / WAR file. This means you will have to manage the version on your server and upgrade it whenever you upgrade the Sentry SDK dependency in your application should you have it.

##### ✨ Note

Sentry Java SDK dependencies as well as `sentry-opentelemetry-agent` version must always be aligned. Mixing them is very likely to cause crashes and as of version `8.6.0` the Java SDK will throw an exception on `init` in this case to help catch the issue during development.

Since `sentry-opentelemetry-agent` is based on `opentelemetry-agent`, you may also find [OpenTelmetry docs](https://opentelemetry.io/docs/zero-code/java/agent/) helpful.

When using `sentry-opentelemetry-agent` you can choose whether the Agent should call `Sentry.init`. By default the Agent will initialize Sentry for you. If you prefer to manually initialize Sentry or have another integration perform the init you can disable this behaviour.

We recommend letting the Java Agent take care of initializing Sentry as this way the SDK will be ready early in your applications lifecycle.

* #### [OpenTelemetry Agent With Auto Init](https://docs.sentry.io/platforms/java/guides/servlet/opentelemetry/setup/agent/auto-init.md)

  Using OpenTelemetry with sentry-opentelemetry-agent and AUTO\_INIT enabled.

* #### [OpenTelemetry Agent Without Auto Init](https://docs.sentry.io/platforms/java/guides/servlet/opentelemetry/setup/agent/no-auto-init.md)

  Using OpenTelemetry with sentry-opentelemetry-agent and AUTO\_INIT disabled.

## Pages in this section

- [OpenTelemetry Agent With Auto Init](https://docs.sentry.io/platforms/java/guides/servlet/opentelemetry/setup/agent/auto-init.md)
- [OpenTelemetry Agent Without Auto Init](https://docs.sentry.io/platforms/java/guides/servlet/opentelemetry/setup/agent/no-auto-init.md)
