在SpringBoot/SpringCloud中實(shí)現(xiàn)監(jiān)控埋點(diǎn)的具體實(shí)踐
在 SpringBoot/SpringCloud 中實(shí)現(xiàn)監(jiān)控埋點(diǎn),核心是構(gòu)建一個(gè)覆蓋指標(biāo)收集、鏈路追蹤、日志聚合三個(gè)維度的可觀測(cè)性體系。下面這個(gè)表格能幫你快速了解核心的監(jiān)控維度、推薦工具及其主要作用。
| 監(jiān)控維度 | 核心技術(shù)/工具 | 主要作用 |
|---|---|---|
| ?? 指標(biāo)監(jiān)控 | Spring Boot Actuator, Micrometer, Prometheus | 收集應(yīng)用性能指標(biāo)(如JVM、HTTP請(qǐng)求、業(yè)務(wù)指標(biāo)),用于性能分析和告警。 |
| ?? 鏈路追蹤 | Spring Cloud Sleuth, Zipkin/Jaeger | 在微服務(wù)架構(gòu)中追蹤一個(gè)請(qǐng)求的完整調(diào)用鏈,用于定位故障點(diǎn)和性能瓶頸。 |
| ?? 日志聚合 | SLF4J + Logback, ELK Stack | 收集、存儲(chǔ)和檢索分布式系統(tǒng)中的日志,配合Trace ID進(jìn)行關(guān)聯(lián)查詢。 |
指標(biāo)監(jiān)控
指標(biāo)監(jiān)控幫助你量化系統(tǒng)的運(yùn)行狀態(tài)。
核心依賴:在項(xiàng)目中引入 Spring Boot Actuator 和 Micrometer 的依賴。Actuator 提供了許多開箱即用的端點(diǎn)(如 /health, /metrics),而 Micrometer 是一個(gè)監(jiān)控門面,可以讓你方便地將指標(biāo)導(dǎo)出到 Prometheus 等外部系統(tǒng)。
<!-- 在 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>
基礎(chǔ)配置:在 application.yml中暴露 Prometheus 端點(diǎn),以便指標(biāo)被采集。
management:
endpoints:
web:
exposure:
include: prometheus,health,info # 暴露指定的監(jiān)控端點(diǎn)
metrics:
tags:
application: ${spring.application.name} # 為所有指標(biāo)添加應(yīng)用標(biāo)簽
配置后,即可通過(guò) /actuator/prometheus訪問(wèn)指標(biāo)。
自定義業(yè)務(wù)指標(biāo):Micrometer 提供了多種指標(biāo)類型,你可以根據(jù)業(yè)務(wù)場(chǎng)景靈活使用:
@Service
public class BusinessService {
private final Counter orderCounter;
public BusinessService(MeterRegistry registry) {
// 創(chuàng)建并注冊(cè)一個(gè)名為 "order.created" 的計(jì)數(shù)器
orderCounter = Counter.builder("order.created")
.description("Number of orders created")
.tag("version", "1.0")
.register(registry);
}
public void createOrder() {
// 業(yè)務(wù)邏輯...
orderCounter.increment(); // 下單成功后計(jì)數(shù)器+1
}
}
- Counter(計(jì)數(shù)器) :用于只增不減的指標(biāo),如訂單量、訪問(wèn)次數(shù)。
- Gauge(儀表盤) :用于反映瞬時(shí)狀態(tài)的可增可減的指標(biāo),如當(dāng)前在線人數(shù)、隊(duì)列大小。
- Timer(計(jì)時(shí)器) :用于記錄耗時(shí)操作,如接口響應(yīng)時(shí)間,并可以計(jì)算分位數(shù)(如P99)。
- 使用示例:你可以通過(guò)注入
MeterRegistry來(lái)創(chuàng)建和注冊(cè)自定義指標(biāo)。
分布式鏈路追蹤
在微服務(wù)架構(gòu)中,鏈路追蹤對(duì)于理解請(qǐng)求的完整路徑至關(guān)重要。
核心依賴與配置:為每個(gè)需要追蹤的微服務(wù)添加 Sleuth 和 Zipkin 客戶端依賴。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
在 application.yml中配置 Zipkin 服務(wù)器地址和采樣率。
spring:
zipkin:
base-url: http://your-zipkin-server-host:9411
sleuth:
sampler:
probability: 1.0 # 采樣率,生產(chǎn)環(huán)境可設(shè)置為0.1(10%)以降低壓力
核心概念:
- Trace:代表一條完整的調(diào)用鏈,擁有一個(gè)唯一的 Trace ID。
- Span:代表調(diào)用鏈中的一個(gè)獨(dú)立工作單元,例如一次服務(wù)調(diào)用。一個(gè) Trace 由多個(gè) Span 組成。
- Sleuth 會(huì)自動(dòng)為通過(guò) RestTemplate、FeignClient 等發(fā)出的請(qǐng)求注入 Trace ID 和 Span ID,并上報(bào)到 Zipkin。在 Zipkin 的 UI 上,你可以根據(jù) Trace ID 直觀地看到請(qǐng)求的完整路徑和每個(gè)環(huán)節(jié)的耗時(shí)。
自定義Span標(biāo)簽:你可以在業(yè)務(wù)代碼中手動(dòng)添加更詳細(xì)的標(biāo)簽信息,便于后續(xù)篩選和定位問(wèn)題。
@Autowired
private Tracer tracer;
public void process() {
Span currentSpan = tracer.currentSpan();
if (currentSpan != null) {
currentSpan.tag("user.id", "12345");
currentSpan.tag("business.type", "payment");
}
// ... 業(yè)務(wù)邏輯
}
日志處理
清晰的日志與鏈路追蹤結(jié)合,能極大提升排查問(wèn)題的效率。
- 結(jié)構(gòu)化日志:在
logback-spring.xml等日志配置文件中,設(shè)置日志輸出模式,確保包含 Sleuth 自動(dòng)添加的[appname,traceId,spanId,exportable]信息。這是將日志與調(diào)用鏈關(guān)聯(lián)的關(guān)鍵。 - 與ELK技術(shù)棧集成:將各微服務(wù)的日志集中收集到 Elasticsearch 中,再通過(guò) Kibana 進(jìn)行查詢。在 Kibana 中,你可以通過(guò) Trace ID 輕松檢索到分布在各個(gè)服務(wù)實(shí)例上的所有相關(guān)日志。
生產(chǎn)環(huán)境注意事項(xiàng)
將監(jiān)控投入生產(chǎn)環(huán)境時(shí),還需注意以下幾點(diǎn):
- 采樣率調(diào)整:在全鏈路追蹤中,高頻請(qǐng)求會(huì)產(chǎn)生海量數(shù)據(jù)。在生產(chǎn)環(huán)境中,應(yīng)根據(jù)實(shí)際需求適當(dāng)降低采樣率(例如設(shè)置為 0.1 或 0.01),以避免對(duì)系統(tǒng)和存儲(chǔ)造成過(guò)大壓力。
- 數(shù)據(jù)存儲(chǔ)與持久化:Zipkin 默認(rèn)將數(shù)據(jù)存在內(nèi)存中,重啟會(huì)丟失。生產(chǎn)環(huán)境務(wù)必配置持久化存儲(chǔ),如 Elasticsearch 或 MySQL。
- 監(jiān)控與告警:利用 Grafana 創(chuàng)建可視化監(jiān)控大盤,對(duì)核心指標(biāo)(如錯(cuò)誤率、延遲)設(shè)置告警規(guī)則,實(shí)現(xiàn)主動(dòng)發(fā)現(xiàn)問(wèn)題。
- 性能影響:監(jiān)控本身也會(huì)消耗少量系統(tǒng)資源。應(yīng)關(guān)注采集代理的性能,避免監(jiān)控過(guò)度侵入影響核心業(yè)務(wù)。
總結(jié)
總的來(lái)說(shuō),在 SpringBoot/SpringCloud 中實(shí)現(xiàn)監(jiān)控埋點(diǎn),指標(biāo)監(jiān)控(Micrometer + Prometheus)讓你知其然,鏈路追蹤(Sleuth + Zipkin)讓你知其所以然,而集中式日志(ELK)則為深入排查提供了詳實(shí)的現(xiàn)場(chǎng)記錄。這三者共同構(gòu)成了微服務(wù)可觀測(cè)性的堅(jiān)實(shí)基座。
以上就是在SpringBoot/SpringCloud中實(shí)現(xiàn)監(jiān)控埋點(diǎn)的具體實(shí)踐的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot/SpringCloud監(jiān)控埋點(diǎn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java如何根據(jù)文件名前綴自動(dòng)分組圖片文件
一大堆文件(比如圖片)堆在一個(gè)目錄下,它們的命名規(guī)則遵循一定的格式,混在一起很難管理,所以本文小編就和大家介紹一下如何使用Java根據(jù)文件名前綴自動(dòng)分組圖片文件吧2025-05-05
SpringBoot中@RestControllerAdvice @ExceptionHandler異常統(tǒng)一處
這篇文章主要介紹了SpringBoot中@RestControllerAdvice @ExceptionHandler異常統(tǒng)一處理類失效原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Java使用注解實(shí)現(xiàn)防止重復(fù)提交實(shí)例
這篇文章主要介紹了Java使用注解實(shí)現(xiàn)防止重復(fù)提交實(shí)例,在一些項(xiàng)目中由于用戶誤操作,多次點(diǎn)擊表單提交按鈕,會(huì)產(chǎn)生很多次的數(shù)據(jù)交互,為了解決這一問(wèn)題,本文使用注解來(lái)實(shí)現(xiàn)防止重復(fù)提交,需要的朋友可以參考下2023-07-07
SpringBoot使用admin+actuator實(shí)現(xiàn)日志可視化的方法
如何在SpringBoot中使用Admin和Actuator實(shí)現(xiàn)日志可視化,需配置pom依賴、yml參數(shù)及l(fā)ogback路徑,確保兩者一致,啟動(dòng)服務(wù)后通過(guò)指定端口訪問(wèn)日志界面,并檢查404錯(cuò)誤原因,感興趣的朋友一起看看吧2025-06-06
JAVA項(xiàng)目如何打包部署到Linux服務(wù)器上
本文詳細(xì)介紹了在服務(wù)器上部署環(huán)境包括JDK、MySQL、Tomcat的設(shè)置,以及使用Idea-Maven-SpringBoot進(jìn)行jar包打包部署的流程,內(nèi)容涵蓋了MySQL配置注意事項(xiàng)、pom.xml配置、打包命令等關(guān)鍵步驟,同時(shí),也提供了如何將jar包上傳到Linux服務(wù)器并運(yùn)行的具體方法2024-10-10

