# JMX Discovery

# Introduction

This plugin is designed to monitor Java applications through JMX (Java Management Extensions), collecting key metrics from the MBeans exposed by the server. These metrics include values related to CPU usage, memory, internal application activity and other statistics exposed by the configured MBeans, allowing to have a precise control of the Java platform status.

The plugin connects to the configured JMX endpoints, queries the metrics defined in the configuration files, and automatically generates agents and modules in XML format that are sent to the Pandora FMS server for processing. This system allows distributed and scalable monitoring, managing multiple instances in parallel through processes, and facilitating integration with enterprise Java systems in a simple and flexible way.

# Prerrequisites

<p class="callout warning">**Java is required on the system running the plugin**</p>

**1. Enabling Remote JMX Monitoring for Java Applications**  
A Java application does not require additional software installed, but it must be started with the following command line options to enable support for remote JMX monitoring.  
  
At the very least, if you only want to start monitoring a basic Java application on a local host without security, use these options:

```
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.rmi.port=9090 \
-Djava.rmi.server.hostname=localhost"
```

This configures Java to accept incoming JMX connections on port 9090 from localhost only, without requiring authentication or SSL.

If authentication is required, it must be enabled:

```
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.rmi.port=9090 \
-Djava.rmi.server.hostname=localhost \
-Dcom.sun.management.jmxremote.password.file=/usr/local/tomcat/conf/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=/usr/local/tomcat/conf/jmxremote.access
```

**2. The system running the plugin must have connectivity and be able to reach the JMX server.**

# Parameters

**Parameters**

<table border="1" id="bkmrk---conf-ruta-al-archi"><tbody><tr><td>--conf</td><td>Path to configuration file</td></tr></tbody></table>

**Configuration file (--conf)**

```
[CONF]
user = < user >
password = < password > 
jmx_url = < URL of the primary JMX environment. MBeans in this environment will be detected and metrics for the selected MBeans will be monitored for all configured instances >
module_prefix = < prefix for modules >
agent_prefix = < prefix for agents >
agents_group_name = <group name for the agent>
interval = < agent creation interval >
threads = < number of threads >
temporal = < temporary directory path >
transfer_mode = < transfer mode >
tentacle_ip = < tentacle path >
tentacle_port = < tentacle port >
tentacle_opts = < tentacle options >
data_dir = < .data file path >
allow_regexp = < Regexp pattern. Metrics that match the pattern will be monitored >
deny_regexp = < Regexp pattern. Metrics that match the pattern will be discarded >
jmx_mbeans= < list with the names of the Mbeans to be monitored, separated by commas >

[MODULE_NAMES]
< Name of the metric to be renamed in the module name | desired module name for that metric >
```

 **Example**

```
[CONF]
user = controlRole
password = myPassword
jmx_url = service:jmx:rmi:///jndi/rmi://172.17.0.2:9010/jmxrmi
module_prefix = tomcat. 
agent_prefix = tomcat.
agents_group_name = jmx
interval = 300
threads = 4
temporal = /tmp
transfer_mode = tentacle
tentacle_client = tentacle_client
tentacle_ip =172.42.42.101
tentacle_port =41121
tentacle_opts =
data_dir = /var/spool/pandora/data_in/
allow_regexp = ^Catalina:.*
deny_regexp = 
jmx_mbeans=["Catalina:type=Service","java.lang:type=ClassLoading","Catalina:type=Deployer,host=localhost","java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool"]

[MODULE_NAMES]
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/PeakUsage/max | Memory.usage.max
Catalina:type=Service/name | Catalina.service.name
```

**Instance file (--target\_instances)**

Specify in each line the connection url to the Java instance.

**Example**

```
service:jmx:rmi:///jndi/rmi://172.17.0.1:9090/jmxrmi
service:jmx:rmi:///jndi/rmi://172.12.0.23:9090/jmxrmi
service:jmx:rmi:///jndi/rmi://172.11.0.1:9090/jmxrmi
```

**Metrics file (--target\_metrics)**

Specify metrics line by line.

For each line in the configuration file an attribute must be added and this will create a module with that statistic in Pandora. If it is necessary to configure thresholds, they must be specified to the right of the attribute, separating each threshold by |. Example:

**Metric without threshold**

java.lang:type=Threading/ThreadCount

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/b2mimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/b2mimage.png)

**Metric with threshold**

java.lang:type=Threading/TotalStartedThreadCount|min\_warning 30|min\_critical 45

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/p0Jimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/p0Jimage.png)  
  
**Example**

```
java.lang:type=Threading/TotalThreadAllocatedBytes 
java.lang:type=Threading/CurrentThreadAllocatedBytes
java.lang:type=Threading/ThreadAllocatedMemoryEnabled
java.lang:type=Threading/ThreadAllocatedMemorySupported
java.lang:type=Threading/ThreadCount
java.lang:type=Threading/TotalStartedThreadCount|min_warning 30|min_critical 45
java.lang:type=Threading/AllThreadIds
java.lang:type=Threading/CurrentThreadCpuTime
java.lang:type=Threading/CurrentThreadUserTime
java.lang:type=Threading/ThreadCpuTimeSupported
java.lang:type=Threading/ThreadCpuTimeEnabled
java.lang:type=Threading/ThreadContentionMonitoringEnabled
java.lang:type=Threading/ThreadContentionMonitoringSupported
java.lang:type=Threading/CurrentThreadCpuTimeSupported
java.lang:type=Threading/ObjectMonitorUsageSupported
java.lang:type=Threading/SynchronizerUsageSupported
java.lang:type=Threading/PeakThreadCount
java.lang:type=Threading/DaemonThreadCount
java.lang:type=Threading/ObjectName
```

# Metrics

The plugin accepts Mbeans Metrics, the following metrics can be specified and if the system has that Mbean will be able to monitor it.

**MBean: Catalina:type=Service**

Catalina:type=Service/modelerType  
Catalina:type=Service/stateName  
Catalina:type=Service/connectorNames  
Catalina:type=Service/name

  
**MBean: Catalina:type=StringCache**

