HikariCP 介紹
HikariCP 是一個高性能、輕量級的 JDBC 連接池,由 Brett Wooldridge 開發。它以“光”命名,象征快速高效。它支持多種數據庫,配置簡單,通過字節碼優化和智能管理,實現低延遲和高并發處理。它還具備自動維護、故障恢復和監控功能。HikariCP 是 Spring Boot 2.x 的默認連接池,適用于各種規模的 Java 應用,尤其在高并發場景下表現出色。
在可觀測場景中,通常會接入 APM 調用鏈路和數據庫的監控指標, 在 APM 中我們可以看到 SQL 的執行時間,在數據庫可觀測中可以看到審計日志中的慢 SQL 以及數據庫的一些性能指標,如連接數、cpu 、內存等。 但應用到數據庫之間的的執行過程是由連接池完成的,連接池可能會出現連接數配置不合理導致 SQL 執行排隊、連接池設置過大導致數據庫性能瓶頸等, 因此,對連接池的可觀測變得非常重要。
觀測云
觀測云是一款專為 IT 工程師打造的全鏈路可觀測產品,它集成了基礎設施監控、應用程序性能監控和日志管理,為整個技術棧提供實時可觀察性。這款產品能夠幫助工程師全面了解端到端的用戶體驗追蹤,了解應用內函數的每一次調用,以及全面監控云時代的基礎設施。此外,觀測云還具備快速發現系統安全風險的能力,為數字化時代提供安全保障。
部署 DataKit
DataKit 是一個開源的、跨平臺的數據收集和監控工具,由觀測云開發并維護。它旨在幫助用戶收集、處理和分析各種數據源,如日志、指標和事件,以便進行有效的監控和故障排查。DataKit 支持多種數據輸入和輸出格式,可以輕松集成到現有的監控系統中。
登錄觀測云控制臺,在「集成」 - 「DataKit」選擇對應安裝方式,當前采用 Linux 主機部署 DataKit。
采集器配置
DataKit 配置
DataKit 安裝完成后,可以自定義開啟采集器,本集成需要開啟如下兩個采集器。
- 開啟 StatsD 采集器
# 開啟采集器
cp /usr/local/datakit/conf.d/statsd/statsd.conf.sample /usr/local/datakit/conf.d/statsd/statsd.conf
# 重啟 Datakit
datakit service -R
- 開啟鏈路采集
# 開啟采集器
cp /usr/local/datakit/conf.d/ddtrace/ddtrace.conf.sample /usr/local/datakit/conf.d/ddtrace/ddtrace.conf
# 重啟 Datakit
datakit service -R
客戶端配置
以 Java Demo 應用為例,采集調用鏈路和 Druid 連接池指標。
Demo 項目中連接池配置如下:
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.Driverspring.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
接入 APM ,配置采集 jmx ,應用啟動增加如下參數,啟動命令如下:
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
dd-java-agent.jar Guance 版下載地址:
wget -O dd-java-agent.jar 'https://static.guance.com/dd-image/dd-java-agent.jar'
其中 -Ddd.jmxfetch.config.dir 和 -Ddd.jmxfetch.config=hikaricp.yaml 需要把 hikaricp.yaml 放到 Java 啟動可以讀取到的地址。
hikaricp.yaml 內容如下,無需修改。
init_config:instances:- jvm_direct: truename: hikari-slick-monitoringcollect_default_jvm_metrics: falsecollect_default_metrics: falserefresh_beans: 60conf:- include:bean_regex: "com.zaxxer.hikari:type=Pool \\((.*)\\)"tags:pool: $1attribute:ActiveConnections:metric_type: gaugealias: hikaricp.connections.activeIdleConnections:metric_type: gaugealias: hikaricp.connections.idleTotalConnections:metric_type: gaugealias: hikaricp.connections.totalThreadsAwaitingConnection:metric_type: gaugealias: hikaricp.connections.pending- include:bean_regex: "com.zaxxer.hikari:type=PoolConfig \\((.*)\\)"tags:pool: $1attribute:MaximumPoolSize:metric_type: gaugealias: hikaricp.pool.size.maxIdleTimeout:metric_type: gaugealias: hikaricp.idle.timeoutMaxLifetime:metric_type: gaugealias: hikaricp.max.lifetimeMinimumIdle:metric_type: gaugealias: hikaricp.min.idleConnectionTimeout:metric_type: gaugealias: hikaricp.connections.timeoutValidationTimeout:metric_type: gaugealias: hikaricp.validation.timeoutLeakDetectionThreshold:metric_type: gaugealias: hikaricp.leak.detection.threshold
關鍵指標
指標集:hikaricp
指標 | 描述 | 用途 |
---|---|---|
connections_active | 當前活躍的數據庫連接數。 | 表示正在被應用程序使用的連接數量。 |
connections_idle | 當前空閑的數據庫連接數。 | 表示未被使用的、處于空閑狀態的連接數量。 |
connections_pending | 當前等待獲取連接的請求數量。 | 如果這個值較高,可能意味著連接池的大小不足以滿足當前的并發需求。 |
connections_total | 當前連接池中總的數據庫連接數。 | 包括活躍和空閑連接。 |
idle_timeout | 空閑連接的最大存活時間。 | 配置項,當一個連接空閑時間超過這個值時,連接池會將其關閉。 |
leak_detection_threshold | 連接泄漏檢測閾值。 | 配置項。如果一個連接被占用的時間超過這個閾值,連接池會認為可能存在連接泄漏,并發出警告。 |
max_lifetime | 連接的最大生命周期。 | 配置項,一個連接從創建到被關閉的總存活時間不能超過這個值。 |
min_idle | 連接池中最小空閑連接數。 | 配置項,連接池會保證至少有這么多空閑連接,以便快速響應新的請求。 |
pool_size_max | 連接池中允許的最大連接數。 | 配置項,這個值限制了連接池的大小,防止過多的連接消耗過多的資源。 |
validation_timeout | 連接驗證超時時間。 | 配置項,在從連接池獲取連接時,連接池會驗證連接的有效性,如果驗證時間超過這個值,則認為驗證失敗。 |
connections_timeout | 連接超時時間。 | 配置項,建立連接最大等待時間。 |
場景視圖
登錄觀測云控制臺,點擊「場景」 -「新建儀表板」,輸入 “HikariCP”, 選擇 “HikariCP監控視圖”,點擊 “確定” 即可添加視圖。
監控器(告警)
HikariCP 服務連接池使用率告警
簡要描述:檢測指標 connections_active/pool_size_max , 5分鐘內最大值超過80%則觸發警告,如下圖:
總結
這些指標提供了連接池運行狀態的全面視圖,幫助開發者和運維人員監控和優化數據庫連接池的性能。通過合理配置和監控這些指標,可以確保連接池在高并發場景下高效運行,同時避免資源浪費和性能瓶頸。