cover

Spring Boot Actuator自定义指标与监控实践指南

本篇文章以生产环境实战经验为主线,结合某电商系统的业务场景,讲解如何在Spring Boot Actuator中添加并暴露自定义指标,并使用Prometheus和Grafana进行完整的监控与告警配置。

一、业务场景描述

在电商系统中,我们希望监控以下关键指标:

  • 下单接口响应时间(Order API Latency)
  • 库存锁定成功次数(Inventory Lock Success Count)
  • 订单支付失败率(Payment Failure Rate)
  • 用户访问量(Active Users)

传统的日志埋点无法满足实时监控需求,通过Spring Boot Actuator与Micrometer,可以快速采集并暴露应用指标。

二、技术选型过程

我们选用了以下技术栈:

  • Spring Boot Actuator:提供内置监控端点
  • Micrometer:度量指标采集框架,兼容常见监控系统
  • Prometheus:指标拉取与存储
  • Grafana:可视化展示与告警规则

该方案能够无缝集成Spring生态,具备开箱即用和自定义扩展能力。

三、实现方案详解

3.1 引入依赖

pom.xml中添加:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

3.2 配置application.yml

management:endpoints:web:exposure:include: health,info,prometheusmetrics:export:prometheus:enabled: true

3.3 自定义指标实现

创建一个MetricsService,在业务逻辑中注入MetricsRegistry:

package com.example.monitor;import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.stereotype.Service;@Service
public class MetricsService {private final Counter inventoryLockCounter;private final Timer orderLatencyTimer;public MetricsService(MeterRegistry registry) {this.inventoryLockCounter = Counter.builder("inventory.lock.success.count").description("库存锁定成功次数").register(registry);this.orderLatencyTimer = Timer.builder("order.api.latency").description("下单接口响应时间").publishPercentiles(0.5, 0.95).register(registry);}public void recordInventoryLockSuccess() {inventoryLockCounter.increment();}public <T> T recordOrderLatency(Supplier<T> supplier) {return orderLatencyTimer.record(supplier);}
}

OrderController中使用:

@RestController
@RequestMapping("/api/orders")
public class OrderController {private final MetricsService metricsService;private final OrderService orderService;public OrderController(MetricsService metricsService, OrderService orderService) {this.metricsService = metricsService;this.orderService = orderService;}@PostMappingpublic ResponseEntity<Order> createOrder(@RequestBody OrderRequest req) {// 记录订单处理时间Order order = metricsService.recordOrderLatency(() -> orderService.createOrder(req));// 记录库存锁定成功次数metricsService.recordInventoryLockSuccess();return ResponseEntity.ok(order);}
}

3.4 Prometheus与Grafana集成

  1. 在Prometheus配置中添加Spring Boot应用地址:
scrape_configs:- job_name: 'spring-boot-app'static_configs:- targets: ['app-host:8080']
  1. Grafana中导入Dashboard模板(可参考官方Micrometer模板),或自行创建:
    • 使用order_api_latency查询响应时间分布
    • 使用inventory_lock_success_count监控锁定次数

3.5 完整项目结构示例

monitoring-sample/
├─ src/
│  ├─ main/
│  │  ├─ java/com/example/monitor/  # 业务代码与监控实现
│  │  └─ resources/
│  │     └─ application.yml        # Actuator和Prometheus配置
│  └─ test/
└─ pom.xml

四、踩过的坑与解决方案

  1. 自定义指标未暴露:

    • 原因:未在application.yml中启用prometheus端点
    • 解决:management.endpoints.web.exposure.include: prometheus
  2. Label标签过多导致高基数问题:

    • 避免使用用户ID、动态路径作为标签
    • 建议只使用固定维度,如regionstatus
  3. Prometheus拉取失败:

    • 检查网络与防火墙
    • 确认拉取路径/actuator/prometheus正确
  4. Grafana图表无数据:

    • 检查Prometheus中是否已有历史数据
    • 调整Dashboard查询语句和时间范围

五、总结与最佳实践

