# Application server configuration

> Learn how to define agent paths for Java application servers

---

LLMS index: [llms.txt](/llms.txt)

---

When instrumenting an app that runs on a Java application server with a Java
agent, you must add the `javaagent` path to the JVM arguments. The way to do
this differs from server to server.

## JBoss EAP / WildFly

You can add the `javaagent` argument at the end of the standalone configuration
file:



  <ul class="nav nav-tabs" id="tabs-0" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
          data-td-tp-persist="linux" aria-controls="tabs-00-00" aria-selected="true">
        Linux
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
          data-td-tp-persist="windows" aria-controls="tabs-00-01" aria-selected="false">
        Windows
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-0-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># Add to standalone.conf</span>
</span></span><span class="line"><span class="cl"><span class="nv">JAVA_OPTS</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$JAVA_OPTS</span><span class="s2"> -javaagent:/path/to/opentelemetry-javaagent.jar&#34;</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bat" data-lang="bat"><span class="line"><span class="cl"><span class="c1">rem Add to standalone.conf.bat</span>
</span></span><span class="line"><span class="cl"><span class="k">set</span> <span class="s2">&#34;JAVA_OPTS=</span><span class="nv">%JAVA_OPTS%</span><span class="s2"> -javaagent:&lt;Drive&gt;:\path\to\opentelemetry-javaagent.jar&#34;</span>
</span></span></code></pre></div>
    </div>
</div>


## Jetty

To define the path to the Java agent, use the `-javaagent` argument:

```shell
java -javaagent:/path/to/opentelemetry-javaagent.jar -jar start.jar
```

If you use the `jetty.sh` file to start Jetty, add the following line to the
`\<jetty_home\>/bin/jetty.sh` file:

```shell
JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:/path/to/opentelemetry-javaagent.jar"
```

If you use the start.ini file to define JVM arguments, add the `javaagent`
argument after the `--exec` option:

```ini
#===========================================================
# Sample Jetty start.ini file
#-----------------------------------------------------------
--exec
-javaagent:/path/to/opentelemetry-javaagent.jar
```

## Glassfish / Payara

Add the path to the Java agent using the `asadmin` tool:

   <ul class="nav nav-tabs" id="tabs-1" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
          data-td-tp-persist="linux" aria-controls="tabs-01-00" aria-selected="true">
        Linux
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
          data-td-tp-persist="windows" aria-controls="tabs-01-01" aria-selected="false">
        Windows
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-1-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">&lt;server_install_dir&gt;/bin/asadmin create-jvm-options <span class="s2">&#34;-javaagent\:/path/to/opentelemetry-javaagent.jar&#34;</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="n">server_install_dir</span><span class="p">&gt;\</span><span class="n">bin</span><span class="p">\</span><span class="n">asadmin</span><span class="p">.</span><span class="py">bat</span> <span class="nb">create-jvm</span><span class="n">-options</span> <span class="s1">&#39;-javaagent\:&lt;Drive&gt;\:\\path\\to\\opentelemetry-javaagent.jar&#39;</span>
</span></span></code></pre></div>
    </div>
</div>


You can also add the `-javaagent` argument from the Admin Console. For example:

1.  Open the GlassFish Admin Console at <http://localhost:4848>.
2.  Go to **Configurations > server-config > JVM Settings**.
3.  Select **JVM Options > Add JVM Option**.
4.  Enter the path to the agent:
    `-javaagent:/path/to/opentelemetry-javaagent.jar`
5.  **Save** and restart the server.

Make sure that the domain.xml file in your domain directory contains a
`<jmv-options>` entry for the agent.

## Tomcat / TomEE

Add the path to the Java agent to your startup script. The configuration method
depends on your installation:

**For package-managed installations** (apt-get/yum), add to
`/etc/tomcat*/tomcat*.conf`:

```sh
JAVA_OPTS="$JAVA_OPTS -javaagent:/path/to/opentelemetry-javaagent.jar"
```