Catalina:type=StringCache/accessCount  
Catalina:type=StringCache/modelerType  
Catalina:type=StringCache/cacheSize  
Catalina:type=StringCache/hitCount  
Catalina:type=StringCache/trainThreshold  
Catalina:type=StringCache/charEnabled  
Catalina:type=StringCache/byteEnabled

**MBean: JMImplementation:type=MBeanServerDelegate**

JMImplementation:type=MBeanServerDelegate/MBeanServerId  
JMImplementation:type=MBeanServerDelegate/SpecificationName  
JMImplementation:type=MBeanServerDelegate/SpecificationVersion  
JMImplementation:type=MBeanServerDelegate/SpecificationVendor  
JMImplementation:type=MBeanServerDelegate/ImplementationName  
JMImplementation:type=MBeanServerDelegate/ImplementationVersion  
JMImplementation:type=MBeanServerDelegate/ImplementationVendor  
  
**MBean: java.lang:type=Runtime**

java.lang:type=Runtime/Name  
java.lang:type=Runtime/ClassPath  
java.lang:type=Runtime/BootClassPathSupported  
java.lang:type=Runtime/VmName  
java.lang:type=Runtime/VmVendor  
java.lang:type=Runtime/VmVersion  
java.lang:type=Runtime/LibraryPath

  
**MBean: java.lang:type=Threading**

java.lang:type=Threading/TotalThreadAllocatedBytes  
java.lang:type=Threading/CurrentThreadAllocatedBytes  
java.lang:type=Threading/ThreadAllocatedMemoryEnabled  
java.lang:type=Threading/ThreadAllocatedMemorySupported  
java.lang:type=Threading/ThreadCount  
java.lang:type=Threading/TotalStartedThreadCount  
java.lang:type=Threading/AllThreadIds  
java.lang:type=Threading/CurrentThreadCpuTime  
java.lang:type=Threading/CurrentThreadUserTime  
java.lang:type=Threading/ThreadCpuTimeSupported  
java.lang:type=Threading/ThreadCpuTimeEnabled  
java.lang:type=Threading/ThreadContentionMonitoringEnabled  
java.lang:type=Threading/ThreadContentionMonitoringSupported  
java.lang:type=Threading/CurrentThreadCpuTimeSupported  
java.lang:type=Threading/ObjectMonitorUsageSupported  
java.lang:type=Threading/SynchronizerUsageSupported  
java.lang:type=Threading/PeakThreadCount  
java.lang:type=Threading/DaemonThreadCount  
java.lang:type=Threading/ObjectName  
  
**MBean: java.nio:name=direct,type=BufferPool**

java.nio:name=direct,type=BufferPool/Name  
java.nio:name=direct,type=BufferPool/Count  
java.nio:name=direct,type=BufferPool/TotalCapacity  
java.nio:name=direct,type=BufferPool/MemoryUsed  
java.nio:name=direct,type=BufferPool/ObjectName  
  
**MBean: java.lang:name=G1 Young Generation,type=GarbageCollector**

java.lang:name=G1 Young Generation,type=GarbageCollector/LastGcInfo/GcThreadCount  
java.lang:name=G1 Young Generation,type=GarbageCollector/LastGcInfo/duration  
java.lang:name=G1 Young Generation,type=GarbageCollector/LastGcInfo/endTime  
java.lang:name=G1 Young Generation,type=GarbageCollector/LastGcInfo/id  
java.lang:name=G1 Young Generation,type=GarbageCollector/LastGcInfo/memoryUsageAfterGc  
java.lang:name=G1 Young Generation,type=GarbageCollector/LastGcInfo/memoryUsageBeforeGc  
java.lang:name=G1 Young Generation,type=GarbageCollector/LastGcInfo/startTime  
java.lang:name=G1 Young Generation,type=GarbageCollector/CollectionCount  
java.lang:name=G1 Young Generation,type=GarbageCollector/CollectionTime  
java.lang:name=G1 Young Generation,type=GarbageCollector/MemoryPoolNames  
java.lang:name=G1 Young Generation,type=GarbageCollector/Name  
java.lang:name=G1 Young Generation,type=GarbageCollector/Valid  
java.lang:name=G1 Young Generation,type=GarbageCollector/ObjectName  
  
  
**MBean: java.lang:name=CodeCacheManager,type=MemoryManager**

java.lang:name=CodeCacheManager,type=MemoryManager/MemoryPoolNames  
java.lang:name=CodeCacheManager,type=MemoryManager/Name  
java.lang:name=CodeCacheManager,type=MemoryManager/Valid  
java.lang:name=CodeCacheManager,type=MemoryManager/ObjectName

  
**MBean: Catalina:type=Valve,host=localhost,name=ErrorReportValve**

Catalina:type=Valve,host=localhost,name=ErrorReportValve/modelerType  
Catalina:type=Valve,host=localhost,name=ErrorReportValve/stateName  
Catalina:type=Valve,host=localhost,name=ErrorReportValve/showReport  
Catalina:type=Valve,host=localhost,name=ErrorReportValve/showServerInfo  
Catalina:type=Valve,host=localhost,name=ErrorReportValve/asyncSupported  
Catalina:type=Valve,host=localhost,name=ErrorReportValve/className  
  
**MBean: java.lang:type=ClassLoading**

java.lang:type=ClassLoading/Verbose  
java.lang:type=ClassLoading/TotalLoadedClassCount  
java.lang:type=ClassLoading/UnloadedClassCount  
java.lang:type=ClassLoading/LoadedClassCount  
java.lang:type=ClassLoading/ObjectName

  
**MBean: java.lang:name=G1 Survivor Space,type=MemoryPool**

java.lang:name=G1 Survivor Space,type=MemoryPool/Usage/committed  
java.lang:name=G1 Survivor Space,type=MemoryPool/Usage/init  
java.lang:name=G1 Survivor Space,type=MemoryPool/Usage/max  
java.lang:name=G1 Survivor Space,type=MemoryPool/Usage/used  
java.lang:name=G1 Survivor Space,type=MemoryPool/PeakUsage/committed  
java.lang:name=G1 Survivor Space,type=MemoryPool/PeakUsage/init  
java.lang:name=G1 Survivor Space,type=MemoryPool/PeakUsage/max  
java.lang:name=G1 Survivor Space,type=MemoryPool/PeakUsage/used  
java.lang:name=G1 Survivor Space,type=MemoryPool/MemoryManagerNames  
  
  
**MBean: Catalina:type=Connector,port=8080**

