---
title: IBM WAS
description: IBM Websphere Application Server is a framework that hosts Java applications
breadcrumbs: Docs > Integrations > IBM WAS
---

# IBM WAS
Supported OS Integration version5.4.0
## Overview{% #overview %}

This check monitors [IBM Websphere Application Server (WAS)](https://www.ibm.com/cloud/websphere-application-platform) through the Datadog Agent. This check supports IBM WAS versions >= 8.5.5.

**Minimum Agent version:** 6.10.0

## Setup{% #setup %}

Follow the instructions below to install and configure this check for an Agent running on a host. For containerized environments, see the [Autodiscovery Integration Templates](https://docs.datadoghq.com/agent/kubernetes/integrations/) for guidance on applying these instructions.

The IBM WAS Datadog integration collects enabled PMI Counters from the WebSphere Application Server environment. Setup requires enabling the PerfServlet, which provides a way for Datadog to retrieve performance data from WAS.

By default, this check collects JDBC, JVM, thread pool, and Servlet Session Manager metrics. You may optionally specify additional metrics to collect in the "custom_queries" section. See the [sample check configuration](https://github.com/DataDog/integrations-core/blob/master/ibm_was/datadog_checks/ibm_was/data/conf.yaml.example) for examples.

### Installation{% #installation %}

The IBM WAS check is included in the [Datadog Agent](https://app.datadoghq.com/account/settings/agent/latest) package.

#### Enable the `PerfServlet`{% #enable-the-perfservlet %}

The servlet's .ear file (PerfServletApp.ear) is located in the `<WAS_HOME>/installableApps` directory, where `<WAS_HOME>` is the installation path for WebSphere Application Server.

The performance servlet is deployed exactly as any other servlet. Deploy the servlet on a single application server instance within the domain.

**Note**: Starting with version 6.1, you must enable application security to get the PerfServlet working.

### Modify the monitored statistic set{% #modify-the-monitored-statistic-set %}

By default, your application server is only configured for "Basic" monitoring. To gain visibility into your JVM, JDBC connections, and servlet connections, change the monitored statistic set for your application server from "Basic" to "All".

From the Websphere Administration Console, you can find this setting in `Application servers > <YOUR_APP_SERVER> > Performance Monitoring Infrastructure (PMI)`.

Once you've made this change, click "Apply" to save the configuration and restart your application server. Additional JDBC, JVM, and servlet metrics should appear in Datadog shortly after this change.

### Configuration{% #configuration %}

#### Prepare IBM WAS{% #prepare-ibm-was %}

As a best practice, Datadog recommends using a read-only user to monitor your IBM WAS instance. This limits the access granted to the Datadog Agent.

{% tab title="Host" %}
#### Host{% #host %}

To configure this check for an Agent running on a host:

##### Metric collection{% #metric-collection %}

1. Edit the `ibm_was.d/conf.yaml` file, in the `conf.d/` folder at the root of your Agent's configuration directory to collect your IBM WAS performance data. See the [sample ibm_was.d/conf.yaml](https://github.com/DataDog/integrations-core/blob/master/ibm_was/datadog_checks/ibm_was/data/conf.yaml.example) for all available configuration options.

1. [Restart the Agent](https://docs.datadoghq.com/agent/guide/agent-commands/#start-stop-and-restart-the-agent).

##### Log collection{% #log-collection %}

*Available for Agent versions >6.0*

1. Collecting logs is disabled by default in the Datadog Agent, enable it in your `datadog.yaml` file:

   ```yaml
   logs_enabled: true
   ```

1. Next, edit `ibm_was.d/conf.yaml` by uncommenting the `logs` lines at the bottom. Update the logs `path` with the correct path to your WAS log files.

   ```yaml
   logs:
     - type: file
       path: /opt/IBM/WebSphere/AppServer/profiles/InfoSphere/logs/server1/*.log
       source: ibm_was
       service: websphere
   ```

1. [Restart the Agent](https://docs.datadoghq.com/agent/guide/agent-commands/#start-stop-and-restart-the-agent).

{% /tab %}

{% tab title="Containerized" %}
#### Containerized{% #containerized %}

For containerized environments, see the [Autodiscovery Integration Templates](https://docs.datadoghq.com/agent/kubernetes/integrations/) for guidance on applying the parameters below.

##### Metric collection{% #metric-collection %}

| Parameter            | Value                                                                         |
| -------------------- | ----------------------------------------------------------------------------- |
| `<INTEGRATION_NAME>` | `ibm_was`                                                                     |
| `<INIT_CONFIG>`      | blank or `{}`                                                                 |
| `<INSTANCE_CONFIG>`  | `{"servlet_url": "http://%%host%%:%%port%%/wasPerfTool/servlet/perfservlet"}` |

##### Log collection{% #log-collection %}

*Available for Agent versions >6.0*

Collecting logs is disabled by default in the Datadog Agent. To enable it, see [Kubernetes Log Collection](https://docs.datadoghq.com/agent/kubernetes/log/).

| Parameter      | Value                                                |
| -------------- | ---------------------------------------------------- |
| `<LOG_CONFIG>` | `{"source": "ibm_was", "service": "<SERVICE_NAME>"}` |

{% /tab %}

### Validation{% #validation %}

[Run the Agent's status subcommand](https://docs.datadoghq.com/agent/guide/agent-commands/#agent-status-and-information) and look for `ibm_was` under the Checks section.

## Data Collected{% #data-collected %}

### Metrics{% #metrics %}

|  |
|  |
| **ibm\_was.can\_connect**(gauge)                                          | The ability of the integration to connect to the Perf Servlet to collect metrics                                                                                                                                                                                                                                                                         |
| **ibm\_was.jdbc.allocate\_count**(gauge)                                  | The total number of managed connections that were allocated since pool creation.*Shown as connection*                                                                                                                                                                                                                                                    |
| **ibm\_was.jdbc.close\_count**(gauge)                                     | The total number of managed connections that were destroyed since pool creation.*Shown as connection*                                                                                                                                                                                                                                                    |
| **ibm\_was.jdbc.connection\_handle\_count**(gauge)                        | The number of connections that are in use. Can include multiple connections that are shared from a single managed connection.*Shown as connection*                                                                                                                                                                                                       |
| **ibm\_was.jdbc.create\_count**(gauge)                                    | The total number of managed connections that were created since pool creation.*Shown as connection*                                                                                                                                                                                                                                                      |
| **ibm\_was.jdbc.fault\_count**(gauge)                                     | The total number of faults, such as timeouts, in the connection pool.                                                                                                                                                                                                                                                                                    |
| **ibm\_was.jdbc.free\_pool\_size**(gauge)                                 | The number of managed connections that are in the free pool.*Shown as connection*                                                                                                                                                                                                                                                                        |
| **ibm\_was.jdbc.jdbc\_time**(gauge)                                       | The average time in milliseconds spent running in the JDBC driver that includes time that is spent in the JDBC driver, network, and database.*Shown as millisecond*                                                                                                                                                                                      |
| **ibm\_was.jdbc.managed\_connection\_count**(gauge)                       | The total number of managed connections in the free, shared, and unshared pools.*Shown as connection*                                                                                                                                                                                                                                                    |
| **ibm\_was.jdbc.percent\_maxed**(gauge)                                   | The percent of the time that all connections are in use.                                                                                                                                                                                                                                                                                                 |
| **ibm\_was.jdbc.percent\_used**(gauge)                                    | The percent of the pool that is in use.                                                                                                                                                                                                                                                                                                                  |
| **ibm\_was.jdbc.pool\_size**(gauge)                                       | The size of the connection pool.                                                                                                                                                                                                                                                                                                                         |
| **ibm\_was.jdbc.prep\_stmt\_cache\_discard\_count**(gauge)                | The total number of statements that are discarded by the least recently used (LRU) algorithm of the statement cache.                                                                                                                                                                                                                                     |
| **ibm\_was.jdbc.return\_count**(gauge)                                    | The total number of managed connections that were returned since pool creation.*Shown as connection*                                                                                                                                                                                                                                                     |
| **ibm\_was.jdbc.use\_time**(gauge)                                        | The average time in milliseconds that a connection is in use.*Shown as millisecond*                                                                                                                                                                                                                                                                      |
| **ibm\_was.jdbc.wait\_time**(gauge)                                       | The average waiting time in milliseconds until a connection is granted if a connection is not currently available.*Shown as millisecond*                                                                                                                                                                                                                 |
| **ibm\_was.jdbc.waiting\_thread\_count**(gauge)                           | The number of threads that are currently waiting for a connection.*Shown as thread*                                                                                                                                                                                                                                                                      |
| **ibm\_was.jvm.free\_memory**(gauge)                                      | Deprecated, use ibm_was.jvm.free_memory_gauge instead*Shown as kibibyte*                                                                                                                                                                                                                                                                                 |
| **ibm\_was.jvm.free\_memory\_gauge**(gauge)                               | The free memory in the JVM run time*Shown as kibibyte*                                                                                                                                                                                                                                                                                                   |
| **ibm\_was.jvm.heap\_size**(gauge)                                        | Deprecated, use ibm_was.jvm.heap_size_gauge instead*Shown as kibibyte*                                                                                                                                                                                                                                                                                   |
| **ibm\_was.jvm.heap\_size\_gauge**(gauge)                                 | The total memory in the JVM run time*Shown as kibibyte*                                                                                                                                                                                                                                                                                                  |
| **ibm\_was.jvm.process\_cpu\_usage**(gauge)                               | Deprecated, use ibm_was.jvm.process_cpu_usage_gauge instead*Shown as percent*                                                                                                                                                                                                                                                                            |
| **ibm\_was.jvm.process\_cpu\_usage\_gauge**(gauge)                        | The CPU Usage (in percent) of the Java virtual machine.*Shown as percent*                                                                                                                                                                                                                                                                                |
| **ibm\_was.jvm.up\_time**(gauge)                                          | Deprecated, use ibm_was.jvm.up_time_gauge instead*Shown as second*                                                                                                                                                                                                                                                                                       |
| **ibm\_was.jvm.up\_time\_gauge**(gauge)                                   | The amount of time that the JVM is running*Shown as second*                                                                                                                                                                                                                                                                                              |
| **ibm\_was.jvm.used\_memory**(gauge)                                      | Deprecated, use ibm_was.jvm.used_memory_gauge instead*Shown as kibibyte*                                                                                                                                                                                                                                                                                 |
| **ibm\_was.jvm.used\_memory\_gauge**(gauge)                               | The used memory in the JVM run time*Shown as kibibyte*                                                                                                                                                                                                                                                                                                   |
| **ibm\_was.servlet\_session.activate\_non\_exist\_session\_count**(gauge) | The number of requests for a session that no longer exists, presumably because the session timed out. Use this counter to help determine if the timeout is too short.*Shown as request*                                                                                                                                                                  |
| **ibm\_was.servlet\_session.active\_count**(gauge)                        | The number of concurrently active sessions. A session is active if the WebSphere Application Server is currently processing a request that uses that session.*Shown as session*                                                                                                                                                                          |
| **ibm\_was.servlet\_session.affinity\_break\_count**(gauge)               | The number of requests that are received for sessions that were last accessed from another web application. This value can indicate failover processing or a corrupt plug-in configuration.*Shown as request*                                                                                                                                            |
| **ibm\_was.servlet\_session.cache\_discard\_count**(gauge)                | The number of session objects that have been forced out of the cache. A least recently used (LRU) algorithm removes old entries to make room for new sessions and cache misses. Applicable only for persistent sessions.*Shown as session*                                                                                                               |
| **ibm\_was.servlet\_session.create\_count**(gauge)                        | The number of sessions that were created*Shown as session*                                                                                                                                                                                                                                                                                               |
| **ibm\_was.servlet\_session.external\_read\_size**(gauge)                 | Size of the session data read from persistent store. Applicable only for (serialized) persistent sessions; similar to external Read Time.                                                                                                                                                                                                                |
| **ibm\_was.servlet\_session.external\_read\_time**(gauge)                 | The time (ms) taken in reading the session data from the persistent store. For multirow sessions, the metrics are for the attribute; for single row sessions, the metrics are for the entire session. Applicable only for persistent sessions. When using a JMS persistent store, only available if replicated data is serialized.*Shown as millisecond* |
| **ibm\_was.servlet\_session.external\_write\_size**(gauge)                | The size of the session data written to persistent store. Applicable only for (serialized) persistent sessions. Similar to external Read Time.*Shown as request*                                                                                                                                                                                         |
| **ibm\_was.servlet\_session.external\_write\_time**(gauge)                | The time (milliseconds) taken to write the session data from the persistent store. Applicable only for (serialized) persistent sessions. Similar to external Read Time.*Shown as millisecond*                                                                                                                                                            |
| **ibm\_was.servlet\_session.invalidate\_count**(gauge)                    | The number of sessions that were invalidated*Shown as session*                                                                                                                                                                                                                                                                                           |
| **ibm\_was.servlet\_session.life\_time**(gauge)                           | The average session life time in milliseconds (time invalidated - time created)*Shown as millisecond*                                                                                                                                                                                                                                                    |
| **ibm\_was.servlet\_session.live\_count**(gauge)                          | The number of local sessions that are currently cached in memory from the time at which this metric is enabled.*Shown as session*                                                                                                                                                                                                                        |
| **ibm\_was.servlet\_session.no\_room\_for\_new\_session\_count**(gauge)   | Applies only to session in memory with AllowOverflow=false. The number of times that a request for a new session cannot be handled because it exceeds the maximum session count.                                                                                                                                                                         |
| **ibm\_was.servlet\_session.session\_object\_size**(gauge)                | The size in bytes of (the serializable attributes of ) in-memory sessions. Only session objects that contain at least one serializable attribute object is counted. A session can contain some attributes that are serializable and some that are not. The size in bytes is at a session level.                                                          |
| **ibm\_was.servlet\_session.time\_since\_last\_activated**(gauge)         | The time difference in milliseconds between previous and current access time stamps. Does not include session time out.*Shown as millisecond*                                                                                                                                                                                                            |
| **ibm\_was.servlet\_session.timeout\_invalidation\_count**(gauge)         | The number of sessions that are invalidated by timeout.*Shown as session*                                                                                                                                                                                                                                                                                |
| **ibm\_was.thread\_pools.active\_count**(gauge)                           | The number of concurrently active threads*Shown as thread*                                                                                                                                                                                                                                                                                               |
| **ibm\_was.thread\_pools.active\_time**(gauge)                            | The average time in milliseconds the threads are in active state*Shown as millisecond*                                                                                                                                                                                                                                                                   |
| **ibm\_was.thread\_pools.cleared\_thread\_hang\_count**(gauge)            | The number of thread hangs cleared*Shown as thread*                                                                                                                                                                                                                                                                                                      |
| **ibm\_was.thread\_pools.concurrent\_hung\_thread\_count**(gauge)         | The number of concurrently hung threads*Shown as thread*                                                                                                                                                                                                                                                                                                 |
| **ibm\_was.thread\_pools.create\_count**(gauge)                           | The total number of threads created*Shown as thread*                                                                                                                                                                                                                                                                                                     |
| **ibm\_was.thread\_pools.declared\_thread\_hung\_count**(gauge)           | The number of threads declared hung*Shown as thread*                                                                                                                                                                                                                                                                                                     |
| **ibm\_was.thread\_pools.destroy\_count**(gauge)                          | The total number of threads destroyed*Shown as thread*                                                                                                                                                                                                                                                                                                   |
| **ibm\_was.thread\_pools.percent\_maxed**(gauge)                          | The average percent of the time that all threads are in use*Shown as percent*                                                                                                                                                                                                                                                                            |
| **ibm\_was.thread\_pools.percent\_used**(gauge)                           | The average percent of the pool that is in use. The value is based on the total number of configured threads in the ThreadPool and not the current pool size.*Shown as percent*                                                                                                                                                                          |
| **ibm\_was.thread\_pools.pool\_size**(gauge)                              | The average number of threads in pool*Shown as thread*                                                                                                                                                                                                                                                                                                   |

### Events{% #events %}

IBM WAS does not include any events.

### Service Checks{% #service-checks %}

**ibm\_was.can\_connect**

Returns `CRITICAL` if the Agent cannot connect to the PerfServlet for any reason. Returns `OK` otherwise.

*Statuses: ok, critical*

## Troubleshooting{% #troubleshooting %}

Need help? Contact [Datadog support](https://docs.datadoghq.com/help/).