  • 为关键业务埋点自定义指标,并使用合理的单位和命名规范
  • 限制标签基数,避免高基数带来的存储和查询压力
  • 合理设置Prometheus抓取频率和数据保留策略
  • 在Grafana中通过告警规则及时通知异常状态
  • 定期评审指标体系,保持指标与业务场景同步

通过以上实践,可在Spring Boot应用中高效地监控业务性能,实现故障预警与性能优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96266.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96266.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96266.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue报错<template v-for=“option in cardOptions“ :key=“option.value“>

在Vue项目中遇到报错&#xff0c;原因是模板中使用了<template>标签内的v-for指令&#xff0c;而当前Vue版本不支持此用法。解决方案是移除<template>标签&#xff0c;直接在<el-option>上使用v-for。同时优化计算属性cardOptions&#xff0c;使其能够兼容历…

人工智能学习:Transformer结构中的规范化层(层归一化)

Transformer结构中的规范化层(层归一化) 一、规范化层(层归一化)介绍 概念 层归一化(Layer Normalization) 是一种用于提高深度神经网络训练稳定性和加速收敛的技术,广泛应用于现代深度学习模型中,尤其是在Transformer等序列建模网络中。它通过对每一层的输出进行归一化…

盼之代售 最新版 decode__1174

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 部分python代码 cp1 execj…

Transformer系列 | Pytorch复现Transformer

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、Transformer和Seq2Seq 在之前的博客中我们学习了Seq2Seq(深度学习系列 | Seq2Seq端到端翻译模型)&#xff0c;知晓了Attention为RNN带来的优点。那么有没有…

【MySQL】常用SQL语句

介绍常用的DDL语句、DML语句基本语法分号结尾使用空格和缩进不区分大小写--或#注释单行内容 /*注释多行内容*/DDL数据定义语句&#xff1a;定义数据库、表、字段一、操作库-- 创建库create database db1;-- 创建库是否存在&#xff0c;不存在则创建create database if not exi…

云手机就是虚拟机吗?

云手机并非等同于虚拟机&#xff0c;尽管二者存在一定相似性&#xff0c;但有着诸多区别&#xff0c;以下从多个方面来分析&#xff1a;云手机是一种基于云计算技术&#xff0c;将云端服务器虚拟化为手机设备&#xff0c;用户能通过网络远程操控的虚拟手机服务&#xff0c;它从…

准确--Nginx 1.28.0 安装与配置流程

Nginx 1.28.0 安装与配置流程 1. 下载与解压 cd ~ wget http://nginx.org/download/nginx-1.28.0.tar.gz tar -zxvf nginx-1.28.0.tar.gz cd nginx-1.28.02. 配置编译参数 ./configure \--prefix/home/ynnewweb/nginx \--with-http_ssl_module \--with-http_gzip_static_module…

无标记点动捕新范式:Xsens系统助力人形机器人实现毫米级动作复刻

Xsen搭载Manus数据手套在机器人操作与机器学习中的应用当前&#xff0c;人形机器人正加速向工业装配、家庭陪护、仓储物流等场景渗透&#xff0c;而 “如何让机器人的动作既符合人类运动规律&#xff0c;又能实现高精度执行” 成为制约其落地的核心瓶颈。Xsens 高精度全身动捕系…

mysql57超管root忘记密码怎么办

目录 背景 1.首先停止数据库 2.使用免密模式启动 3.修改密码 3.1刷新权限配置 3.2修改密码 4.杀掉mysql 5.重新正常启动mysql 6.查看mysql状态 7.验证 7.1首先服务器本地验证 7.2远程验证 背景 数据库密码忘记了,急的抓耳挠腮,怎么也想不起来,于是就开始重置吧 1.…

RESTful API:@RequestParam与@PathVariable实战对比

RequestParam vs PathVariable 在删除和查找操作中的使用差异 在项目实战中&#xff0c;选择使用 RequestParam 还是 PathVariable 来接收ID参数&#xff0c;通常基于以下几个考虑因素&#xff1a; 1. RESTful API 设计原则 查找操作使用 PathVariable GetMapping("/depts…

剧本杀小程序系统开发:开启沉浸式社交娱乐新纪元

在当今数字化浪潮席卷的时代&#xff0c;社交娱乐方式正经历着前所未有的变革。剧本杀&#xff0c;这一融合了角色扮演、推理悬疑与社交互动的线下娱乐项目&#xff0c;近年来迅速风靡全国&#xff0c;成为年轻人热衷的社交新宠。而随着移动互联网的蓬勃发展&#xff0c;剧本杀…

中线安防保护器,也叫终端电气综合治理保护设备为现代生活筑起安全防线

中线安防保护器&#xff08;Neutral Line Protection Device&#xff0c;简称NLPD&#xff09;是一种专门用于监测和保护电力系统中性线的安全装置。中线安防保护器的基本原理为:通过电流检测环节采集系统中性线上过电流信息&#xff0c; 经控制器快速计算并提取各次谐波电流的…

Spring Cloud Alibaba快速入门02-Nacos配置中心(下)

文章目录前言配置中心 - 数据隔离示例1.先创建命名空间2.创建配置3.克隆配置4.动态切换环境5.yml多文档模式spring.profiles.activedevspring.profiles.activetest总结前言 上一章简单了解了Nacos配置中心的基本用法&#xff0c;这一章将开始Nacos配置中心的实战案例。 配置中…

基于结构光相移法的三维重建

基于结构光相移法的三维重建程序 1. 介绍 结构光相移法是一种常用的三维重建技术&#xff0c;通过投射条纹图案并捕捉其变形来计算物体的三维形状。相移法通过多次投射不同相位的条纹图案&#xff0c;利用相位信息来提取物体表面的深度信息。 2. MATLAB实现 2.1 生成条纹图案 首…

机器学习10——降维与度量学习(K近邻、多维缩放、主成分分析)

上一章&#xff1a;机器学习09——聚类 下一章&#xff1a;机器学习11——特征选择与稀疏学习 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、k近邻学习&#xff08;kNN&#…

Js 图片加载完成 与 图片缓存加载的区别

这两个有什么区别// 图片加载完成后淡入$img.on(load, function () {$img.css(opacity, 1);});// 处理图片缓存情况if ($img[0].complete) {$img.css(opacity, 1);}要理解这两段代码的区别&#xff0c;需要先明确它们的核心作用场景和执行时机差异—— 本质是解决 “图片加载完…

国产化PDF处理控件Spire.PDF教程:如何在 Java 中通过模板生成 PDF

在企业级应用开发中&#xff0c;生成 PDF 文档是一项非常常见的需求。无论是发票、报告、合同&#xff0c;还是其他业务文档&#xff0c;开发人员通常都需要一种高效、稳定的方式来创建 PDF。与其逐行绘制 PDF 内容&#xff0c;不如直接利用 模板 ——常见的模板形式包括 HTML …

Spring Cloud Gateway WebFlux现cvss10分高危漏洞,可导致环境属性篡改

漏洞概述Spring官方披露了Spring Cloud Gateway Server WebFlux组件中存在一个高危漏洞&#xff08;编号CVE-2025-41243&#xff09;&#xff0c;该漏洞在特定配置下允许攻击者篡改Spring环境属性。该漏洞已获得CVSS 10.0的最高严重性评级。根据安全公告&#xff0c;该漏洞被描…

嵌入式 SQLite 数据库开发笔记

嵌入式 SQLite 数据库开发入门笔记在嵌入式开发中&#xff0c;数据存储与管理是不可或缺的环节。对于资源有限的系统&#xff0c;轻量级数据库 SQLite 是一个非常理想的选择。它无需独立服务进程&#xff0c;直接嵌入到应用中即可使用&#xff0c;既能满足数据持久化需求&#…

Spark面试题及详细答案100道(71-80)-- 配置与部署

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…