---
title: Monitor services
description: The following sections describe how to set up and maintain monitoring in your deployment to ensure appropriate performance and service availability.
component: java-agents
version: 2025.11
page_id: java-agents:maintenance-guide:monitoring
canonical_url: https://docs.pingidentity.com/java-agents/2025.11/maintenance-guide/monitoring.html
section_ids:
  monitor-prometheus: Monitor with Prometheus
  expose-prometheus-endpoint: Expose the Prometheus endpoint
  access-prometheus-endpoint: Access the Prometheus endpoint
  proc-enable-csv-metrics: Write metrics to CSV files
  monitor-metric-types: Monitoring types
  monitor-metrics: Metrics at the Prometheus endpoint
  ref-audit-handler-metrics: Audit handler metrics
  ref-endpoint-metrics: Endpoint and REST SDK metrics
  ref-expired-session-metrics: Expired session metrics
  ref-jwt-metrics: JSON Web Token (JWT) metrics
  ref-JVM-metrics: JVM metrics
  ref-not-enforced-metrics: Not-enforced rule metrics
  ref-policy-decision-metrics: Policy decision metrics
  ref-pdp-metrics: POST data preservation metrics
  ref-request-metrics: Request metrics
  ref-session-info-metrics: Session information metrics
  ref-sso-jwt-exchange: SSO token to JWT exchange metrics
  ref-websocket-metrics: WebSocket metrics
---

# Monitor services

The following sections describe how to set up and maintain monitoring in your deployment to ensure appropriate performance and service availability.

## Monitor with Prometheus

Java Agent automatically exposes a monitoring endpoint where Prometheus can scrape metrics in a standard Prometheus format (version 0.0.4).

The Prometheus endpoint is enabled by default. You can disable it if required by setting the [Enable Prometheus Monitoring](../properties-reference/org.forgerock.agents.prometheus.monitoring.enabled.html) property to `false`.

