HikariCP 可觀測性最佳實踐

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%則觸發警告,如下圖:

總結

這些指標提供了連接池運行狀態的全面視圖,幫助開發者和運維人員監控和優化數據庫連接池的性能。通過合理配置和監控這些指標,可以確保連接池在高并發場景下高效運行,同時避免資源浪費和性能瓶頸。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83510.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83510.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java SpringBoot 調用大模型 AI 構建智能應用實戰指南

一、基礎知識 (一)Java基礎 Java是一種廣泛使用的高級編程語言,具有簡單、面向對象、分布式、解釋型、健壯、安全、架構中立、可移植、高性能、多線程和動態等特點。在構建基于Spring Boot的AI應用之前,您需要具備扎實的Java基礎…

電路圖識圖基礎知識-降壓啟動(十五)

降壓啟動電動機控制電路 降壓啟動,是指啟動時降低加在電動機定子繞組上的電壓,待電動機啟動起來后再將電壓 恢復到額定值,使之運行在額定電壓下。降壓啟動可以減小啟動電流,從而減小線路電壓降。 傳統的降壓啟動包括定子串電阻或…

2025年大模型平臺落地實踐研究報告|附75頁PDF文件下載

本報告旨在為各行業企業在建設落地大模型平臺的過程中,提供有效的參考和指引,助力大模型更高效更有價值地規模化落地。本報告系統性梳理了大模型平臺的發展背景、歷程和現狀,結合大模型平臺的特點提出了具體的落地策略與路徑,同時…

Docker慢慢學

1、Docker DeskTop 2、N8N下載 3、Kafka docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID1 -e KAFKA_ZOOKEEPER_CONNECTzookeeper:2181 -e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://localhost:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR1 con…

Java 中創建線程主要有三種方式

在 Java 中,創建線程主要有三種方式,每種方式各有特點和適用場景。以下是詳細說明和代碼示例: 1. 繼承 Thread 類 原理:自定義類繼承 Thread 并重寫 run() 方法,通過調用 start() 啟動新線程。 特點:簡單直…

ck-editor5的研究 (5):優化-頁面離開時提醒保存,順便了解一下 Editor的生命周期 和 6大編輯器類型

前言 經過前面的 4 篇內容,我們已經慢慢對 CKEditor5 熟悉起來了。這篇文章,我們就來做一個優化,順便再補幾個知識點: 當用戶離開時頁面時,提醒他保存數據了解一下 CKEditor5 的 六大編輯器類型了解一下 editor 實例對…

第42節:模型優化與部署:Web服務部署(Flask, FastAPI)

1. 引言 在現代人工智能和機器學習應用中,模型的開發只是整個流程的一部分。 將訓練好的模型有效地部署為可訪問的Web服務,使其能夠處理實際請求并返回預測結果,是模型價值實現的關鍵環節。Python生態系統提供了多種輕量級Web框架,其中Flask和FastAPI是目前最受歡迎的選擇…

LabVIEW超寬帶緊湊場測量系統

采用 LabVIEW 開發超寬帶緊湊場測量系統,實現天線方向圖、目標雷達散射截面(RCS)及天線增益的自動化測量。通過品牌硬件設備,優化系統架構,解決傳統測量系統在兼容性、數據處理效率及操作便捷性等方面的問題&#xff0…

vue2使用筆記、vue2和vue3的區別

文章目錄 vue2和vue3的區別1. 實現數據響應式的原理不同2. 生命周期不同3. vue 2.0 采用了 option 選項式 API,vue 3.0 采用了 composition 組合式 API4. 新特性編譯宏5. 父子組件間雙向數據綁定 v-model 不同6. v-for 和 v-if 優先級不同7. 使用的 diff 算法不同8.…

CSS3美化頁面元素

1. 字體 <span>標簽 字體樣式? 字體類型&#xff08;font-family&#xff09; 字體大小&#xff08;font-size&#xff09; 字體風格&#xff08;font-style&#xff09; 字體粗細&#xff08;font-weight&#xff09; 字體屬性&#xff08;font&#xff09; 2. 文本 文…