Catalina:type=Connector,port=8080/modelerType  
Catalina:type=Connector,port=8080/maxPostSize  
Catalina:type=Connector,port=8080/proxyName  
Catalina:type=Connector,port=8080/scheme  
Catalina:type=Connector,port=8080/redirectPortWithOffset  
Catalina:type=Connector,port=8080/className  
Catalina:type=Connector,port=8080/acceptCount  
Catalina:type=Connector,port=8080/secret  
Catalina:type=Connector,port=8080/secure  
Catalina:type=Connector,port=8080/threadPriority  
Catalina:type=Connector,port=8080/maxSwallowSize  
Catalina:type=Connector,port=8080/ajpFlush  
Catalina:type=Connector,port=8080/maxSavePostSize  
Catalina:type=Connector,port=8080/proxyPort  
Catalina:type=Connector,port=8080/sslProtocols  
Catalina:type=Connector,port=8080/portWithOffset  
Catalina:type=Connector,port=8080/protocol  
Catalina:type=Connector,port=8080/maxParameterCount  
Catalina:type=Connector,port=8080/useIPVHosts  
Catalina:type=Connector,port=8080/stateName  
Catalina:type=Connector,port=8080/redirectPort  
Catalina:type=Connector,port=8080/allowTrace  
Catalina:type=Connector,port=8080/ciphers  
Catalina:type=Connector,port=8080/protocolHandlerClassName  
Catalina:type=Connector,port=8080/maxThreads  
Catalina:type=Connector,port=8080/connectionTimeout  
Catalina:type=Connector,port=8080/tcpNoDelay  
Catalina:type=Connector,port=8080/useBodyEncodingForURI  
Catalina:type=Connector,port=8080/connectionLinger  
Catalina:type=Connector,port=8080/processorCache  
Catalina:type=Connector,port=8080/keepAliveTimeout  
Catalina:type=Connector,port=8080/maxKeepAliveRequests  
Catalina:type=Connector,port=8080/address  
Catalina:type=Connector,port=8080/localPort  
Catalina:type=Connector,port=8080/enableLookups  
Catalina:type=Connector,port=8080/allowedRequestAttributesPattern  
Catalina:type=Connector,port=8080/secretRequired  
Catalina:type=Connector,port=8080/packetSize  
Catalina:type=Connector,port=8080/URIEncoding  
Catalina:type=Connector,port=8080/minSpareThreads  
Catalina:type=Connector,port=8080/executorName  
Catalina:type=Connector,port=8080/ciphersUsed  
Catalina:type=Connector,port=8080/maxHeaderCount  
Catalina:type=Connector,port=8080/port  
Catalina:type=Connector,port=8080/portOffset  
Catalina:type=Connector,port=8080/xpoweredBy  
  
**MBean: java.lang:name=Metaspace,type=MemoryPool**

java.lang:name=Metaspace,type=MemoryPool/Usage/committed  
java.lang:name=Metaspace,type=MemoryPool/Usage/init  
java.lang:name=Metaspace,type=MemoryPool/Usage/max  
java.lang:name=Metaspace,type=MemoryPool/Usage/used  
java.lang:name=Metaspace,type=MemoryPool/PeakUsage/committed  
java.lang:name=Metaspace,type=MemoryPool/PeakUsage/init  
java.lang:name=Metaspace,type=MemoryPool/PeakUsage/max  
java.lang:name=Metaspace,type=MemoryPool/PeakUsage/used  
java.lang:name=Metaspace,type=MemoryPool/MemoryManagerNames  
java.lang:name=Metaspace,type=MemoryPool/UsageThreshold  
java.lang:name=Metaspace,type=MemoryPool/UsageThresholdExceeded  
java.lang:name=Metaspace,type=MemoryPool/UsageThresholdCount  
java.lang:name=Metaspace,type=MemoryPool/UsageThresholdSupported  
  
**MBean: Catalina:type=Valve,name=StandardEngineValve**

Catalina:type=Valve,name=StandardEngineValve/modelerType  
Catalina:type=Valve,name=StandardEngineValve/stateName  
Catalina:type=Valve,name=StandardEngineValve/asyncSupported  
Catalina:type=Valve,name=StandardEngineValve/className  
  
**MBean: Users:type=UserDatabase,database=UserDatabase**

Users:type=UserDatabase,database=UserDatabase/modelerType  
Users:type=UserDatabase,database=UserDatabase/readonly  
Users:type=UserDatabase,database=UserDatabase/roles  
Users:type=UserDatabase,database=UserDatabase/groups  
Users:type=UserDatabase,database=UserDatabase/users  
Users:type=UserDatabase,database=UserDatabase/pathname  
Users:type=UserDatabase,database=UserDatabase/writable  
  
**MBean: Catalina:type=Realm,realmPath=/realm0**

Catalina:type=Realm,realmPath=/realm0/realms  
Catalina:type=Realm,realmPath=/realm0/modelerType  
Catalina:type=Realm,realmPath=/realm0/cacheSize  
Catalina:type=Realm,realmPath=/realm0/lockOutTime  
Catalina:type=Realm,realmPath=/realm0/allRolesMode  
Catalina:type=Realm,realmPath=/realm0/cacheRemovalWarningTime  
Catalina:type=Realm,realmPath=/realm0/realmPath  
Catalina:type=Realm,realmPath=/realm0/className  
Catalina:type=Realm,realmPath=/realm0/failureCount  
Catalina:type=Realm,realmPath=/realm0/validate  
  
**MBean: Catalina:type=Deployer,host=localhost**

Catalina:type=Deployer,host=localhost/configBaseName  
Catalina:type=Deployer,host=localhost/modelerType  
Catalina:type=Deployer,host=localhost/copyXML  
Catalina:type=Deployer,host=localhost/unpackWARs  
Catalina:type=Deployer,host=localhost/className  
Catalina:type=Deployer,host=localhost/deployXML  
Catalina:type=Deployer,host=localhost/contextClass  
  
