Spring Boot Actuator自定義指標與監控實踐指南

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&…