概述
HikariCP提供了一些監控指標,他的監控指標都是基於MicroMeter提供出來的,然后支持Prometheus和Dropwizard。本次我們將討論一下HikariCp的監控指標有哪些,為什么提供這些指標,以及咱們如何去做監控。
監控指標
就像com.zaxxer.hikari.metrics.PoolStats
提供的那樣,幾個重要的指標都存儲在poolState中。
-
totalConnections
總連接數,包括空閑的連接和使用中的連接。 -
idleConnections 空閑連接數
-
activeConnections
活躍連接數
totalConnections = activeConnection + idleConnections
-
pendingThreads
正在等待連接的線程數量。排查性能問題時,這個指標是一個重要的參考指標,如果正在等待連接的線程在相當一段時間內數量較多,可以考慮擴大數據庫連接池的size。(即HikariCP的maxPoolSize) -
maxConnections
最大連接數,統計指標,統計到目前為止連接的最大數量。 -
minConnections
最小連接數,統計指標,統計到目前為止連接的最小數量。 -
usageTime
每個連接使用的時間,當連接被回收的時候會記錄此指標:com.zaxxer.hikari.pool.HikariPool#recycle
-
acquireTime
獲取每個連接需要等待時間,一個請求獲取數據庫連接后或者因為超時失敗后,會記錄此指標。 -
connectionCreateTime
連接創建時間
如何監控
這里拿我們比較熟悉的SpringBoot項目為例,同時使用prometheus和grafana,項目中加入promethues的依賴:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus:1.3.0'
同時在SpringBoot項目的application.properties配置文件中加入以下參數:
management.endpoints.web.exposure.include=prometheus 暴露prometheus格式化的指標,這樣可以被promethues服務器抓取
接下來我們需要啟動一個prometheus的服務,https://prometheus.io/download/ 然后更改下peometheus服務的默認配置再啟動,追加配置如下:
- job_name: 'prometheus-test' # job名稱
scrape_interval: 5s # 抓取時間間隔,這里每5s像數據源請求一次
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['127.0.0.1:8080'] # 這里是springBoot項目的地址
接着啟動一個grafana的服務,https://grafana.com/get 啟動后添加prometheus數據源,制作儀表盤等。
擴展知識
-
Micrometer
Vendor-neutral application metrics facade(與供應商無關的應用程序指標外觀)。我們可以把它類比於日志框架中的slf4j。把promethues類比於logback。應用程序直接依賴Micrometer來暴露指標。Micrometer比較受歡迎,已經作為SpringBoot2.0內置的指標門面庫。 -
Dropwizard
一個Java框架,類似於SpringBoot,但國內使用較少。其中有提供metrics相關的功能。 -
Prometheus
一個監控器的實現,基於pull模型,定時像prometheus數據源拉取指標信息。做分析、處理和展示。