**MBean: java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool**

java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/Usage/committed  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/Usage/init  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/Usage/max  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/Usage/used  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/PeakUsage/committed  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/PeakUsage/init  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/PeakUsage/max  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/PeakUsage/used  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/MemoryManagerNames  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/UsageThreshold  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/UsageThresholdExceeded  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/UsageThresholdCount  
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/UsageThresholdSupported  
  
**MBean: java.nio:name=mapped,type=BufferPool**

java.nio:name=mapped,type=BufferPool/Name  
java.nio:name=mapped,type=BufferPool/Count  
java.nio:name=mapped,type=BufferPool/TotalCapacity  
java.nio:name=mapped,type=BufferPool/MemoryUsed  
java.nio:name=mapped,type=BufferPool/ObjectName  
  
**MBean: Catalina:type=Server**

Catalina:type=Server/portWithOffset  
Catalina:type=Server/modelerType  
Catalina:type=Server/address  
Catalina:type=Server/serverInfo  
Catalina:type=Server/port  
Catalina:type=Server/stateName  
Catalina:type=Server/portOffset  
Catalina:type=Server/serverBuilt  
  
**MBean: java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool**

java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/Usage/committed  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/Usage/init  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/Usage/max  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/Usage/used  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/PeakUsage/committed  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/PeakUsage/init  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/PeakUsage/max  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/PeakUsage/used  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/MemoryManagerNames  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/UsageThreshold  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/UsageThresholdExceeded  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/UsageThresholdCount  
java.lang:name=CodeHeap 'non-profiled nmethods',type=MemoryPool/UsageThresholdSupported

  
**MBean: com.sun.management:type=HotSpotDiagnostic**

com.sun.management:type=HotSpotDiagnostic/DiagnosticOptions  
com.sun.management:type=HotSpotDiagnostic/ObjectName

  
**MBean: Catalina:type=UtilityExecutor**

Catalina:type=UtilityExecutor/removeOnCancelPolicy  
Catalina:type=UtilityExecutor/activeCount  
Catalina:type=UtilityExecutor/modelerType  
Catalina:type=UtilityExecutor/largestPoolSize  
Catalina:type=UtilityExecutor/poolSize  
Catalina:type=UtilityExecutor/continueExistingPeriodicTasksAfterShutdownPolicy  
Catalina:type=UtilityExecutor/executeExistingDelayedTasksAfterShutdownPolicy  
Catalina:type=UtilityExecutor/taskCount  
Catalina:type=UtilityExecutor/corePoolSize  
Catalina:type=UtilityExecutor/terminating  
Catalina:type=UtilityExecutor/completedTaskCount  
Catalina:type=UtilityExecutor/maximumPoolSize  
Catalina:type=UtilityExecutor/terminated  
Catalina:type=UtilityExecutor/shutdown  
  
**MBean: jdk.management.jfr:type=FlightRecorder**

jdk.management.jfr:type=FlightRecorder/Recordings  
jdk.management.jfr:type=FlightRecorder/Configurations  
jdk.management.jfr:type=FlightRecorder/EventTypes  
jdk.management.jfr:type=FlightRecorder/ObjectName  
  
**MBean: Catalina:type=Mapper**

Catalina:type=Mapper/modelerType  
Catalina:type=Mapper/stateName  
  
**MBean: Catalina:type=Valve,host=localhost,name=StandardHostValve**

Catalina:type=Valve,host=localhost,name=StandardHostValve/modelerType  
Catalina:type=Valve,host=localhost,name=StandardHostValve/stateName  
Catalina:type=Valve,host=localhost,name=StandardHostValve/asyncSupported  
Catalina:type=Valve,host=localhost,name=StandardHostValve/className  
  
**MBean: java.lang:type=OperatingSystem**

java.lang:type=OperatingSystem/OpenFileDescriptorCount  
java.lang:type=OperatingSystem/MaxFileDescriptorCount  
java.lang:type=OperatingSystem/CommittedVirtualMemorySize  
java.lang:type=OperatingSystem/TotalSwapSpaceSize  
java.lang:type=OperatingSystem/FreeSwapSpaceSize  
java.lang:type=OperatingSystem/ProcessCpuTime  
java.lang:type=OperatingSystem/FreeMemorySize  
java.lang:type=OperatingSystem/TotalMemorySize  
java.lang:type=OperatingSystem/CpuLoad  
java.lang:type=OperatingSystem/ProcessCpuLoad  
java.lang:type=OperatingSystem/FreePhysicalMemorySize  
java.lang:type=OperatingSystem/TotalPhysicalMemorySize  
java.lang:type=OperatingSystem/SystemCpuLoad  
java.lang:type=OperatingSystem/Arch  
java.lang:type=OperatingSystem/SystemLoadAverage  
java.lang:type=OperatingSystem/Name  
java.lang:type=OperatingSystem/Version  
java.lang:type=OperatingSystem/AvailableProcessors  
java.lang:type=OperatingSystem/ObjectName  
  
**MBean: java.lang:name=G1 Concurrent GC,type=GarbageCollector**

java.lang:name=G1 Concurrent GC,type=GarbageCollector/LastGcInfo  
java.lang:name=G1 Concurrent GC,type=GarbageCollector/CollectionCount  
java.lang:name=G1 Concurrent GC,type=GarbageCollector/CollectionTime  
java.lang:name=G1 Concurrent GC,type=GarbageCollector/MemoryPoolNames  
java.lang:name=G1 Concurrent GC,type=GarbageCollector/Name  
java.lang:name=G1 Concurrent GC,type=GarbageCollector/Valid  
java.lang:name=G1 Concurrent GC,type=GarbageCollector/ObjectName  
  
**MBean: Catalina:type=Realm,realmPath=/realm0/realm0**

