JMX Discovery

This document describes the JMX functionality of PandoraFMS, composed by the discovery plugin.

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

Java is required on the system running the plugin

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

--conf Path to configuration file

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

Metric with threshold

java.lang:type=Threading/TotalStartedThreadCount|min_warning 30|min_critical 45

image.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/

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

The following minimum data will be requested for each task:

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

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

And in the next screen :

Captura desde 2026-01-22 17-17-19.png

Captura desde 2026-01-22 17-17-58.png

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

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

Metric with threshold

java.lang:type=Threading/TotalStartedThreadCount|min_warning 30|min_critical 45

image.png

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

image.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