Skip to content

HikariCP

Collect HikariCP related metrics

Configuration

DataKit Collector Collection

  • Enable the statsd collector

Navigate to conf.d/statsd under the DataKit installation directory, and copy statsd.conf.sample to statsd.conf

cp prom.conf.sample master.conf

  • Enable the ddtrace collector

Navigate to conf.d/ddtrace under the DataKit installation directory, and copy ddtrace.conf.sample to ddtrace.conf

cp ddtrace.conf.sample ddtrace.conf

  • Execute the following command to restart Datakit
datakit service -R

Client Configuration

Take a Java Demo application as an example to collect Druid connection pool metrics and traces

  1. The connection pool configuration in the Demo project is as follows:
spring.datasource.url=jdbc:mysql://xx.xxx.xx.xxx:3306/test?useSSL=false&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true
spring.datasource.username=***
spring.datasource.password=*****
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.register-mbeans=true
  1. Configure JMX

  2. Download dd-java-agent

SDK

  • Create a hikaricp.yaml file with the following content:
init_config:

instances:
  - jvm_direct: true
    name: hikari-slick-monitoring
    collect_default_jvm_metrics: false
    collect_default_metrics: false
    refresh_beans: 60
    conf:
      - include:
          bean_regex: "com.zaxxer.hikari:type=Pool \\((.*)\\)"
          tags:
            pool: $1
          attribute:
            ActiveConnections:
              metric_type: gauge
              alias: hikaricp.connections.active
            IdleConnections:
              metric_type: gauge
              alias: hikaricp.connections.idle
            TotalConnections:
              metric_type: gauge
              alias: hikaricp.connections.total
            ThreadsAwaitingConnection:
              metric_type: gauge
              alias: hikaricp.connections.pending
      - include:
          bean_regex: "com.zaxxer.hikari:type=PoolConfig \\((.*)\\)"
          tags:
            pool: $1
          attribute:
            MaximumPoolSize:
              metric_type: gauge
              alias: hikaricp.pool.size.max
            IdleTimeout:
              metric_type: gauge
              alias: hikaricp.idle.timeout
            MaxLifetime:
              metric_type: gauge
              alias: hikaricp.max.lifetime
            MinimumIdle:
              metric_type: gauge
              alias: hikaricp.min.idle
            ConnectionTimeout:
              metric_type: gauge
              alias: hikaricp.connections.timeout
            ValidationTimeout:
              metric_type: gauge
              alias: hikaricp.validation.timeout
            LeakDetectionThreshold:
              metric_type: gauge
              alias: hikaricp.leak.detection.threshold
  • Adjust the startup command
java \
-javaagent:/xxx/dd-java-agent.jar \
-Ddd.agent.port=9529 \
-Ddd.service=demo \
-Ddd.jmxfetch.check-period=1000 \
-Ddd.jmxfetch.enabled=true \
-Ddd.jmxfetch.config.dir=/xxx/ \
-Ddd.jmxfetch.config=hikaricp.yaml \
-jar xxxx.jar 

Here, -Ddd.jmxfetch.config.dir=/xxx/ is the directory where the hikaricp.yaml configuration file is located

Metrics

HikariCP Measurement

HikariCP metrics are located under the hikaricp measurement. Here, we mainly introduce the description of HikariCP related metrics

Metrics Description Use Case Unit
connections_active Current active database connections Indicates the number of connections currently being used by the application count
connections_idle Current idle database connections Indicates the number of connections that are not being used and are in an idle state count
connections_pending Current number of requests waiting to obtain a connection If this value is high, it may indicate that the size of the connection pool is insufficient to meet the current concurrency demand count
connections_total Total number of database connections in the current connection pool Includes both active and idle connections count
idle_timeout Maximum survival time for idle connections Configuration item, when a connection's idle time exceeds this value, the connection pool will close it ms
leak_detection_threshold Connection leak detection threshold Configuration item, if a connection is occupied for longer than this threshold, the connection pool will consider that there may be a connection leak and issue a warning. ms
max_lifetime Maximum lifetime of a connection Configuration item, the total survival time of a connection from creation to closure cannot exceed this value ms
min_idle Minimum number of idle connections in the connection pool Configuration item, the connection pool will ensure that there are at least this many idle connections to quickly respond to new requests count
pool_size_max Maximum number of connections allowed in the connection pool Configuration item, this value limits the size of the connection pool to prevent excessive resource consumption by too many connections count
validation_timeout Connection validation timeout Configuration item, when obtaining a connection from the connection pool, the connection pool will validate the connection's effectiveness. If the validation time exceeds this value, the validation is considered to have failed ms
connections_timeout Connection timeout Configuration item, maximum wait time to establish a connection ms