05 May 2026 10:38 AM
Hi everyone,
I’m working with Dynatrace Managed on prem and a custom JMX extension to collect HikariCP metrics.
I can successfully collect metrics from both:
There is however an important difference between the two:
Because of this, when multiple Hikari pools run in the same JVM, Dynatrace:
Example:
This makes per‑pool monitoring and alerting unreliable.
Constraints:
Question:
Is this a known limitation with HikariCP JMX in Dynatrace Managed?
Is there any supported Dynatrace‑side workaround to avoid Pool metric aggregation when multiple pools exist in the same JVM?
Thanks in advance for any feedback or guidance.
My extension code :
name: custom:hikari.jmx.metrics
version: 1.0.1
minDynatraceVersion: 1.303.0
author:
name: M
metrics:
- key: hikari.connections.active
metadata:
displayName: Hikari Active Connections
unit: Count
- key: hikari.connections.idle
metadata:
displayName: Hikari Idle Connections
unit: Count
- key: hikari.connections.total
metadata:
displayName: Hikari Total Connections
unit: Count
- key: hikari.threads.awaiting
metadata:
displayName: Hikari Threads Awaiting Connection
unit: Count
- key: hikari.connections.acquired
metadata:
displayName: Hikari Connections Acquired
unit: Count
- key: hikari.connections.created
metadata:
displayName: Hikari Connections Created
unit: Count
- key: hikari.connections.timeout
metadata:
displayName: Hikari Connections Timeout
unit: Count
- key: hikari.config.connection.timeout
metadata:
displayName: Hikari Connection Timeout
unit: MilliSecond
- key: hikari.config.idle.timeout
metadata:
displayName: Hikari Idle Timeout
unit: MilliSecond
- key: hikari.config.max.lifetime
metadata:
displayName: Hikari Max Lifetime
unit: MilliSecond
- key: hikari.config.validation.timeout
metadata:
displayName: Hikari Validation Timeout
unit: MilliSecond
- key: hikari.config.minimum.idle
metadata:
displayName: Hikari Minimum Idle
unit: Count
- key: hikari.config.maximum.pool.size
metadata:
displayName: Hikari Maximum Pool Size
unit: Count
- key: hikari.config.leak.detection.threshold
metadata:
displayName: Hikari Leak Detection Threshold
unit: MilliSecond
- key: hikari.config.keepalive.time
metadata:
displayName: Hikari Keepalive Time
unit: MilliSecond
- key: hikari.config.initialization.fail.timeout
metadata:
displayName: Hikari Initialization Fail Timeout
unit: MilliSecond
jmx:
groups:
- group: hikari
subgroups:
# =========================
# POOL (pool.name depuis ObjectName)
# =========================
- subgroup: pool
query: "com.zaxxer.hikari:type=Pool (*)"
dimensions:
- key: pool.name
value: property:name
metrics:
- key: hikari.connections.active
type: gauge
value:
attribute: ActiveConnections
- key: hikari.connections.idle
type: gauge
value:
attribute: IdleConnections
- key: hikari.connections.total
type: gauge
value:
attribute: TotalConnections
- key: hikari.threads.awaiting
type: gauge
value:
attribute: ThreadsAwaitingConnection
- key: hikari.connections.acquired
type: count
value:
attribute: ConnectionsAcquired
- key: hikari.connections.created
type: count
value:
attribute: ConnectionsCreated
- key: hikari.connections.timeout
type: count
value:
attribute: ConnectionsTimeout
# =========================
# POOL CONFIG (pool.name via attribute)
# =========================
- subgroup: poolconfig
query: "com.zaxxer.hikari:type=PoolConfig (*)"
dimensions:
- key: pool.name
value:
attribute: PoolName
metrics:
- key: hikari.config.connection.timeout
type: gauge
value:
attribute: ConnectionTimeout
- key: hikari.config.idle.timeout
type: gauge
value:
attribute: IdleTimeout
- key: hikari.config.max.lifetime
type: gauge
value:
attribute: MaxLifetime
- key: hikari.config.validation.timeout
type: gauge
value:
attribute: ValidationTimeout
- key: hikari.config.minimum.idle
type: gauge
value:
attribute: MinimumIdle
- key: hikari.config.maximum.pool.size
type: gauge
value:
attribute: MaximumPoolSize
- key: hikari.config.leak.detection.threshold
type: gauge
value:
attribute: LeakDetectionThreshold
- key: hikari.config.keepalive.time
type: gauge
value:
attribute: KeepaliveTime
- key: hikari.config.initialization.fail.timeout
type: gauge
value:
attribute: InitializationFailTimeoutFeatured Posts