Catalina:type=Realm,realmPath=/realm0/realm0/modelerType  
Catalina:type=Realm,realmPath=/realm0/realm0/stateName  
Catalina:type=Realm,realmPath=/realm0/realm0/allRolesMode  
Catalina:type=Realm,realmPath=/realm0/realm0/realmPath  
Catalina:type=Realm,realmPath=/realm0/realm0/className  
Catalina:type=Realm,realmPath=/realm0/realm0/resourceName  
Catalina:type=Realm,realmPath=/realm0/realm0/localJndiResource  
Catalina:type=Realm,realmPath=/realm0/realm0/validate

  
**MBean: java.lang:type=Compilation**

java.lang:type=Compilation/TotalCompilationTime  
java.lang:type=Compilation/Name  
java.lang:type=Compilation/CompilationTimeMonitoringSupported  
java.lang:type=Compilation/ObjectName  
  
**MBean: Catalina:type=Host,host=localhost**

Catalina:type=Host,host=localhost/modelerType  
Catalina:type=Host,host=localhost/aliases  
Catalina:type=Host,host=localhost/errorReportValveClass  
Catalina:type=Host,host=localhost/backgroundProcessorDelay  
Catalina:type=Host,host=localhost/contextClass  
Catalina:type=Host,host=localhost/children  
Catalina:type=Host,host=localhost/stateName  
Catalina:type=Host,host=localhost/deployXML  
Catalina:type=Host,host=localhost/workDir  
  
**MBean: java.lang:name=G1 Old Gen,type=MemoryPool**

java.lang:name=G1 Old Gen,type=MemoryPool/Usage/committed  
java.lang:name=G1 Old Gen,type=MemoryPool/Usage/init  
java.lang:name=G1 Old Gen,type=MemoryPool/Usage/max  
java.lang:name=G1 Old Gen,type=MemoryPool/Usage/used  
java.lang:name=G1 Old Gen,type=MemoryPool/PeakUsage/committed  
java.lang:name=G1 Old Gen,type=MemoryPool/PeakUsage/init  
java.lang:name=G1 Old Gen,type=MemoryPool/PeakUsage/max  
java.lang:name=G1 Old Gen,type=MemoryPool/PeakUsage/used  
java.lang:name=G1 Old Gen,type=MemoryPool/MemoryManagerNames  
java.lang:name=G1 Old Gen,type=MemoryPool/UsageThreshold  
java.lang:name=G1 Old Gen,type=MemoryPool/UsageThresholdExceeded  
java.lang:name=G1 Old Gen,type=MemoryPool/UsageThresholdCount  
java.lang:name=G1 Old Gen,type=MemoryPool/UsageThresholdSupported  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsageThreshold  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsageThresholdExceeded  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsageThresholdCount  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsage/committed  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsage/init  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsage/max  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsage/used  
java.lang:name=G1 Old Gen,type=MemoryPool/CollectionUsageThresholdSupported  
java.lang:name=G1 Old Gen,type=MemoryPool/Name  
java.lang:name=G1 Old Gen,type=MemoryPool/Type  
java.lang:name=G1 Old Gen,type=MemoryPool/Valid  
java.lang:name=G1 Old Gen,type=MemoryPool/ObjectName

  
**MBean: Catalina:type=Engine**

Catalina:type=Engine/modelerType  
Catalina:type=Engine/catalinaBase  
Catalina:type=Engine/stateName  
Catalina:type=Engine/defaultHost  
Catalina:type=Engine/name  
Catalina:type=Engine/backgroundProcessorDelay  
  
**MBean: java.util.logging:type=Logging**

java.util.logging:type=Logging/LoggerNames  
java.util.logging:type=Logging/ObjectName  
  
**MBean: java.lang:name=G1 Old Generation,type=GarbageCollector**

java.lang:name=G1 Old Generation,type=GarbageCollector/LastGcInfo  
java.lang:name=G1 Old Generation,type=GarbageCollector/CollectionCount  
java.lang:name=G1 Old Generation,type=GarbageCollector/CollectionTime  
java.lang:name=G1 Old Generation,type=GarbageCollector/MemoryPoolNames  
java.lang:name=G1 Old Generation,type=GarbageCollector/Name  
java.lang:name=G1 Old Generation,type=GarbageCollector/Valid  
java.lang:name=G1 Old Generation,type=GarbageCollector/ObjectName  
  
**MBean: java.lang:name=Metaspace Manager,type=MemoryManager**

java.lang:name=Metaspace Manager,type=MemoryManager/MemoryPoolNames  
java.lang:name=Metaspace Manager,type=MemoryManager/Name  
java.lang:name=Metaspace Manager,type=MemoryManager/Valid  
java.lang:name=Metaspace Manager,type=MemoryManager/ObjectName

  
**MBean: Catalina:type=ProtocolHandler,port=8080**

