HikariCP 可观测性最佳实践

news2025/7/28 5:09:24

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.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

接入 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: 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

关键指标

指标集: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.coloradmin.cn/o/2399253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简简单单探讨下starter

前言 今天其实首先想跟大家探讨下:微服务架构,分业务线了,接入第三方服务、包啥的是否自己定义一个stater更好? 一、starter是什么? 在 Spring Boot 中,Starter 是一种特殊的依赖模块,用于快速…

PyTest框架学习

0. 优先查看学习教程 超棒的学习教程 1. yield 语句 yield ptc_udp_clientyield:在 Pytest fixture 中,yield 用于分隔设置和清理代码。yield 之前的代码在测试用例执行前运行,yield 之后的代码在测试用例执行后运行。ptc_udp_client&…

SIP、SAP、SDP、mDNS、SSH、PTP

🌈 一、SIP 会话初始协议 会话初始协议 SIP 是一个在 IP 网络上进行多媒体通信的应用层控制协议,它被用来创建、修改和终结 1 / n 个参加者参加的会话进程。SIP 不能单独完成呼叫功能,需要和 RTP、SDP 和 DNS 配合来完成。 1. SIP 协议的功…

【AI学习笔记】Coze工作流写入飞书多维表格(即:多维表格飞书官方插件使用教程)

背景前摇: 今天遇到一个需求,需要把Coze平台大模型和用户的对话记录保存进飞书表格,这个思路其实不难,因为官方提供了写入飞书表格和多维表格的插件,但是因为平台教程和案例的资料匮乏,依据现有的官方文档…

在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 开发

在 Windows 系统下配置 VSCode CMake Ninja 进行 C 或 Qt 开发,是一个轻量级但功能强大的开发环境。下面我将分步骤详细说明如何搭建这个开发环境,支持纯 C 和 Qt 项目。 🧰 所需工具安装 1. 安装 Visual Studio Code(VSCode&…

leetcode 二叉搜索树中第k小的元素 java

中序遍历 定义一个栈&#xff0c;用于存取二叉树中的元素 Deque<TreeNode> stack new ArrayDeque<TreeNode>();进入while循环while(! stack.isEmpty()|| root ! null){}将root的左节点入栈&#xff0c;直到rootnull while(rootnull){stack.push(root);root ro…

5.1 初探大数据流式处理

在本节中&#xff0c;我们深入探讨了大数据流式处理的基础知识和关键技术。首先&#xff0c;我们区分了批式处理和流式处理两种大数据处理方式&#xff0c;了解了它们各自的适用场景和特点。流式处理以其低延迟和高实时性适用于需要快速响应的场景&#xff0c;而批式处理则适用…

传输层协议 UDP 介绍 -- UDP 协议格式,UDP 的特点,UDP 的缓冲区

目录 1. 再识的端口号 1.1 端口号范围划分 1.2 知名端口号&#xff08;Well-Know Port Number&#xff09; 2. UDP 协议 2.1 UDP 协议格式 2.2 UDP 的特点 2.3 UDP 的缓冲区 2.4 一些基于 UDP 的应用层协议 传输层&#xff08;Transport Layer&#xff09;是计算机网络…

ApacheSuperset CVE-2023-27524

前言:CVE-2023-27524 是一种远程代码执行漏洞&#xff0c;攻击者通过该漏洞可在受影响系统上执行任意代码&#xff0c;从而获得未授权访问权 CVE-2023-27524 GitHubhttps://github.com/horizon3ai/CVE-2023-27524 任务一 代理 | 拉取镜像 vi /etc/proxychains4.conf //最下面修…

如何在 HTML 中添加按钮

原文&#xff1a;如何在 HTML 中添加按钮 | w3cschool笔记 &#xff08;请勿将文章标记为付费&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; 在网页开发中&#xff0c;按钮是用户界面中不可或缺的元素之一。无论是用于提交表单、触发动作还是导航&#xff0…

Linux--进程的程序替换

问题导入&#xff1a; 前面我们知道了&#xff0c;fork之后&#xff0c;子进程会继承父进程的代码和“数据”&#xff08;写实拷贝&#xff09;。 那么如果我们需要子进程完全去完成一个自己的程序怎么办呢&#xff1f; 进程的程序替换来完成这个功能&#xff01; 1.替换原理…

调教 DeepSeek - 输出精致的 HTML MARKDOWN

【序言】 不知道是不是我闲的蛋疼&#xff0c;对百度AI 和 DeepSeek 的回答都不太满意。 DeepSeek 回答句子的引用链接&#xff0c;始终无法准确定位。有时链接只是一个域名&#xff0c;有时它给的链接是搜索串如: baidu.com/?q"搜索内容"。 百度AI 回答句子的引用…

【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理

基于 MSYS2&#xff08;MINGW64&#xff09;中 Python 的 Poetry 虚拟环境包编译失败处理笔记 一、背景 在基于 MSYS2&#xff08;MINGW64&#xff09;中 Python 创建的 Poetry 虚拟环境里&#xff0c;安装 Suna 开源项目相关包时编译失败&#xff0c;阻碍项目正常部署。 后端…

【深度学习优化算法】02:凸性

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

策略公开了:年化494%,夏普比率5.86,最大回撤7% | 大模型查询akshare,附代码

原创内容第907篇&#xff0c;专注智能量化投资、个人成长与财富自由。 这位兄弟的策略公开了&#xff0c;年化494%&#xff0c;夏普比率5.86&#xff0c;最大回撤7%&#xff0c;欢迎大家前往围观&#xff1a; http://www.ailabx.com/strategy/683ed10bdabe146c4c0b2293 系统代…

多模态大语言模型arxiv论文略读(101)

ML-Mamba: Efficient Multi-Modal Large Language Model Utilizing Mamba-2 ➡️ 论文标题&#xff1a;ML-Mamba: Efficient Multi-Modal Large Language Model Utilizing Mamba-2 ➡️ 论文作者&#xff1a;Wenjun Huang, Jiakai Pan, Jiahao Tang, Yanyu Ding, Yifei Xing, …

电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?

2024年10月9日&#xff0c;国家能源局综合司发布了《分布式光伏发电开发建设管理办法&#xff08;征求意见稿&#xff09;》&#xff0c;意见稿规定了户用分布式光伏、一般工商业分布式光伏以及大型工商业分布式光伏的发电上网模式&#xff0c;当选择全部自发自用模式时&#x…

如何查看电脑电池性能

检查电脑电池性能的方法如下&#xff1a; 按下winR键&#xff0c;输入cmd回车&#xff0c;进入命令行窗口 在命令行窗口输入powercfg /batteryreport 桌面双击此电脑&#xff0c;把刚刚复制的路径粘贴到文件路径栏&#xff0c;然后回车 回车后会自动用浏览器打开该报告 红…

kubernetes》》k8s》》kubectl proxy 命令后面加一个

命令后面加一个& 在Linux终端中&#xff0c;如果在命令的末尾加上一个&符号&#xff0c;这表示将这个任务放到后台去执行 kubectl proxy 官网资料 是 Kubernetes 提供的一个命令行工具&#xff0c;用于在本地和 Kubernetes API Server 之间创建一个安全的代理通道。…

网络安全运维实训室建设方案

一、网络安全运维人才需求与实训困境 在数字化时代&#xff0c;网络安全已成为国家安全、社会稳定和经济发展的重要基石。随着信息技术的飞速发展&#xff0c;网络安全威胁日益复杂多样&#xff0c;从个人隐私泄露到企业商业机密被盗&#xff0c;从关键基础设施遭受攻击到社会…