You can find information about installing and running Prometheus in the [Prometheus documentation](https://prometheus.io/docs/introduction/overview/).

Prometheus performance metrics are provided by an endpoint configured in the protected web application's `web.xml` file. The endpoint must be accessible to the Prometheus server that uses the performance data.

|   |                                                                                                                                                                                        |
| - | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   | Tools such as Grafana are available to create customized charts and graphs based on the information collected by Prometheus. Learn more on the [Grafana website](https://grafana.com). |

### Expose the Prometheus endpoint

Use the following procedure to expose the Prometheus endpoint.

1. For each protected web application that is to expose metrics, edit the `web.xml` file for the `agentapp` application.

   The following example exposes a base endpoint named `/metrics`:

   ```xml
   <servlet>
      <servlet-name>AgentMonitoring</servlet-name>
      <servlet-class>org.forgerock.http.servlet.HttpFrameworkServlet</servlet-class>
      <init-param>
          <param-name>application-loader</param-name>
          <param-value>service_loader</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
       <servlet-name>AgentMonitoring</servlet-name>
       <url-pattern>/metrics/*</url-pattern>
   </servlet-mapping>
   ```

   Choose a name for the exposed base endpoint that does not conflict with any of the built-in agent endpoints.

2. Allow access to the Prometheus endpoint that is protected by the agent, in one of the following ways:

   * Configure [Not-Enforced URIs](../properties-reference/org.forgerock.agents.notenforced.uri.list.html) to create a not-enforced URI rule for the base endpoint.

     The following example rule allows access to the metrics base endpoint:

     ```
     */metrics/*
     ```

   * Configure [Not-Enforced URIs](../properties-reference/org.forgerock.agents.notenforced.uri.list.html), [Not-Enforced Client IP List](../properties-reference/org.forgerock.agents.notenforced.ip.list.html), and [Not-Enforced Compound Rule Separator](../properties-reference/org.forgerock.agents.notenforced.compound.separator.html) to create a compound not-enforced rule for the base endpoint.

     The rule allows access from only the IP addresses of the Prometheus server.

     The following example rule allows access to the `/metrics` endpoint for HTTP requests that come from the IP address range from 192.168.1.1 to 192.168.1.3:

     ```
     192.168.1.1-192.168.1.3 | */metrics/*
     ```

     HTTP requests from other IP addresses are not able to access the metrics base endpoint.

   * Create an authorization policy in Advanced Identity Cloud or AM to restrict access to the metrics base endpoint.

     The metric base endpoint doesn't require login credentials. You can use a policy to ensure that requests to the endpoint are authenticated against the Advanced Identity Cloud or AM instance.

     Learn more in [Policies](https://docs.pingidentity.com/pingoneaic/latest/am-authorization/configuring-policies.html) in Advanced Identity Cloud's *Authorization guide* or [Policies](https://docs.pingidentity.com/pingam/8/authorization-guide/policies.html) in AM's *Authorization guide*.

3. If the Prometheus endpoint is protected by Advanced Identity Cloud or AM policies, include the required credentials.

### Access the Prometheus endpoint

When the example in [Expose the Prometheus endpoint](#expose-prometheus-endpoint) is configured, the Prometheus endpoint is available at `https://mydomain.example.com/agentapp/metrics/prometheus`.

1. Access the Prometheus endpoint as follows:

   ```none
   $ curl https://mydomain.example.com/agentapp/metrics/prometheus
   ```

   The metrics are displayed:

   ```none
   # HELP ja_expired_session_cache_eviction the eviction count for the expired session cache
   # TYPE ja_expired_session_cache_eviction gauge
   ja_expired_session_cache_eviction 0.0
   # HELP ja_expired_session_cache the hit count for the expired session cache
   # TYPE ja_expired_session_cache gauge
   ja_expired_session_cache{outcome="hit",} 0.0
   ja_expired_session_cache{outcome="miss",} 0.0
   # HELP ja_expired_session_cache_load the total load count for the expired session cache
   # TYPE ja_expired_session_cache_load gauge
   ...
   ```

## Write metrics to CSV files

Configure [Export Monitoring Metrics to CSV](../properties-reference/org.forgerock.agents.config.monitoring.to.csv.html) to write metric information to CSV files.

## Monitoring types

This section describes the data types used in monitoring:

* Counter

  Cumulative metric for a numerical value that only increases.

* Distinct counter

  Metric that provides an estimate of the number of *unique* values recorded.

  For example, use this to estimate the number of unique users who have authenticated, or unique client IP addresses.

  |   |                                                                                                                                                                                                   |
  | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  |   | The `DistinctCounter` type is reported as a `Gauge` type.The `DistinctCounter` metric is calculated per instance of AM and can't be aggregated across multiple instances to get a site-wide view. |

* Gauge

  Metric for a numerical value that can increase or decrease.

  The value for a gauge is calculated when requested and represents the state of the metric at that specific time.

* Timer

  Metric that provides duration information.

  The Prometheus endpoint doesn't provide rate-based statistics because rates can be calculated from the time-series data. Instead, the Prometheus endpoint includes summary metrics whose names have the following suffixes or labels:

  * `count`: number of events recorded

  * `sum`: sum of the durations recorded

  * `{quantile="0.5"}`: 50% of the durations are at or below this value

  * `{quantile="0.75"}`: 75% of the durations are at or below this value

  * `{quantile="0.95"}`: 95% of the durations are at or below this value

  * `{quantile="0.98"}`: 98% of the durations are at or below this value

  * `{quantile="0.99"}`: 99% of the durations are at or below this value

  * `{quantile="0.999"}`: 99.9% of the durations are at or below this value

  |   |                                                                                                                                                                                                                                                                                                                             |
  | - | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  |   | The `Timer` metric type is reported as a `Summary` type.Duration-based quantile values are weighted towards newer data. By representing approximately the last five minutes of data, the timers make it easier to see recent changes in behavior, rather than a uniform average of recordings since the server was started. |

## Metrics at the Prometheus endpoint

### Audit handler metrics

Java Agent exposes the following audit handler monitoring metrics:

| Metric                                                                          | [Type](#monitor-metric-types) | Description                                                                                            |
| ------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------ |
| `ja_audit_generate{topic=access}`                                               | Timer                         | Time taken to generate an audit object.                                                                |
| `ja_audit{handler-type=handler-type,name=default,topic=access,outcome=outcome}` | Timer                         | Time taken to audit outcomes, both locally to the agent and remotely in Advanced Identity Cloud or AM. |

**Audit handler metrics labels**

| Label          | Values                                                                                                                                                 |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `handler-type` | * `am-delegate`. Remote auditing performed by Advanced Identity Cloud or AM.

  (Prometheus: `am_delegate`)

* `json`. Local audit logging using JSON. |
| `outcome`      | - `success`

- `failure`                                                                                                                               |

### Endpoint and REST SDK metrics

Java Agent exposes the following endpoint and REST SDK monitoring metrics:

| Metric               | [Type](#monitor-metric-types) | Description                                                                             |
| -------------------- | ----------------------------- | --------------------------------------------------------------------------------------- |
| `ja_session_info`    | Timer                         | Time taken to retrieve user session information from Advanced Identity Cloud or AM.     |
| `ja_user_profile`    | Timer                         | Time taken to retrieve the user profile information from Advanced Identity Cloud or AM. |
| `ja_policy_decision` | Timer                         | Time taken to retrieve policy decisions from Advanced Identity Cloud or AM.             |

### Expired session metrics

Java Agent exposes the following expired session monitoring metrics:

| Metric                                   | [Type](#monitor-metric-types) | Description                                               |
| ---------------------------------------- | ----------------------------- | --------------------------------------------------------- |
| `ja_expired_session_cache_size`          | Gauge                         | Total number of entries in the expired session cache.     |
| `ja_expired_session_cache_eviction`      | Gauge                         | Eviction count for the expired session cache.             |
| `ja_expired_session_cache_load`          | Gauge                         | Load count for the expired session cache.                 |
| `ja_expired_session_cache_load_time`     | Gauge                         | Load time for the expired session cache, in milliseconds. |
| `ja_expired_session_cache{outcome=hit}`  | Gauge                         | Hit count for the expired session cache.                  |
| `ja_expired_session_cache{outcome=miss}` | Gauge                         | Miss count for the expired session cache.                 |

### JSON Web Token (JWT) metrics

Java Agent exposes the following JWT-related monitoring metrics:

| Metric                       | [Type](#monitor-metric-types) | Description                                       |
| ---------------------------- | ----------------------------- | ------------------------------------------------- |
| `ja_jwt_cache_size`          | Gauge                         | Size of the JWT cache.                            |
| `ja_jwt_cache_eviction`      | Gauge                         | The eviction count for the JWT cache.             |
| `ja_jwt_cache_load`          | Gauge                         | The load count for the JWT cache.                 |
| `ja_jwt_cache_load_time`     | Gauge                         | The load time for the JWT cache, in milliseconds. |
| `ja_jwt_cache{outcome=hit}`  | Gauge                         | The hit count for the JWT cache.                  |
| `ja_jwt_cache{outcome=miss}` | Gauge                         | The miss count for the JWT cache.                 |

### JVM metrics

Java Agent exposes the following JVM-related monitoring metrics:

|   |                                                                                                                                                                                                                                         |
| - | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   | Some `ja_jvm_*` metrics depend on the JVM version and configuration. In particular, GC-related metrics depend on the garbage collector the server uses. The GC metric names are *unstable*, and can change even in a minor JVM release. |

| Metric                                                               | [Type](#monitor-metric-types) | Description                                                                                                             |
| -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `ja_jvm_available_cpus`                                              | Gauge                         | Number of processors available to the Java virtual machine.                                                             |
| `ja_jvm_class_loading_loaded`                                        | Gauge                         | Number of classes loaded since the Java virtual machine started.                                                        |
| `ja_jvm_class_loading_unloaded`                                      | Gauge                         | Number of classes unloaded since the Java virtual machine started.                                                      |
| `ja_jvm_free_used_memory_bytes`                                      | Gauge                         | Bytes of free memory allocated to the Java virtual machine                                                              |
| `ja_jvm_garbage_collector_g1_old_generation_collection`              | Gauge                         | Number of collections performed by the "G1 old generation" garbage collection algorithm.                                |
| `ja_jvm_garbage_collector_g1_old_generation_time`                    | Gauge                         | Approximate accumulated time taken by the "G1 old generation" garbage collection algorithm.                             |
| `ja_jvm_garbage_collector_g1_young_generation_collection`            | Gauge                         | Number of collections performed by the "G1 young generation" garbage collection algorithm.                              |
| `ja_jvm_garbage_collector_g1_young_generation_time`                  | Gauge                         | Approximate accumulated time taken by the "G1 young generation" garbage collection algorithm.                           |
| `ja_jvm_max_memory_bytes`                                            | Gauge                         | Maximum amount of memory the Java virtual machine attempts to use.                                                      |
| `ja_jvm_memory_usage_heap_init`                                      | Gauge                         | Amount of heap memory the Java virtual machine initially requested from the operating system.                           |
| `ja_jvm_memory_usage_heap_max`                                       | Gauge                         | Maximum amount of heap memory the Java virtual machine attempts to use.                                                 |
| `ja_jvm_memory_usage_heap_committed`                                 | Gauge                         | Amount of heap memory committed for the Java virtual machine to use.                                                    |
| `ja_jvm_memory_usage_heap_used`                                      | Gauge                         | Amount of heap memory used by the Java virtual machine.                                                                 |
| `ja_jvm_memory_usage_heap_usage`                                     | Gauge                         | Amount of heap memory allocated to the Java virtual machine.                                                            |
| `ja_jvm_memory_usage_total_init`                                     | Gauge                         | Amount of memory the Java virtual machine initially requested from the operating system.                                |
| `ja_jvm_memory_usage_total_max`                                      | Gauge                         | Maximum amount of memory the Java virtual machine attempts to use.                                                      |
| `ja_jvm_memory_usage_non_heap_init`                                  | Gauge                         | Amount of non-heap memory the Java virtual machine initially requested from the operating system.                       |
| `ja_jvm_memory_usage_non_heap_max`                                   | Gauge                         | Maximum amount of non-heap memory the Java virtual machine attempts to use.                                             |
| `ja_jvm_memory_usage_non_heap_committed`                             | Gauge                         | Amount of non-heap memory committed for the Java virtual machine to use.                                                |
| `ja_jvm_memory_usage_non_heap_used`                                  | Gauge                         | Amount of non-heap memory used by the Java virtual machine.                                                             |
| `ja_jvm_memory_usage_non_heap_usage`                                 | Gauge                         | Amount of non-heap memory allocated to the Java virtual machine.                                                        |
| `ja_jvm_memory_usage_pools_codeheap_non_nmethods_committed`          | Gauge                         | Amount of "non-method code cache heap" memory committed for the Java virtual machine to use.                            |
| `ja_jvm_memory_usage_pools_codeheap_non_nmethods_init`               | Gauge                         | Amount of "non-method code cache heap" memory the Java virtual machine initially requested from the operating system.   |
| `ja_jvm_memory_usage_pools_codeheap_non_nmethods_max`                | Gauge                         | Maximum amount of "non-method code cache heap" memory the Java virtual machine attempts to use.                         |
| `ja_jvm_memory_usage_pools_codeheap_non_nmethods_usage`              | Gauge                         | Amount of "non-method code cache heap" memory allocated to the Java virtual machine.                                    |
| `ja_jvm_memory_usage_pools_codeheap_non_nmethods_used`               | Gauge                         | Amount of "non-method code cache heap" memory used by the Java virtual machine.                                         |
| `ja_jvm_memory_usage_pools_codeheap_non_profiled_nmethods_committed` | Gauge                         | Amount of "non-profiled code cache heap" memory committed for the Java virtual machine to use.                          |
| `ja_jvm_memory_usage_pools_codeheap_non_profiled_nmethods_init`      | Gauge                         | Amount of "non-profiled code cache heap" memory the Java virtual machine initially requested from the operating system. |
| `ja_jvm_memory_usage_pools_codeheap_non_profiled_nmethods_max`       | Gauge                         | Maximum amount of "non-profiled code cache heap" memory the Java virtual machine attempts to use.                       |
| `ja_jvm_memory_usage_pools_codeheap_non_profiled_nmethods_usage`     | Gauge                         | Amount of "non-profiled code cache heap" memory allocated to the Java virtual machine.                                  |
| `ja_jvm_memory_usage_pools_codeheap_non_profiled_nmethods_used`      | Gauge                         | Amount of "non-profiled code cache heap" memory used by the Java virtual machine.                                       |
| `ja_jvm_memory_usage_pools_codeheap_profiled_nmethods_committed`     | Gauge                         | Amount of "profiled code cache heap" memory committed for the Java virtual machine to use.                              |
| `ja_jvm_memory_usage_pools_codeheap_profiled_nmethods_init`          | Gauge                         | Amount of "profiled code cache heap" memory the Java virtual machine initially requested from the operating system.     |
| `ja_jvm_memory_usage_pools_codeheap_profiled_nmethods_max`           | Gauge                         | Maximum amount of "profiled code cache heap" memory the Java virtual machine attempts to use.                           |
| `ja_jvm_memory_usage_pools_codeheap_profiled_nmethods_usage`         | Gauge                         | Amount of "profiled code cache heap" memory allocated to the Java virtual machine.                                      |
| `ja_jvm_memory_usage_pools_codeheap_profiled_nmethods_used`          | Gauge                         | Amount of "profiled code cache heap" memory used by the Java virtual machine.                                           |
| `ja_jvm_memory_usage_pools_compressed_class_space_init`              | Gauge                         | Amount of "compressed class space" memory the Java virtual machine initially requested from the operating system.       |
| `ja_jvm_memory_usage_pools_compressed_class_space_max`               | Gauge                         | Maximum amount of "compressed class space" memory the Java virtual machine attempts to use.                             |
| `ja_jvm_memory_usage_pools_compressed_class_space_committed`         | Gauge                         | Amount of "compressed class space" memory committed for the Java virtual machine to use.                                |
| `ja_jvm_memory_usage_pools_compressed_class_space_used`              | Gauge                         | Amount of "compressed class space" memory used by the Java virtual machine.                                             |
| `ja_jvm_memory_usage_pools_compressed_class_space_usage`             | Gauge                         | Amount of "compressed class space" memory allocated to the Java virtual machine.                                        |
| `ja_jvm_memory_usage_pools_g1_eden_space_committed`                  | Gauge                         | Amount of "G1 eden space" memory committed for the Java virtual machine to use.                                         |
| `ja_jvm_memory_usage_pools_g1_eden_space_init`                       | Gauge                         | Amount of "G1 eden space" memory the Java virtual machine initially requested from the operating system.                |
| `ja_jvm_memory_usage_pools_g1_eden_space_max`                        | Gauge                         | Maximum amount of "G1 eden space" memory the Java virtual machine attempts to use.                                      |
| `ja_jvm_memory_usage_pools_g1_eden_space_usage`                      | Gauge                         | Amount of "G1 eden space" memory allocated to the Java virtual machine.                                                 |
| `ja_jvm_memory_usage_pools_g1_eden_space_used`                       | Gauge                         | Amount of "G1 eden space" memory used by the Java virtual machine.                                                      |
| `ja_jvm_memory_usage_pools_g1_eden_space_used_after_gc`              | Gauge                         | Amount of "G1 eden space" memory used by the Java virtual machine after garbage collection.                             |
| `ja_jvm_memory_usage_pools_g1_old_gen_committed`                     | Gauge                         | Amount of "G1 old generation" memory committed for the Java virtual machine to use.                                     |
| `ja_jvm_memory_usage_pools_g1_old_gen_init`                          | Gauge                         | Amount of "G1 old generation" memory the Java virtual machine initially requested from the operating system.            |
| `ja_jvm_memory_usage_pools_g1_old_gen_max`                           | Gauge                         | Maximum amount of "G1 old generation" memory the Java virtual machine attempts to use.                                  |
| `ja_jvm_memory_usage_pools_g1_old_gen_usage`                         | Gauge                         | Amount of "G1 old generation" memory allocated to the Java virtual machine.                                             |
| `ja_jvm_memory_usage_pools_g1_old_gen_used`                          | Gauge                         | Amount of "G1 old generation" memory used by the Java virtual machine.                                                  |
| `ja_jvm_memory_usage_pools_g1_old_gen_used_after_gc`                 | Gauge                         | Amount of "G1 old generation" memory used by the Java virtual machine after garbage collection.                         |
| `ja_jvm_memory_usage_pools_g1_survivor_space_committed`              | Gauge                         | Amount of "G1 survivor space" memory committed for the Java virtual machine to use.                                     |
| `ja_jvm_memory_usage_pools_g1_survivor_space_init`                   | Gauge                         | Amount of "G1 survivor space" memory the Java virtual machine initially requested from the operating system.            |
| `ja_jvm_memory_usage_pools_g1_survivor_space_max`                    | Gauge                         | Maximum amount of "G1 survivor space" memory the Java virtual machine attempts to use.                                  |
| `ja_jvm_memory_usage_pools_g1_survivor_space_usage`                  | Gauge                         | Amount of "G1 survivor space" memory allocated to the Java virtual machine.                                             |
| `ja_jvm_memory_usage_pools_g1_survivor_space_used`                   | Gauge                         | Amount of "G1 survivor space" memory used by the Java virtual machine.                                                  |
| `ja_jvm_memory_usage_pools_g1_survivor_space_used_after_gc`          | Gauge                         | Amount of "G1 survivor space" memory used by the Java virtual machine after garbage collection.                         |
| `ja_jvm_memory_usage_pools_metaspace_init`                           | Gauge                         | Amount of "metaspace" memory the Java virtual machine initially requested from the operating system.                    |
| `ja_jvm_memory_usage_pools_metaspace_max`                            | Gauge                         | Maximum amount of "metaspace" memory the Java virtual machine attempts to use.                                          |
| `ja_jvm_memory_usage_pools_metaspace_committed`                      | Gauge                         | Amount of "metaspace" memory committed for the Java virtual machine to use.                                             |
| `ja_jvm_memory_usage_pools_metaspace_used`                           | Gauge                         | Amount of "metaspace" memory used by the Java virtual machine.                                                          |
| `ja_jvm_memory_usage_pools_metaspace_usage`                          | Gauge                         | Amount of "metaspace" memory allocated to the Java virtual machine.                                                     |
| `ja_jvm_memory_usage_total_committed`                                | Gauge                         | Amount of memory committed for the Java virtual machine to use.                                                         |
| `ja_jvm_memory_usage_total_used`                                     | Gauge                         | Amount of memory used by the Java virtual machine.                                                                      |
| `ja_jvm_thread_state_blocked_result`                                 | Gauge                         | Number of threads in the BLOCKED state.                                                                                 |
| `ja_jvm_thread_state_result`                                         | Gauge                         | Number of live threads including both daemon and non-daemon threads.                                                    |
| `ja_jvm_thread_state_daemon_result`                                  | Gauge                         | Number of live daemon threads.                                                                                          |
| `ja_jvm_thread_state_new_result`                                     | Gauge                         | Number of threads in the NEW state.                                                                                     |
| `ja_jvm_thread_state_runnable_result`                                | Gauge                         | Number of threads in the RUNNABLE state.                                                                                |
| `ja_jvm_thread_state_terminated_result`                              | Gauge                         | Number of threads in the TERMINATED state.                                                                              |
| `ja_jvm_thread_state_timed_waiting_result`                           | Gauge                         | Number of threads in the TIMED\_WAITING state.                                                                          |
| `ja_jvm_thread_state_waiting_result`                                 | Gauge                         | Number of threads in the WAITING state.                                                                                 |
| `ja_jvm_used_memory_bytes`                                           | Gauge                         | Amount of memory used by the Java virtual machine                                                                       |

### Not-enforced rule metrics

Java Agent exposes the following not-enforced rule monitoring metrics:

| Metric                                                  | [Type](#monitor-metric-types) | Description                                                               |
| ------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------- |
| `ja_notenforced_uri_matched_cache_size`                 | Gauge                         | Size of the not-enforced URI matched cache.                               |
| `ja_notenforced_uri_matched_cache_eviction`             | Gauge                         | Eviction count for the not-enforced URI matched cache.                    |
| `ja_notenforced_uri_matched_cache_load`                 | Gauge                         | Load count for the not-enforced URI matched cache.                        |
| `ja_notenforced_uri_matched_cache_load_time`            | Gauge                         | Load time for the not-enforced URI matched cache, in milliseconds.        |
| `ja_notenforced_uri_matched_cache{outcome=hit}`         | Gauge                         | Hit count for the not-enforced URI matched cache.                         |
| `ja_notenforced_uri_matched_cache{outcome=miss}`        | Gauge                         | Miss count for the not-enforced URI matched cache.                        |
| `ja_notenforced_uri_unmatched_cache_size`               | Gauge                         | Size of the not-enforced URI unmatched cache.                             |
| `ja_notenforced_uri_unmatched_cache_eviction`           | Gauge                         | Eviction count for the not-enforced URI unmatched cache.                  |
| `ja_notenforced_uri_unmatched_cache_load`               | Gauge                         | Load count for the not-enforced URI unmatched cache.                      |
| `ja_notenforced_uri_unmatched_cache_load_time`          | Gauge                         | Load time for the not-enforced URI unmatched cache, in milliseconds.      |
| `ja_notenforced_uri_unmatched_cache{outcome=hit}`       | Gauge                         | Hit count for the not-enforced URI unmatched cache.                       |
| `ja_notenforced_uri_unmatched_cache{outcome=miss}`      | Gauge                         | Miss count for the not-enforced URI unmatched cache.                      |
| `ja_notenforced_ip_matched_cache_size`                  | Gauge                         | Size of the not-enforced IP matched cache.                                |
| `ja_notenforced_ip_matched_cache_eviction`              | Gauge                         | Eviction count for the not-enforced IP matched cache.                     |
| `ja_notenforced_ip_matched_cache_load`                  | Gauge                         | Load count for the not-enforced IP matched cache.                         |
| `ja_notenforced_ip_matched_cache_load_time`             | Gauge                         | Load time for the not-enforced IP matched cache, in milliseconds.         |
| `ja_notenforced_ip_matched_cache{outcome=hit}`          | Gauge                         | Hit count for the not-enforced IP matched cache.                          |
| `ja_notenforced_ip_matched_cache{outcome=miss}`         | Gauge                         | Miss count for the not-enforced IP matched cache.                         |
| `ja_notenforced_ip_unmatched_cache_size`                | Gauge                         | Size of the not-enforced IP unmatched cache.                              |
| `ja_notenforced_ip_unmatched_cache_eviction`            | Gauge                         | Eviction count for the not-enforced IP unmatched cache.                   |
| `ja_notenforced_ip_unmatched_cache_load`                | Gauge                         | Load count for the not-enforced IP unmatched cache.                       |
| `ja_notenforced_ip_unmatched_cache_load_time`           | Gauge                         | Load time for the not-enforced IP unmatched cache, in milliseconds.       |
| `ja_notenforced_ip_unmatched_cache{outcome=hit}`        | Gauge                         | Hit count for the not-enforced IP unmatched cache.                        |
| `ja_notenforced_ip_unmatched_cache{outcome=miss}`       | Gauge                         | Miss count for the not-enforced IP unmatched cache.                       |
| `ja_notenforced_compound_matched_cache_size`            | Gauge                         | Size of the not-enforced compound matched cache.                          |
| `ja_notenforced_compound_matched_cache_eviction`        | Gauge                         | Eviction count for the not-enforced compound matched cache.               |
| `ja_notenforced_compound_matched_cache_load`            | Gauge                         | Load count for the not-enforced compound matched cache.                   |
| `ja_notenforced_compound_matched_cache_load_time`       | Gauge                         | Load time for the not-enforced compound matched cache, in milliseconds.   |
| `ja_notenforced_compound_matched_cache{outcome=hit}`    | Gauge                         | Hit count for the not-enforced compound matched cache.                    |
| `ja_notenforced_compound_matched_cache{outcome=miss}`   | Gauge                         | Miss count for the not-enforced compound matched cache.                   |
| `ja_notenforced_compound_unmatched_cache_size`          | Gauge                         | Size of the not-enforced compound unmatched cache.                        |
| `ja_notenforced_compound_unmatched_cache_eviction`      | Gauge                         | Eviction count for the not-enforced compound unmatched cache.             |
| `ja_notenforced_compound_unmatched_cache_load`          | Gauge                         | Load count for the not-enforced compound unmatched cache.                 |
| `ja_notenforced_compound_unmatched_cache_load_time`     | Gauge                         | Load time for the not-enforced compound unmatched cache, in milliseconds. |
| `ja_notenforced_compound_unmatched_cache{outcome=hit}`  | Gauge                         | Hit count for the not-enforced compound unmatched cache.                  |
| `ja_notenforced_compound_unmatched_cache{outcome=miss}` | Gauge                         | Miss count for the not-enforced compound unmatched cache.                 |

### Policy decision metrics

Java Agent exposes the following policy decision monitoring metrics:

| Metric                                   | [Type](#monitor-metric-types) | Description                                               |
| ---------------------------------------- | ----------------------------- | --------------------------------------------------------- |
| `ja_policy_decision_cache_size`          | Gauge                         | Size of the policy decision cache.                        |
| `ja_policy_decision_cache_eviction`      | Gauge                         | Eviction count for the policy decision cache.             |
| `ja_policy_decision_cache_load`          | Gauge                         | Load count for the policy decision cache.                 |
| `ja_policy_decision_cache_load_time`     | Gauge                         | Load time for the policy decision cache, in milliseconds. |
| `ja_policy_decision_cache{outcome=hit}`  | Gauge                         | Hit count for the policy decision cache.                  |
| `ja_policy_decision_cache{outcome=miss}` | Gauge                         | Miss count for the policy decision cache.                 |

### POST data preservation metrics

Java Agent exposes the following POST data preservation monitoring metrics:

| Metric                       | [Type](#monitor-metric-types) | Description                                                      |
| ---------------------------- | ----------------------------- | ---------------------------------------------------------------- |
| `ja_pdp_cache_size`          | Gauge                         | Size of the POST data preservation cache.                        |
| `ja_pdp_cache_eviction`      | Gauge                         | Eviction count for the POST data preservation cache.             |
| `ja_pdp_cache_load`          | Gauge                         | Load count for the POST data preservation cache.                 |
| `ja_pdp_cache_load_time`     | Gauge                         | Load time for the POST data preservation cache, in milliseconds. |
| `ja_pdp_cache{outcome=hit}`  | Gauge                         | Hit count for the POST data preservation cache.                  |
| `ja_pdp_cache{outcome=miss}` | Gauge                         | Miss count for the POST data preservation cache.                 |

### Request metrics

Java Agent exposes the following request monitoring metrics:

| Metric                                         | [Type](#monitor-metric-types) | Description                                         |
| ---------------------------------------------- | ----------------------------- | --------------------------------------------------- |
| `ja_requests{access=access,decision=decision}` | Timer                         | Rate of granted/denied requests and their decision. |

**Request metrics labels**

| Label      | Values                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `access`   | * `granted`

* `denied`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `decision` | - `not-enforced`: Request matched a not-enforced rule.

- `no-valid-token`: Request didn't have a valid SSO token or an OpenID Connect JWT.

- `allowed-by-policy`: Request matched a policy that allowed access.

- `denied-by-policy`: Request matched a policy that denied access.

- `am-unavailable`: The Advanced Identity Cloud or AM instance wasn't reachable.

- `bad-request`: The request URI was badly formed.

- `unexpected-exception`: An unexpected exception occurred within the agent. |

### Session information metrics

Java Agent exposes the following session information monitoring metrics:

| Metric                                | [Type](#monitor-metric-types) | Description                                                   |
| ------------------------------------- | ----------------------------- | ------------------------------------------------------------- |
| `ja_session_info_cache_size`          | Gauge                         | Size of the session information cache.                        |
| `ja_session_info_cache_eviction`      | Gauge                         | Eviction count for the session information cache.             |
| `ja_session_info_cache_load`          | Gauge                         | Load count for the session information cache.                 |
| `ja_session_info_cache_load_time`     | Gauge                         | Load time for the session information cache, in milliseconds. |
| `ja_session_info_cache{outcome=hit}`  | Gauge                         | Hit count for the session information cache.                  |
| `ja_session_info_cache{outcome=miss}` | Gauge                         | Miss count for the session information cache.                 |

### SSO token to JWT exchange metrics

Java Agent exposes the following SSO token to JWT exchange monitoring metrics:

| Metric                                | [Type](#monitor-metric-types) | Description                                            |
| ------------------------------------- | ----------------------------- | ------------------------------------------------------ |
| `ja_sso_exchange_cache_size`          | Gauge                         | Size of the SSO token exchange cache.                  |
| `ja_sso_exchange_cache_eviction`      | Gauge                         | Eviction count for the SSO token exchange cache.       |
| `ja_sso_exchange_cache_load`          | Gauge                         | Load count for the SSO token exchange cache.           |
| `ja_sso_exchange_cache_load_time`     | Gauge                         | Load time for the SSO token exchange, in milliseconds. |
| `ja_sso_exchange_cache{outcome=hit}`  | Gauge                         | Hit count for the SSO token exchange cache.            |
| `ja_sso_exchange_cache{outcome=miss}` | Gauge                         | Miss count for the SSO token exchange cache.           |

### WebSocket metrics

Java Agent exposes the following WebSocket-related monitoring metrics:

| Metric                                        | [Type](#monitor-metric-types) | Description                                                                                                   |
| --------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `ja_websocket_last_received`                  | Gauge                         | Number of milliseconds since anything was received over the WebSocket, for example, a ping or a notification. |
| `ja_websocket_last_sent`                      | Gauge                         | Number of milliseconds since anything was sent over the WebSocket.                                            |
| `ja_websocket_config_change_received_total`   | Counter                       | Count of WebSocket configuration change notifications received.(1)                                            |
| `ja_websocket_config_change_processed_total`  |                               | Count of WebSocket configuration change notifications processed.                                              |
| `ja_websocket_policy_change_received_total`   | Counter                       | Count of WebSocket policy change notifications received.(1)                                                   |
| `ja_websocket_policy_change_processed_total`  | Counter                       | Count of WebSocket policy change notifications processed.                                                     |
| `ja_websocket_session_logout_received_total`  | Counter                       | Count of WebSocket session logout notifications received.(1)                                                  |
| `ja_websocket_session_logout_processed_total` | Counter                       | Count of WebSocket session logout notifications processed.                                                    |
| `ja_websocket_ping_pong`                      | Timer                         | Ping/pong round trip time.                                                                                    |

(1) Some can be ignored if the realm or agent name isn't applicable.