Catalina:type=ProtocolHandler,port=8080/sslImplementationName  
Catalina:type=ProtocolHandler,port=8080/waitingProcessorCount  
Catalina:type=ProtocolHandler,port=8080/relaxedPathChars  
Catalina:type=ProtocolHandler,port=8080/sSLProtocol  
Catalina:type=ProtocolHandler,port=8080/sSLCertificateKeyFile  
Catalina:type=ProtocolHandler,port=8080/keyAlias  
Catalina:type=ProtocolHandler,port=8080/acceptCount  
Catalina:type=ProtocolHandler,port=8080/sSLCACertificatePath  
Catalina:type=ProtocolHandler,port=8080/maxSavePostSize  
Catalina:type=ProtocolHandler,port=8080/allowHostHeaderMismatch  
Catalina:type=ProtocolHandler,port=8080/sSLPasswordFile  
Catalina:type=ProtocolHandler,port=8080/sSLCARevocationFile  
Catalina:type=ProtocolHandler,port=8080/keystorePass  
Catalina:type=ProtocolHandler,port=8080/id  
Catalina:type=ProtocolHandler,port=8080/algorithm  
Catalina:type=ProtocolHandler,port=8080/serverRemoveAppProvidedValues  
Catalina:type=ProtocolHandler,port=8080/compressibleMimeTypes  
Catalina:type=ProtocolHandler,port=8080/maxKeepAliveRequests  
Catalina:type=ProtocolHandler,port=8080/allowedTrailerHeaders  
Catalina:type=ProtocolHandler,port=8080/truststoreProvider  
Catalina:type=ProtocolHandler,port=8080/sessionCacheSize  
Catalina:type=ProtocolHandler,port=8080/clientCertProvider  
Catalina:type=ProtocolHandler,port=8080/acceptorThreadPriority  
Catalina:type=ProtocolHandler,port=8080/maxHttpHeaderSize  
Catalina:type=ProtocolHandler,port=8080/keystoreType  
Catalina:type=ProtocolHandler,port=8080/domain  
Catalina:type=ProtocolHandler,port=8080/compression  
Catalina:type=ProtocolHandler,port=8080/desiredBufferSize  
Catalina:type=ProtocolHandler,port=8080/server  
Catalina:type=ProtocolHandler,port=8080/modelerType  
Catalina:type=ProtocolHandler,port=8080/rejectIllegalHeader  
Catalina:type=ProtocolHandler,port=8080/connectionUploadTimeout  
Catalina:type=ProtocolHandler,port=8080/noCompressionStrongETag  
Catalina:type=ProtocolHandler,port=8080/aprRequired  
Catalina:type=ProtocolHandler,port=8080/compressibleMimeType  
Catalina:type=ProtocolHandler,port=8080/nameIndex  
Catalina:type=ProtocolHandler,port=8080/ciphers  
Catalina:type=ProtocolHandler,port=8080/disableUploadTimeout  
Catalina:type=ProtocolHandler,port=8080/relaxedQueryChars  
Catalina:type=ProtocolHandler,port=8080/crlFile  
Catalina:type=ProtocolHandler,port=8080/connectionTimeout  
Catalina:type=ProtocolHandler,port=8080/keystoreProvider  
Catalina:type=ProtocolHandler,port=8080/sSLCipherSuite  
Catalina:type=ProtocolHandler,port=8080/sSLDisableCompression  
Catalina:type=ProtocolHandler,port=8080/useSendfile  
Catalina:type=ProtocolHandler,port=8080/sSLCertificateChainFile  
Catalina:type=ProtocolHandler,port=8080/sSLCACertificateFile  
Catalina:type=ProtocolHandler,port=8080/keyPass  
Catalina:type=ProtocolHandler,port=8080/compressionMinSize  
Catalina:type=ProtocolHandler,port=8080/globalRequestProcessorMBeanName  
Catalina:type=ProtocolHandler,port=8080/portOffset  
Catalina:type=ProtocolHandler,port=8080/truststoreFile  
Catalina:type=ProtocolHandler,port=8080/keystoreFile  
Catalina:type=ProtocolHandler,port=8080/defaultSSLHostConfigName  
Catalina:type=ProtocolHandler,port=8080/selectorTimeout  
Catalina:type=ProtocolHandler,port=8080/paused  
Catalina:type=ProtocolHandler,port=8080/truststoreType  
Catalina:type=ProtocolHandler,port=8080/sSLPassword  
Catalina:type=ProtocolHandler,port=8080/secure  
Catalina:type=ProtocolHandler,port=8080/continueResponseTiming  
Catalina:type=ProtocolHandler,port=8080/sSLHonorCipherOrder  
Catalina:type=ProtocolHandler,port=8080/portWithOffset  
Catalina:type=ProtocolHandler,port=8080/trustManagerClassName  
Catalina:type=ProtocolHandler,port=8080/sniParseLimit  
Catalina:type=ProtocolHandler,port=8080/maxTrailerSize  
Catalina:type=ProtocolHandler,port=8080/keyPassFile  
Catalina:type=ProtocolHandler,port=8080/sendfileSupported  
Catalina:type=ProtocolHandler,port=8080/trustMaxCertLength  
Catalina:type=ProtocolHandler,port=8080/maxThreads  
Catalina:type=ProtocolHandler,port=8080/truststoreAlgorithm  
Catalina:type=ProtocolHandler,port=8080/tcpNoDelay  
Catalina:type=ProtocolHandler,port=8080/keepAliveTimeout  
Catalina:type=ProtocolHandler,port=8080/localPort  
Catalina:type=ProtocolHandler,port=8080/pollerThreadCount  
Catalina:type=ProtocolHandler,port=8080/acceptorThreadCount  
Catalina:type=ProtocolHandler,port=8080/rejectIllegalHeaderName  
Catalina:type=ProtocolHandler,port=8080/sSLDisableSessionTickets  
Catalina:type=ProtocolHandler,port=8080/minSpareThreads  
Catalina:type=ProtocolHandler,port=8080/sSLCARevocationPath  
Catalina:type=ProtocolHandler,port=8080/port  
Catalina:type=ProtocolHandler,port=8080/maxHeaderCount  
Catalina:type=ProtocolHandler,port=8080/name  
Catalina:type=ProtocolHandler,port=8080/sslProtocol  
Catalina:type=ProtocolHandler,port=8080/sessionTimeout  
Catalina:type=ProtocolHandler,port=8080/clientAuth  
Catalina:type=ProtocolHandler,port=8080/sSLVerifyDepth  
Catalina:type=ProtocolHandler,port=8080/sSLCertificateFile  
Catalina:type=ProtocolHandler,port=8080/connectionCount  
Catalina:type=ProtocolHandler,port=8080/useKeepAliveResponseHeader  
Catalina:type=ProtocolHandler,port=8080/keystorePassFile  
Catalina:type=ProtocolHandler,port=8080/threadPriority  
Catalina:type=ProtocolHandler,port=8080/maxSwallowSize  
Catalina:type=ProtocolHandler,port=8080/truststorePass  
Catalina:type=ProtocolHandler,port=8080/sSLEnabled  
Catalina:type=ProtocolHandler,port=8080/sslEnabledProtocols  
Catalina:type=ProtocolHandler,port=8080/maxHttpResponseHeaderSize  
Catalina:type=ProtocolHandler,port=8080/maxExtensionSize  
Catalina:type=ProtocolHandler,port=8080/sSLVerifyClient  
Catalina:type=ProtocolHandler,port=8080/maxConnections  
Catalina:type=ProtocolHandler,port=8080/connectionLinger  
Catalina:type=ProtocolHandler,port=8080/processorCache  
Catalina:type=ProtocolHandler,port=8080/restrictedUserAgents  
Catalina:type=ProtocolHandler,port=8080/noCompressionUserAgents  
Catalina:type=ProtocolHandler,port=8080/maxHttpRequestHeaderSize  
Catalina:type=ProtocolHandler,port=8080/pollerThreadPriority  
Catalina:type=ProtocolHandler,port=8080/objectName  
Catalina:type=ProtocolHandler,port=8080/useServerCipherSuitesOrder  
  
