SpringBoot整合Prometheus如何實(shí)現(xiàn)資源監(jiān)控
引言
在微服務(wù)架構(gòu)流行的今天,服務(wù)的監(jiān)控和管理變得尤為重要。Prometheus 作為一個(gè)開源的監(jiān)控和告警工具,以其強(qiáng)大的數(shù)據(jù)采集、存儲(chǔ)和查詢能力,受到了眾多開發(fā)者的青睞。
Spring Boot 作為 Java 領(lǐng)域快速構(gòu)建微服務(wù)的框架,與 Prometheus 的結(jié)合可以實(shí)現(xiàn)對(duì) Spring Boot 應(yīng)用的實(shí)時(shí)監(jiān)控。本文將介紹如何使用 Prometheus 監(jiān)控 Spring Boot 應(yīng)用。
Prometheus 簡(jiǎn)介
Prometheus 是一個(gè)開源的系統(tǒng)監(jiān)控和警報(bào)工具包,它通過采集和存儲(chǔ)指標(biāo)(metrics),提供了強(qiáng)大的數(shù)據(jù)查詢語(yǔ)言,可以幫助我們分析和理解應(yīng)用程序的行為。
Prometheus 的核心組件是 Prometheus Server,它負(fù)責(zé)采集監(jiān)控指標(biāo)并提供查詢接口。
Spring Boot Actuator
Spring Boot Actuator 是 Spring Boot 提供的一系列用于監(jiān)控和管理 Spring Boot 應(yīng)用的工具。
它提供了許多端點(diǎn)(endpoints),例如 /health、/info、/metrics 等,這些端點(diǎn)可以公開應(yīng)用的內(nèi)部信息,如健康狀態(tài)、配置信息和度量指標(biāo)。
集成 Prometheus 和 Spring Boot
要將 Prometheus 與 Spring Boot 應(yīng)用集成,
我們需要執(zhí)行以下步驟:
添加依賴
首先,將 Spring Boot Actuator 和 Micrometer Prometheus Registry 添加到項(xiàng)目的依賴中。
Actuator 提供了一系列內(nèi)置端點(diǎn),用于顯示運(yùn)行應(yīng)用的性能信息,如健康狀況、指標(biāo)等。
Micrometer Prometheus registry 會(huì)將這些指標(biāo)格式化為 Prometheus 可讀格式。
- xml
<dependencies>
<!-- Spring Boot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.7.15</version>
</dependency>
<!-- Micrometer Prometheus Registry -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.9.14</version>
</dependency>
</dependencies>配置 Actuator
在 application.yml 或 application.properties 文件中配置 Actuator 以暴露 Prometheus 端點(diǎn)。
例如,在 application.yml 中:
- yaml
management:
endpoints:
web:
exposure:
include: '*'
metrics:
export:
prometheus:
enabled: true
endpoints:
web:
base-path: "/status" # 將/actuator/xxx修改為/status/xxx,防止被猜到
server:
request:
metric-name: "application:request" # 自定義接口指標(biāo)名
client:
request:
metric-name: "application:client_request" # 自定義http客戶端指標(biāo)名
server:
port: 10111 # 指定端口,默認(rèn)跟server.port一樣,可以防止被猜到配置 Prometheus
下載并運(yùn)行 Prometheus Server,然后從 Prometheus 官網(wǎng)或 GitHub 倉(cāng)庫(kù)獲取適用于您操作系統(tǒng)的版本。
啟動(dòng) Prometheus Server 后,需要修改其配置文件 prometheus.yml,以便添加 Spring Boot 應(yīng)用作為監(jiān)控目標(biāo)。
- yaml
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: 'prometheusapp'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080']監(jiān)控落地
基于 Prometheus + Grafana 的監(jiān)控落地,包括安裝 Prometheus + Grafana、導(dǎo)入依賴、配置 Prometheus 拉取數(shù)據(jù)以及配置 Grafana 監(jiān)控面板。
通過上述步驟,我們可以成功地將 Prometheus 與 Spring Boot 應(yīng)用集成,實(shí)現(xiàn)對(duì)應(yīng)用的實(shí)時(shí)監(jiān)控。
監(jiān)控結(jié)果與可觀察的指標(biāo)
在Spring Boot應(yīng)用中整合Prometheus后,我們可以監(jiān)控到一系列關(guān)鍵的性能指標(biāo),這些指標(biāo)對(duì)于理解應(yīng)用的行為和健康狀況至關(guān)重要。
以下是一些主要的監(jiān)控結(jié)果和可觀察的指標(biāo):
系統(tǒng)和JVM指標(biāo)
- CPU使用率:監(jiān)控系統(tǒng)CPU的使用情況,可以通過PromQL查詢r(jià)ate(process_cpu_seconds_total[5m])來獲取。
- 內(nèi)存使用情況:包括堆內(nèi)存和非堆內(nèi)存的使用情況,可以通過jvm_memory_used_bytes等指標(biāo)來監(jiān)控。
- 垃圾回收(GC):監(jiān)控JVM的垃圾回收情況,包括GC次數(shù)和耗時(shí),可以通過jvm_gc_collection_seconds_sum等指標(biāo)來監(jiān)控。
應(yīng)用性能指標(biāo)
- 請(qǐng)求處理時(shí)間:監(jiān)控接口的響應(yīng)時(shí)間,可以通過http_server_requests_seconds等指標(biāo)來獲取。
- 請(qǐng)求量:監(jiān)控接口的請(qǐng)求次數(shù),可以通過http_server_requests_total等指標(biāo)來監(jiān)控。
- 錯(cuò)誤率:監(jiān)控接口的錯(cuò)誤請(qǐng)求次數(shù),可以通過http_server_requests_seconds_count等指標(biāo)來監(jiān)控。
業(yè)務(wù)指標(biāo)
- 訂單總額:模擬訂單系統(tǒng)的實(shí)時(shí)訂單總額,可以通過自定義指標(biāo)order_amount_sum來監(jiān)控。
- 下單失敗率:監(jiān)控10分鐘內(nèi)的下單失敗率,可以通過自定義指標(biāo)來實(shí)現(xiàn)監(jiān)控。
- 請(qǐng)求失敗數(shù):監(jiān)控請(qǐng)求失敗的次數(shù),可以通過自定義指標(biāo)來實(shí)現(xiàn)監(jiān)控。
容器和部署指標(biāo)
- 容器啟動(dòng)時(shí)間:監(jiān)控容器的啟動(dòng)時(shí)間,可以通過自定義腳本和Prometheus的pushgateway來實(shí)現(xiàn)。
- 容器運(yùn)行時(shí)指標(biāo):監(jiān)控容器的運(yùn)行時(shí)指標(biāo),如資源使用情況等。
自定義指標(biāo)
- 接口調(diào)用次數(shù)和耗時(shí):通過自定義指標(biāo)來監(jiān)控特定接口的調(diào)用次數(shù)和耗時(shí),可以通過method_rt等指標(biāo)來監(jiān)控。
- 訂單請(qǐng)求次數(shù):通過自定義指標(biāo)metrics_request_count來監(jiān)控訂單請(qǐng)求的次數(shù)。
通過這些指標(biāo),我們可以對(duì)Spring Boot應(yīng)用的性能和健康狀況有一個(gè)全面的了解。
這些數(shù)據(jù)不僅可以幫助我們及時(shí)發(fā)現(xiàn)和解決問題,還可以用于性能優(yōu)化和故障排查。
通過Grafana等可視化工具,我們可以將這些指標(biāo)以圖表的形式展示出來,使得監(jiān)控結(jié)果更加直觀和易于理解。
如何通過Prometheus監(jiān)控分布式系統(tǒng)的指標(biāo)?
要通過Prometheus監(jiān)控分布式系統(tǒng)的指標(biāo),可以遵循以下步驟和最佳實(shí)踐:
選擇合適的監(jiān)控指標(biāo)
根據(jù)Google的分布式監(jiān)控經(jīng)驗(yàn),推薦的四個(gè)黃金指標(biāo)包括[1]:
- 延遲:服務(wù)請(qǐng)求的時(shí)間,反映用戶體驗(yàn)和系統(tǒng)核心性能。
- 通訊量:監(jiān)控當(dāng)前系統(tǒng)的流量,用于衡量服務(wù)的容量需求。
- 錯(cuò)誤:監(jiān)控當(dāng)前系統(tǒng)所有發(fā)生的錯(cuò)誤請(qǐng)求,衡量當(dāng)前系統(tǒng)錯(cuò)誤發(fā)生的速率。
- 飽和度:衡量當(dāng)前服務(wù)的飽和度,主要強(qiáng)調(diào)最能影響服務(wù)狀態(tài)的受限制的資源,如內(nèi)存狀態(tài)。
使用Exporter收集數(shù)據(jù)
Prometheus通過Exporter來收集分布式系統(tǒng)中的數(shù)據(jù)。常見的Exporter包括[11]:
- NodeExporter:收集主機(jī)的CPU、內(nèi)存、磁盤等信息。
- 其他Exporter:根據(jù)需要監(jiān)控的具體服務(wù)或組件,可能需要使用特定的Exporter。
配置Prometheus
配置Prometheus的prometheus.yml文件,定義如何拉取不同Exporter的數(shù)據(jù)[11]:
- yaml
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:8080']這將配置Prometheus從NodeExporter的:8080端口拉取數(shù)據(jù)。
多集群監(jiān)控方案
在分布式云場(chǎng)景下,可以采用TMP+TDCC方案,通過在中心賬號(hào)下創(chuàng)建TMP監(jiān)控實(shí)例,并在該賬號(hào)下開啟TDCC HUB集群,將其他賬號(hào)下的集群統(tǒng)一注冊(cè)到TDCC HUB集群中,實(shí)現(xiàn)一套監(jiān)控系統(tǒng)采集所有集群的指標(biāo)[9]。
聚合查詢與指標(biāo)數(shù)據(jù)量
對(duì)于多集群數(shù)據(jù)存放在一起的情況,可以進(jìn)行預(yù)聚合以減少查詢時(shí)Prometheus的壓力和反饋耗時(shí)[9]。同時(shí),需要注意監(jiān)控?cái)?shù)據(jù)的總量,建議所有集群總的數(shù)據(jù)量不超過450w。
可視化與告警
使用Grafana與Prometheus結(jié)合,實(shí)現(xiàn)數(shù)據(jù)的可視化展示[12]。同時(shí),可以設(shè)置告警規(guī)則,當(dāng)特定指標(biāo)超過閾值時(shí)觸發(fā)告警。
監(jiān)控指標(biāo)的類型
Prometheus主要有四種類型的監(jiān)控指標(biāo)[10]:
- Counter:只增不減的計(jì)數(shù)器,如HTTP訪問量。
- Gauge:反映系統(tǒng)的當(dāng)前狀態(tài),可增可減,如CPU使用率。
- Histogram:用于統(tǒng)計(jì)和分析樣本的分布情況。
- Summary:與Histogram類似,但提供了分位數(shù)統(tǒng)計(jì)。
通過上述步驟和實(shí)踐,可以有效地通過Prometheus監(jiān)控分布式系統(tǒng)的指標(biāo),確保系統(tǒng)的穩(wěn)定性和性能。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- springboot整合prometheus實(shí)現(xiàn)資源監(jiān)控的詳細(xì)步驟
- SpringBoot集成 Prometheus進(jìn)行高效監(jiān)控的實(shí)現(xiàn)
- SpringBoot使用Prometheus實(shí)現(xiàn)監(jiān)控
- SpringBoot集成Prometheus實(shí)現(xiàn)監(jiān)控的過程
- Prometheus監(jiān)控Springboot程序的實(shí)現(xiàn)方法
- SpringBoot使用prometheus監(jiān)控的示例代碼
- SpringBoot+Prometheus+Grafana實(shí)現(xiàn)應(yīng)用監(jiān)控和報(bào)警的詳細(xì)步驟
- SpringBoot Admin與Prometheus集成監(jiān)控
相關(guān)文章
Mybatis中如何設(shè)置sqlSession自動(dòng)提交
在MyBatis中,默認(rèn)情況下,獲取的SqlSession對(duì)象不會(huì)自動(dòng)提交事務(wù),這意味著在進(jìn)行更新、刪除或插入等操作后,需要顯式調(diào)用commit方法來提交事務(wù),但是,可以在獲取SqlSession時(shí)通過將openSession方法的參數(shù)設(shè)置為true2024-09-09
springboot接收json數(shù)據(jù)時(shí),接收到空值問題
這篇文章主要介紹了springboot接收json數(shù)據(jù)時(shí),接收到空值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
關(guān)于SpringSecurity認(rèn)證邏輯源碼分析
這篇文章主要介紹了關(guān)于SpringSecurity認(rèn)證邏輯源碼分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
解決Mybatis報(bào)錯(cuò):org.apache.ibatis.reflection.ReflectionException
文章主要討論了在使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)遇到的幾個(gè)常見問題及其解決方法,首先,文章指出如果DTO類中沒有定義getter和setter方法,會(huì)導(dǎo)致反射異常,解決方法是使用Lombok的@Data注解自動(dòng)生成這些方法2025-01-01
Springboot?集成spring?cache緩存的解決方案
這篇文章主要介紹了Springboot?集成spring?cache緩存,使用緩存最關(guān)鍵的一點(diǎn)就是保證緩存與數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性,本文給大家介紹最常用的緩存操作模式,對(duì)Springboot?集成spring?cache緩存操作流程感興趣的朋友一起看看吧2022-06-06
詳解Java MyBatis 插入數(shù)據(jù)庫(kù)返回主鍵
這篇文章主要介紹了詳解Java MyBatis 插入數(shù)據(jù)庫(kù)返回主鍵,有興趣的可以了解一下。2017-01-01