【筆記】Windows 下載并安裝 ChromeDriver

以下是 在 Windows 上下載并安裝 ChromeDriver 的筆記&#xff1a; ? Windows 下載并安裝 ChromeDriver 1?? 確認 Chrome 瀏覽器版本 打開 Chrome 瀏覽器 點擊右上角 ? → 幫助 → 關于 Google Chrome 記下版本號&#xff0c;例如&#xff1a;114.0.5735.199 2?? 下載…

工廠模式 vs 策略模式:設計模式中的 “創建者” 與 “決策者”

在日常工作里&#xff0c;需求變動或者新增功能是再常見不過的事情了。而面對這種情況時&#xff0c;那些耦合度較高的代碼就會給我們帶來不少麻煩&#xff0c;因為在這樣的代碼基礎上添加新需求往往困難重重。為了保證系統的穩定性&#xff0c;我們在添加新需求時&#xff0c;…

Java web學習路徑預覽

Java web學習路徑預覽 &#xff08;圖源&#xff1a;黑馬程序員&#xff09; 目錄 Java web學習路徑預覽 一、HTML、CSS、JS 1. HTML (HyperText Markup Language): 網頁的骨架 2. CSS (Cascading Style Sheets): 網頁的皮膚 3. JavaScript (JS): 網頁的行為 二、Ajax、…

linux、docker、git相關操作

1 linux 1.1解壓縮 1.1.1 zip zip xxx.zip file 把名為fle的文件壓縮成xxx.zip -r 遞歸壓縮&#xff1a;加上該選項才能壓縮文件夾 zip -r example_new.zip 示例集 # 新建壓縮包并命名為 example_new.zip zip -r xxx.zip file1 file2 dir1 將多個文件目錄壓成zip包 unzip fi…

Attention Is All You Need (Transformer) 以及Transformer pytorch實現

參考https://zhuanlan.zhihu.com/p/569527564 Attention Is All You Need (Transformer) 是當今深度學習初學者必讀的一篇論文。 一. Attention Is All You Need (Transformer) 論文精讀 1. 知識準備 機器翻譯&#xff0c;就是將某種語言的一段文字翻譯成另一段文字。 由…

深入淺出:Oracle 數據庫 SQL 執行計劃查看詳解(1)——基礎概念與查看方式

背景 在當今的軟件開發領域&#xff0c;盡管主流開發模式往往傾向于采用單表模式&#xff0c;力圖盡可能地減少表之間的連接操作&#xff0c;以期達到提高數據處理效率、簡化應用邏輯等目的。然而&#xff0c;對于那些已經上線運行多年的運維老系統而言&#xff0c;它們內部往…

每天掌握一個Linux命令 - fail2ban

Linux 命令工具 fail2ban 使用指南 目錄 Linux 命令工具 fail2ban 使用指南一、工具概述二、安裝方式1. 包管理器安裝&#xff08;推薦&#xff09;Debian/Ubuntu 系統CentOS/RHEL 系統Arch Linux 系統 2. 手動編譯安裝&#xff08;適用于自定義需求&#xff09; 三、核心功能四…

互聯網大廠智能體平臺體驗筆記字節扣子羅盤、阿里云百煉、百度千帆 、騰訊元器、TI-ONE平臺、云智能體開發平臺

互聯網大廠 字節扣子、阿里云百煉、百度千帆 、騰訊元器、TI-ONE平臺、云智能體開發平臺 體驗 開始動手 了解 智能體&#xff0c;發現已經落后時代太遠 光頭部互聯網大廠對開 公開的平臺就已經這么多&#xff0c;可以學習和了解&#xff0c;相關的信息 整理了對應的平臺地址…

ansible-playbook 進階 接上一章內容

1.異常中斷 做法1&#xff1a;強制正常 編寫 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…

LRC and VIP

//首先排除所有數相等的情況,再把最大值放在一個組&#xff0c;那么最大值的gcd就等于其本身&#xff0c;再判斷剩下的gcd是否等于最大值就可以了 #include<bits/stdc.h> using namespace std;const int N1e3100; int a[N]; map<int,int>mapp; int main(){int t;ci…