**MBean: Catalina:type=MBeanFactory**

Catalina:type=MBeanFactory/modelerType

**MBean: java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool**

java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/Usage/committed  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/Usage/init  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/Usage/max  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/Usage/used  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/PeakUsage/committed  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/PeakUsage/init  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/PeakUsage/max  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/PeakUsage/used  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/MemoryManagerNames  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/UsageThreshold  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/UsageThresholdExceeded  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/UsageThresholdCount  
java.lang:name=CodeHeap 'profiled nmethods',type=MemoryPool/UsageThresholdSupported  
  
**MBean: java.nio:name=mapped - 'non-volatile memory',type=BufferPool**

java.nio:name=mapped - 'non-volatile memory',type=BufferPool/Name  
java.nio:name=mapped - 'non-volatile memory',type=BufferPool/Count  
java.nio:name=mapped - 'non-volatile memory',type=BufferPool/TotalCapacity  
java.nio:name=mapped - 'non-volatile memory',type=BufferPool/MemoryUsed  
java.nio:name=mapped - 'non-volatile memory',type=BufferPool/ObjectName

  
**MBean: Catalina:type=Valve,host=localhost,name=AccessLogValve**

Catalina:type=Valve,host=localhost,name=AccessLogValve/rotatable  
Catalina:type=Valve,host=localhost,name=AccessLogValve/modelerType  
Catalina:type=Valve,host=localhost,name=AccessLogValve/checkExists  
Catalina:type=Valve,host=localhost,name=AccessLogValve/prefix  
Catalina:type=Valve,host=localhost,name=AccessLogValve/pattern  
Catalina:type=Valve,host=localhost,name=AccessLogValve/className  
Catalina:type=Valve,host=localhost,name=AccessLogValve/encoding  
Catalina:type=Valve,host=localhost,name=AccessLogValve/locale  
Catalina:type=Valve,host=localhost,name=AccessLogValve/suffix  
Catalina:type=Valve,host=localhost,name=AccessLogValve/directory  
Catalina:type=Valve,host=localhost,name=AccessLogValve/enabled  
Catalina:type=Valve,host=localhost,name=AccessLogValve/condition  
Catalina:type=Valve,host=localhost,name=AccessLogValve/conditionUnless  
Catalina:type=Valve,host=localhost,name=AccessLogValve/stateName  
Catalina:type=Valve,host=localhost,name=AccessLogValve/buffered  
Catalina:type=Valve,host=localhost,name=AccessLogValve/asyncSupported  
Catalina:type=Valve,host=localhost,name=AccessLogValve/renameOnRotate  
Catalina:type=Valve,host=localhost,name=AccessLogValve/conditionIf  
Catalina:type=Valve,host=localhost,name=AccessLogValve/fileDateFormat  
  
**MBean: java.lang:name=Compressed Class Space,type=MemoryPool**

java.lang:name=Compressed Class Space,type=MemoryPool/Usage/committed  
java.lang:name=Compressed Class Space,type=MemoryPool/Usage/init  
java.lang:name=Compressed Class Space,type=MemoryPool/Usage/max  
java.lang:name=Compressed Class Space,type=MemoryPool/Usage/used  
java.lang:name=Compressed Class Space,type=MemoryPool/PeakUsage/committed  
java.lang:name=Compressed Class Space,type=MemoryPool/PeakUsage/init  
java.lang:name=Compressed Class Space,type=MemoryPool/PeakUsage/max  
java.lang:name=Compressed Class Space,type=MemoryPool/PeakUsage/used  
java.lang:name=Compressed Class Space,type=MemoryPool/MemoryManagerNames  
java.lang:name=Compressed Class Space,type=MemoryPool/UsageThreshold  
java.lang:name=Compressed Class Space,type=MemoryPool/UsageThresholdExceeded  
java.lang:name=Compressed Class Space,type=MemoryPool/UsageThresholdCount  
java.lang:name=Compressed Class Space,type=MemoryPool/UsageThresholdSupported  
  
**MBean: java.lang:type=Memory**

java.lang:type=Memory/ObjectPendingFinalizationCount  
java.lang:type=Memory/HeapMemoryUsage/committed  
java.lang:type=Memory/HeapMemoryUsage/init  
java.lang:type=Memory/HeapMemoryUsage/max  
java.lang:type=Memory/HeapMemoryUsage/used  
java.lang:type=Memory/NonHeapMemoryUsage/committed  
java.lang:type=Memory/NonHeapMemoryUsage/init  
java.lang:type=Memory/NonHeapMemoryUsage/max  
java.lang:type=Memory/NonHeapMemoryUsage/used  
java.lang:type=Memory/Verbose  
java.lang:type=Memory/ObjectName  
  
**MBean: java.lang:name=G1 Eden Space,type=MemoryPool**

java.lang:name=G1 Eden Space,type=MemoryPool/Usage/committed  
java.lang:name=G1 Eden Space,type=MemoryPool/Usage/init  
java.lang:name=G1 Eden Space,type=MemoryPool/Usage/max  
java.lang:name=G1 Eden Space,type=MemoryPool/Usage/used  
java.lang:name=G1 Eden Space,type=MemoryPool/PeakUsage/committed  
java.lang:name=G1 Eden Space,type=MemoryPool/PeakUsage/init  
java.lang:name=G1 Eden Space,type=MemoryPool/PeakUsage/max  
java.lang:name=G1 Eden Space,type=MemoryPool/PeakUsage/used  
java.lang:name=G1 Eden Space,type=MemoryPool/MemoryManagerNames

# Manual execution

The format of the plugin execution is as follows:

```
./pandora_jmx --conf < path to configuration file > --target_instances < instance configuration file> --target_metrics < metrics file>
```

