JMX Discovery
This document describes the JMX functionality of PandoraFMS, composed by the discovery plugin.
- Introduction
- Prerrequisites
- Parameters
- Metrics
- Manual execution
- Discovery
- Agent and modules generated by the 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
Metric with threshold
java.lang:type=Threading/TotalStartedThreadCount|min_warning 30|min_critical 45
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:
- 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
On the next screen, you can select the discovered Mbeans, and the attributes of each selected mbean will be monitored.
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.
- 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.
- 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
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
Metric with threshold
java.lang:type=Threading/TotalStartedThreadCount|min_warning 30|min_critical 45
Successfully completed tasks will have an execution summary with the following information:
- Total agents : Total number of agents generated by the task.
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 :