**For download installations**, create or modify `<tomcat>/bin/setenv.sh`
(Linux) or `<tomcat>/bin/setenv.bat` (Windows):



  <ul class="nav nav-tabs" id="tabs-2" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
          data-td-tp-persist="linux" aria-controls="tabs-02-00" aria-selected="true">
        Linux
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
          data-td-tp-persist="windows" aria-controls="tabs-02-01" aria-selected="false">
        Windows
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-2-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># Add to &lt;tomcat_home&gt;/bin/setenv.sh</span>
</span></span><span class="line"><span class="cl"><span class="nv">CATALINA_OPTS</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$CATALINA_OPTS</span><span class="s2"> -javaagent:/path/to/opentelemetry-javaagent.jar&#34;</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bat" data-lang="bat"><span class="line"><span class="cl"><span class="c1">rem Add to &lt;tomcat_home&gt;\bin\setenv.bat</span>
</span></span><span class="line"><span class="cl"><span class="k">set</span> <span class="nv">CATALINA_OPTS</span><span class="p">=</span><span class="nv">%CATALINA_OPTS%</span> -javaagent:<span class="s2">&#34;&lt;Drive&gt;:\path\to\opentelemetry-javaagent.jar&#34;</span>
</span></span></code></pre></div>
    </div>
</div>


**For Windows service installations**, use `<tomcat>/bin/tomcat*w.exe` to add
`-javaagent:<Drive>:\path\to\opentelemetry-javaagent.jar` to the Java Options
under the Java tab.

## WebLogic

Add the path to the Java agent to your domain startup script:



  <ul class="nav nav-tabs" id="tabs-3" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-03-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-00" role="tab"
          data-td-tp-persist="linux" aria-controls="tabs-03-00" aria-selected="true">
        Linux
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-03-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-01" role="tab"
          data-td-tp-persist="windows" aria-controls="tabs-03-01" aria-selected="false">
        Windows
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-3-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-03-00" role="tabpanel" aria-labelled-by="tabs-03-00-tab" tabindex="3">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># Add to &lt;domain_home&gt;/bin/startWebLogic.sh</span>
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">JAVA_OPTIONS</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$JAVA_OPTIONS</span><span class="s2"> -javaagent:/path/to/opentelemetry-javaagent.jar&#34;</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-03-01" role="tabpanel" aria-labelled-by="tabs-03-01-tab" tabindex="3">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bat" data-lang="bat"><span class="line"><span class="cl"><span class="c1">rem Add to &lt;domain_home&gt;\bin\startWebLogic.cmd</span>
</span></span><span class="line"><span class="cl"><span class="k">set</span> <span class="nv">JAVA_OPTIONS</span><span class="p">=</span><span class="nv">%JAVA_OPTIONS%</span> -javaagent:<span class="s2">&#34;&lt;Drive&gt;:\path\to\opentelemetry-javaagent.jar&#34;</span>
</span></span></code></pre></div>
    </div>
</div>


For managed server instances, add the `-javaagent` argument using the admin
console.

## WebSphere Liberty Profile

Add the path to the Java agent to the `jvm.options` file. For a single server,
edit `${server.config.dir}/jvm.options`, and for all servers, edit
`${wlp.install.dir}/etc/jvm.options`:

```ini
-javaagent:/path/to/opentelemetry-javaagent.jar
```

Restart the server after saving the file.

## WebSphere Traditional

Open the WebSphere Admin Console and follow these steps:

<!-- markdownlint-disable blanks-around-fences -->

1.  Navigate to **Servers > Server type > WebSphere application servers**.
2.  Select the server.
3.  Go to **Java and Process Management > Process Definition**.
4.  Select **Java Virtual Machine**.
5.  In **Generic JVM arguments**, enter the path to the agent:
    `-javaagent:/path/to/opentelemetry-javaagent.jar`.
6.  Save the configuration and restart the server.

## Enable predefined JMX Metrics

The Java agent includes predefined JMX metrics configurations for several
popular application servers, but these are not enabled by default. To enable
collection of the predefined metrics, specify a list of targets as the value for
the `otel.jmx.target.system` system property. For example:

```bash
$ java -javaagent:path/to/opentelemetry-javaagent.jar \
     -Dotel.jmx.target.system=jetty,tomcat \
     ... \
     -jar myapp.jar
```

The following are known application server values for `otel.jmx.target.system`:

- [`jetty`](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/jmx-metrics/library/jetty.md)
- [`tomcat`](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/jmx-metrics/library/tomcat.md)
- [`wildfly`](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/jmx-metrics/library/wildfly.md)

> [!NOTE]
>
> This list is not comprehensive, and other JMX target systems are supported.

For a list of metrics extracted from each application server, select the
previous name, or refer to
[Additional details and customization capabilities](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/jmx-metrics#predefined-metrics).