For example:

```
./pandora_jmx --conf /usr/share/pandora_server/util/plugin/jmx.conf --target_instances /usr/share/pandora_server/util/plugin/instances.conf --target_metrics /usr/share/pandora_server/util/plugin/metrics.conf
```

The execution will return an output in JSON format with information about the execution, and will generate an XML file for each monitored agent that will be sent to the Pandora FMS server by the transfer method indicated in the configuration.

# Discovery

This plugin can be integrated with Pandora FMS Discovery.

To do so, you must load the “.disco” package that you can download from the Pandora FMS library:

[https://pandorafms.com/library/](https://pandorafms.com/library/)

Once loaded, JMX environments can be monitored by creating Discovery tasks from the Management &gt; Discovery &gt; App section.

The following minimum data will be requested for each task:

- **Instances target strings:**

Example:

```
service:jmx:rmi:///jndi/rmi://172.17.0.1:9090/jmxrmi
service:jmx:rmi:///jndi/rmi://172.12.0.23:9090/jmxrmi
service:jmx:rmi:///jndi/rmi://172.11.0.1:9090/jmxrmi
```

- **JMX URL:** URL of the instance from which the MBeans will be discovered (the metrics of the selected MBeans will be obtained for all specified instance targets).
- **Auth basic**: Check to enable basic authentication
- **User**: User of the java environment
- **Password :** Password of the java environment

[![Captura desde 2026-02-05 16-22-08.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-02/scaled-1680-/captura-desde-2026-02-05-16-22-08.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-02/captura-desde-2026-02-05-16-22-08.png)

On the next screen, you can select the discovered Mbeans, and the attributes of each selected mbean will be monitored.  
  
[![Captura desde 2026-01-22 16-58-22.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/scaled-1680-/captura-desde-2026-01-22-16-58-22.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/captura-desde-2026-01-22-16-58-22.png)

And in the next screen :

- **Max threads:** Number of threads to use in the task.
- **Use prefix for modules:** Check to specify a prefix for modules.
- **Prefix for modules created**: Prefix for created modules.
- **Use prefix for agent:** Check to specify a prefix for modules.
- **Prefix for agents created:** Prefix for created agents.

[![Captura desde 2026-01-22 17-17-19.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/scaled-1680-/captura-desde-2026-01-22-17-17-19.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/captura-desde-2026-01-22-17-17-19.png)

- **Tentacle IP:** Tentacle address.
- **Tentacle port:** Tentacle port.
- **Tentacle extra options:** Tentacle extra options.
- **Regexp to filter modules:** Check to specify a regexp pattern that will create only metrics that match the pattern, you can see the metrics for each Mbean listed in the “Metrics” section.
- **Allow regexp:** Regexp pattern that will create only metrics that match the pattern, you can see the metrics for each Mbean listed in the “Metrics” section.
- **Regexp to discard modules:** Check to specify a regexp pattern that will discard metrics that match the pattern, you can see the metrics for each Mbean listed in the “Metrics” section.
- **Deny regexp**: Regexp pattern that will discard metrics that match the pattern, you can see the metrics for each Mbean listed in the “Metrics” section.

[![Captura desde 2026-01-22 17-17-58.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/scaled-1680-/captura-desde-2026-01-22-17-17-58.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/captura-desde-2026-01-22-17-17-58.png)

- **Custom Metrics:** Custom metrics to monitor (independent of the selected Mbeans; if the metric already exists in a selected Mbean, it will only be created once).
- **Rename default modules:** Check to specify a new name for the desired metrics.
- **Modules names:** Name of the metric you want to rename in the module name AND name of the desired module for that metric separated by “|”, for example:

```
java.lang:name=CodeHeap 'non-nmethods',type=MemoryPool/PeakUsage/max | Memory.usage.max
Catalina:type=Service/name | Catalina.service.name
```

[![Captura desde 2026-01-22 17-18-27.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/scaled-1680-/captura-desde-2026-01-22-17-18-27.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-01/captura-desde-2026-01-22-17-18-27.png)

For each line an attribute must be added and this will create a module with that statistic in Pandora. If it is necessary to configure thresholds, they must be specified to the right of the attribute, separating each threshold by |. Example:

**Metric without threshold**

java.lang:type=Threading/ThreadCount

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/b2mimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/b2mimage.png)

**Metric with threshold**

java.lang:type=Threading/TotalStartedThreadCount|min\_warning 30|min\_critical 45

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/p0Jimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/p0Jimage.png)

Successfully completed tasks will have an execution summary with the following information:

- **Total agents** : Total number of agents generated by the task.

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-03/scaled-1680-/i97image.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-03/i97image.png)

# Agent and modules generated by the plugin

The plugin will create an agent, per instance, with the name you specify. If no name is specified, it will be the target defined for the instance. It will contain the modules for each statistic defined in the configuration file and the statistics for each selected Mbean. Thus, for example, running this plugin against the following metrics:

```
java.lang:type=Threading/TotalThreadAllocatedBytes
java.lang:type=Threading/CurrentThreadAllocatedBytes
java.lang:type=Threading/ThreadAllocatedMemoryEnabled
java.lang:type=Threading/ThreadAllocatedMemorySupported
java.lang:type=Threading/ThreadCount
java.lang:type=Threading/TotalStartedThreadCount
java.lang:type=Threading/AllThreadIds
java.lang:type=Threading/CurrentThreadCpuTime
java.lang:type=Threading/CurrentThreadUserTime
java.lang:type=Threading/ThreadCpuTimeSupported
java.lang:type=Threading/ThreadCpuTimeEnabled
java.lang:type=Threading/ThreadContentionMonitoringEnabled
java.lang:type=Threading/ThreadContentionMonitoringSupported
java.lang:type=Threading/CurrentThreadCpuTimeSupported
java.lang:type=Threading/ObjectMonitorUsageSupported
java.lang:type=Threading/SynchronizerUsageSupported
java.lang:type=Threading/PeakThreadCount
java.lang:type=Threading/DaemonThreadCount
java.lang:type=Threading/ObjectName
```

I would create the following modules :

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/MUqimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/MUqimage.png)