【微服務】springboot對接Prometheus指標監控使用詳解

目錄

一、前言

二、微服務監控概述

2.1 微服務常用監控指標

2.2 微服務常用指標監控工具

2.3 微服務使用Prometheus監控優勢

三、環境準備

3.1 部署Prometheus服務

3.2 部署Grafana 服務

3.3 提前搭建springboot工程

3.3.1 引入基礎依賴

3.3.2 配置Actuator 端點

3.3.3 訪問actuator端點

四、springboot接入Prometheus

4.1 工程配置與改造操作流程

4.4.1 引入新的依賴包

4.4.2 補充配置信息

4.4.3 prometheus 端點驗證

4.4.4 增加配置bean

4.4.5 打包并部署到服務器

4.2 配置Prometheus

4.2.1 修改Prometheus 配置文件

4.2.2 重啟Prometheus 服務

五、SpringBoot監控指標接入Grafana

5.1 部署與啟動Grafana服務

5.2 官網拷貝監控模板的ID

5.3 配置dashboard

六、寫在文末


一、前言

隨著微服務在生產環境大規模部署和應用,隨之而來也帶來了新的問題,其中比較關鍵的就是關于微服務的運維和監控。行業有句話叫無監控不運維,以springboot為基礎框架的微服務開發和部署模式,給業務快速發展提供了有效的支撐,但隨著業務的飛速發展,需要拆分的服務也越來越多,這就給線上的運維工作帶了很大的挑戰,所以近些年來,微服務的運維、鏈路跟蹤和各類指標監控被日漸重視起來。本文將結合微服務運維監控中的指標監控進行詳細的說明。

二、微服務監控概述

2.1 微服務常用監控指標

?在微服務的監控世界里,可以說涉及到的內容非常多,涵蓋內容也比較多,結合實際經驗以下列舉了微服務中常用的一些監控指標:

  • 性能指標

    • 響應時間 (Response Time):請求從發起到收到響應的時間。

    • 吞吐量 (Throughput):單位時間內處理的請求數量。

    • 延遲 (Latency):請求到達系統到處理完成的時間。

  • 資源利用

    • CPU 使用率 (CPU Utilization):微服務進程或容器的CPU資源使用情況。

    • 內存使用量 (Memory Usage):微服務進程或容器的內存消耗情況。

    • 磁盤I/O (Disk I/O):磁盤讀寫操作的性能情況。

  • 錯誤指標

    • 錯誤率 (Error Rate):錯誤請求的比例,通常包括4xx和5xx錯誤。

    • 失敗請求數 (Failed Requests):特定時間段內的失敗請求總數。

  • 系統健康

    • 健康檢查 (Health Checks):檢查微服務的健康狀態,通常包括應用程序、數據庫、依賴服務等。

    • 服務可用性 (Service Availability):服務的可用時間與總時間的比率。

  • 業務指標

    • 請求量 (Request Volume):特定時間段內的請求總數。

    • 業務關鍵指標 (Business KPIs):如訂單數量、用戶注冊數等與業務目標相關的指標。

  • 日志監控

    • 日志分析 (Log Analysis):監控應用生成的日志信息,幫助排查問題。

  • 網絡指標

    • 網絡延遲 (Network Latency):網絡傳輸數據的延遲時間。

    • 帶寬使用率 (Bandwidth Usage):網絡帶寬的使用情況。

  • 分布式跟蹤

    • 追蹤請求鏈路 (Request Tracing):追蹤請求在微服務間的流動情況,識別瓶頸。

2.2 微服務常用指標監控工具

在微服務架構中,常用的指標監控工具有很多選擇,以下列舉了幾個比較流行和廣泛使用的工具:

  • Prometheus

    • Prometheus 是一個開源的監控和警報工具包,特別適合動態服務發現和高度動態的環境。它具有強大的數據模型和查詢語言,可以實時存儲和查詢大量時間序列數據,用于監控各種微服務的性能指標。

  • Grafana

    • Grafana 是一個開源的數據可視化和監控平臺,與多種數據源兼容,包括 Prometheus、Elasticsearch、InfluxDB 等。它可以通過儀表盤展示監控數據,支持創建靈活的圖表和警報。

  • Jaeger

    • Jaeger 是一個開源的分布式追蹤系統,用于監控和故障排除微服務架構中的服務調用。它提供了端到端的跟蹤信息,幫助理解和優化服務間的調用路徑和性能問題。

  • Datadog

    • Datadog 是一種云端監控和安全平臺,支持監控微服務的性能、日志和安全事件。它提供實時分析、警報和可視化工具,幫助團隊監控和優化復雜的微服務架構。

  • ELK Stack (Elasticsearch, Logstash, Kibana)

    • ELK Stack 是一個流行的日志管理和分析解決方案,Elasticsearch 用于存儲和搜索日志數據,Logstash 用于數據收集和處理,Kibana 用于數據可視化和分析。ELK Stack 適用于監控微服務的日志輸出,幫助分析和排查問題。

  • Zipkin

    • Zipkin 是另一個開源的分布式追蹤系統,可以幫助追蹤和可視化請求在微服務間的傳播和延遲情況。它支持多種后端存儲,如MySQL、Cassandra等。

  • AWS CloudWatch

    • AWS CloudWatch 是亞馬遜提供的監控和管理服務,用于收集和跟蹤AWS云上的資源和應用程序。它支持監控各種AWS服務以及自定義應用程序指標,可以設置警報和自動響應。

  • New Relic

    • New Relic 提供全棧的性能監控解決方案,適用于云端和本地部署環境。它支持實時監控應用程序性能、基礎設施狀態和用戶行為,幫助優化微服務的性能和穩定性。

工具的選擇通常需要結合團隊的配置,資源的預算以及當前系統所處的階段合理選擇,沒有確定的標準,但是有一點是需要注意的,選擇監控工具時,盡量選擇那些知名度高,運維難度低,社區活躍,同時生態較為豐富的工具。

2.3 微服務使用Prometheus監控優勢

在上一篇 Prometheus搭建與使用,我們較為詳細的了解了Prometheus的使用,Prometheus提供了強大而豐富的監控功能,而且可以結合Grafana 將動態監控的各項指標進行可視化圖形展示,可以說是非常完美的使用組合,而springboot服務在線上運行的過程中,也會產生各類指標數據,基于此,可以將微服務對接Prometheus,利用Grafana 將微服務運行過程中的各項指標信息呈現出來。

具體來說,微服務架構與Prometheus結合使用有幾個顯著的優勢:

  • 動態服務發現和監控

    • 微服務架構通常涉及多個服務實例的動態擴展和收縮,這些實例可以動態添加或刪除。Prometheus支持與服務發現工具(如Kubernetes、Consul等)集成,能夠自動發現和監控這些服務實例的健康狀態和性能指標,無需手動配置每個實例。

  • 多維度數據模型

    • Prometheus使用靈活的多維數據模型來存儲時間序列數據。這種模型允許開發人員定義和記錄各種自定義指標,可以根據服務的特定需求捕獲各種不同的度量數據,如請求延遲、吞吐量、錯誤率等。這對于微服務架構中的復雜度是非常重要的。

  • 強大的查詢語言

    • Prometheus提供了PromQL查詢語言,允許開發人員執行高級查詢和聚合操作,以分析和理解微服務架構中不同服務的性能和行為。這些查詢可以幫助識別瓶頸、優化資源使用和改進系統的可靠性。

  • 可擴展性和靈活性

    • Prometheus設計為可擴展和靈活的監控解決方案,適用于從小型部署到大規模微服務架構的各種場景。它支持水平擴展和分布式部署,可以處理大量的時間序列數據并保持低延遲查詢。

  • 與Grafana等工具的集成

    • Prometheus與Grafana等數據可視化工具集成緊密,可以通過儀表盤直觀地展示收集到的監控數據。這種集成使開發團隊能夠快速識別問題、監控關鍵性能指標并實時做出響應。

三、環境準備

在正式使用springboot接入Prometheus之前,需要提前將相關的環境準備完成。提前準備一臺服務器,部署如下幾個服務即可。

3.1 部署Prometheus服務

參考相關的資料部署Prometheus服務,部署完成后確保能夠訪問下面的頁面

3.2 部署Grafana 服務

Grafana 主要用于展示監控的服務指標信息,以更優雅的可視化看板進行展示

3.3 提前搭建springboot工程

提前準備一個springboot工程,便于后面做集成使用

3.3.1 引入基礎依賴

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.5</version><relativePath/></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency></dependencies>

重點說明一下actuator的作用,這是springboot將指標上報Prometheus的關鍵組件,關于actuator具備如下作用:

  • 健康檢查

    • Actuator 提供了一個 /actuator/health 端點,用于檢查應用程序的健康狀態,開發者可以通過該端點了解應用程序是否正常運行,以及是否存在任何健康問題。

  • 信息端點

    • Actuator 提供了一組信息端點,用于獲取應用程序的詳細信息,例如,/actuator/info 端點可以返回應用程序的自定義信息,如版本號、環境配置等。

  • 度量指標

    • Actuator 收集和暴露了許多與應用程序性能相關的度量指標,如 CPU 使用率、內存使用情況、請求計數等,這些指標可以通過 /actuator/metrics 端點獲取,并用于監控和性能調優。

  • 日志管理

    • Actuator 允許動態修改應用程序的日志級別,而無需重新啟動應用程序,通過 /actuator/loggers 端點,開發者可以查看和修改應用程序中各個日志記錄器的級別。

  • 遠程 Shell

    • Actuator 提供了一個遠程 Shell 端點,可以通過命令行或遠程終端與應用程序進行交互,這使得開發者可以在運行中的應用程序中執行命令、查看狀態等。

3.3.2 配置Actuator 端點

在springboot的yml配置文件中添加如下信息:

server:port: 8087spring:application:name: boot-pro#暴露actuator的端點
management:endpoints:web:exposure:include: "*"

在上面的配置中,通過management這個標簽將actuator的相關指標暴露出去

3.3.3 訪問actuator端點

啟動工程之后,訪問actuator的端點,確保可以正常暴露指標信息

在/actuator這個端點中,列舉出了更詳細的指標信息的url訪問地址,比如需要訪問系統的健康信息指標,可以訪問如下的url

到這里基本的前置準備工作就初步完成了,接下來就是如何接入Prometheus的過程。

四、springboot接入Prometheus

通過上一步,利用actuator暴露服務端點信息的能力,可以將微服務的各項指標暴露出去,理論上講,actuator這個組件就相當于是上一篇提到的各種exporter,用于搜集指標,然后上報到Prometheus,但是光有上面暴露出來的指標信息還不夠,因為Prometheus并不認識這些指標,因此需要通過某種方式進行轉換之后才能被Prometheus接受,下面看具體的操作流程。

4.1 工程配置與改造操作流程

4.4.1 引入新的依賴包

為了讓Prometheus能夠解析actuator的指標信息,還需要引入下面的依賴,通過該組件,將服務的指標信息轉換成Prometheus能夠接收的數據格式

        <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><scope>runtime</scope></dependency>

4.4.2 補充配置信息

在yml配置文件中補充關于Prometheus的配置信息,完整配置如下:

server:port: 8087spring:application:name: boot-pro#暴露actuator的端點
management:endpoints:web:exposure:include: "*"# 激活prometheusendpoint:prometheus:enabled: truehealth:show-details: always#指標信息相關配置metrics:export:prometheus:enabled: true

4.4.3 prometheus 端點驗證

再次啟動工程,重新訪問/actuator端點,此時可以看到展示的端點列表中就有了prometheus的信息

進一步,當訪問prometheus的端點url時,就能看到關于prometheus的相關指標信息了,那么當服務接入prometheus時,prometheus監控的就是如下這些指標數據

4.4.4 增加配置bean

增加如下的配置bean,主要是為了將當前接入到prometheus中的服務具有一個明確的標識

    @BeanMeterRegistryCustomizer<MeterRegistry> configureBean (@Value("${spring.application.name}") String appName){return (registry) -> registry.config().commonTags("application",appName);}

4.4.5 打包并部署到服務器

工程打包并部署到服務器

在工程中有一個接口可以測試一下是否可以正常訪問

4.2 配置Prometheus

以上工程改造就完成了,接下來就需要配置Prometheus 的相關信息了,參考下面的步驟。

4.2.1 修改Prometheus 配置文件

找到prometheus.yml配置文件中,在job的部分添加如下配置內容

scrape_configs:- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]#新增springboot服務的監控    - job_name: "boot-pro"scrape_interval: 5smetrics_path: '/actuator/prometheus'static_configs:- targets: ["localhost(建議使用公網IP):8087"]

配置內容說明:

  • scrape_interval:5s;

    • 每隔5秒,prometheus發起向指點的端點url拉取一次指標監控信息并存儲至本地;

  • metrics_path:

    • 暴露給prometheus拉取監控指標信息的url;

4.2.2 重啟Prometheus 服務

重啟完成之后,再次訪問Prometheus 的控制臺,可以看到上述的微服務指標就在這里展現出來了

通過鏈接點擊進去,正好是 /actuator/prometheus這個端點,里面展示了詳細的被prometheus監控的指標信息

五、SpringBoot監控指標接入Grafana

通過上面的整合,我們已經可以通過Prometheus拉取到springboot的指標信息,但為了后續能夠更直觀的看到指標中的各項數據的動態變化,還需要接入Grafana,利用Grafana強大的數據看板功能進行呈現,下面介紹如何在Grafana中展示SpringBoot的監控指標信息。

5.1 部署與啟動Grafana服務

在準備階段完成

5.2 官網拷貝監控模板的ID

進入Grafana的官網,找一個展示效果還不錯的模板,然后拷貝模板ID供下面配置dashboard使用

dashboard地址:Grafana dashboards | Grafana Labs

可以根據自己的需要搜索并選擇一個合適的模板

比如我選擇下面這個,拷貝并保存這個ID:4701

5.3 配置dashboard

在Grafana界面找到配置dashboard的入口

點擊添加一個新的dashboard,來到下面的頁面

點擊導入一個dashboard

拷貝上面的ID到此處,然后點擊load

首先需要點擊ID框右側的load,它會做ID的正確性檢查,校驗通過之后,再點擊下面的load,才會跳轉到下一頁面,在下面的頁面中,如果之前你沒有配置過Prometheus的數據源的話,還需要重新配置一下

出現上面的信息之后,點擊Import即可,如果導入成功,將會跳轉到下面的頁面看到如下的可視化效果展示

上面只是截了一部分的指標監控信息,頁面上還有更完整的信息可以看到,有興趣的同學可以深入研究里面的配置項。

六、寫在文末

本文通過詳細的操作展示了如何將springboot應用快速接入Prometheus進行指標監控,并且通過配置Grafana將Prometheus監控的指標信息可視化的呈現出來,基于此,可以在實際的項目中,利用這個思路改造現有的工程,并接入Prometheus進行全方位的監控,為日常微服務的運維工作提供便利,希望對看到的同學有用,本篇到此結束,感謝觀看。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42390.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42390.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42390.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux】信號的處理

你很自由 充滿了無限可能 這是很棒的事 我衷心祈禱你可以相信自己 無悔地燃燒自己的人生 -- 東野圭吾 《解憂雜貨店》 信號的處理 1 信號的處理2 內核態 VS 用戶態3 鍵盤輸入數據的過程4 如何理解OS如何正常的運行5 如何進行信號捕捉信號處理的總結6 可重入函數volatile關…

C# 如何獲取屬性的displayName的3種方式

文章目錄 1. 使用特性直接訪問2. 使用GetCustomAttribute()方法通過反射獲取3. 使用LINQ查詢總結和比較 在C#中&#xff0c;獲取屬性的displayName可以通過多種方式實現&#xff0c;包括使用特性、反射和LINQ。下面我將分別展示每種方法&#xff0c;并提供具體的示例代碼。 1.…

數據庫逆向工程工具reverse_sql

reverse_sql 是一個用于解析和轉換 MySQL 二進制日志&#xff08;binlog&#xff09;的工具。它可以將二進制日志文件中記錄的數據庫更改操作&#xff08;如插入、更新、刪除&#xff09;轉換為反向的 SQL 語句&#xff0c;以便對系統或人為產生的誤操作進行數據回滾和恢復。 *…

JVM專題之垃圾收集器

JVM參數 3.1.1 標準參數 -version -help -server -cp 3.1.2 -X參數 非標準參數,也就是在JDK各個版本中可能會變動 ``` -Xint 解釋執行 -Xcomp 第一次使用就編譯成本地代碼 -Xmixed 混合模式,JVM自己來決定 3.1.3 -XX參數 > 使用得最多的參數類型 > > 非…

RedHat運維-Linux文本操作基礎-牛客AWK

1. 查看static這個連接文件是否自動連接的命令是____________________________________&#xff1b; 2. 查看default這個連接文件是否自動連接的命令是_____________________________________&#xff1b; 3. 查看con0這個連接文件是否自動連接的命令是_______________________…

【Python】已解決:(paddleocr導包報錯)ModuleNotFoundError: No module named ‘paddle’

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;&#xff08;paddleocr導包報錯&#xff09;ModuleNotFoundError: No module named ‘paddle’ 一、分析問題背景 近日&#xff0c;一些使用PaddleOCR庫進行文字…

Python數據分析案例49——基于機器學習的垃圾郵件分類系統構建(樸素貝葉斯,支持向量機)

案例背景 trec06c是非常經典的郵件分類的數據&#xff0c;還是難能可貴的中文數據集。 這個數據集從一堆txt壓縮包里面提取出來整理為excel文件還真不容不易&#xff0c;肯定要做一下文本分類。 雖然現在文本分類基本都是深度學習了&#xff0c;但是傳統的機器學習也能做。本案…

C#架構師的成長之路

成為一名C#架構師不僅需要深厚的技術功底&#xff0c;還需要廣泛的行業知識、優秀的團隊協作能力和領導力。以下是C#架構師成長之路上的關鍵步驟和技能要求&#xff1a; 1. 扎實的技術基礎 精通C#語言&#xff1a;深入理解C#的語法、特性&#xff0c;包括但不限于泛型、多線程…

Xilinx FPGA:vivado關于真雙端口的串口傳輸數據的實驗

一、實驗內容 用一個真雙端RAM&#xff0c;端口A和端口B同時向RAM里寫入數據0-99&#xff0c;A端口讀出單數并存入單端口RAM1中&#xff0c;B端口讀出雙數并存入但端口RAM2中&#xff0c;當檢測到按鍵1到來時將RAM1中的單數讀出顯示到PC端&#xff0c;當檢測到按鍵2到來時&…

Vim編輯器與Shell命令腳本

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 目錄 一、Vim文本編輯器 二、編寫Shell腳本 三、流程控制語句 四、計劃任務服務程序 致謝 一、Vim文本編輯器 “在Linux系統中一切都是文件&am…

Rust 程序設計語言學習——函數式語言功能:迭代器和閉包

Rust 的閉包&#xff08;closures&#xff09;是可以保存在一個變量中或作為參數傳遞給其他函數的匿名函數。可以在一個地方創建閉包&#xff0c;然后在不同的上下文中執行閉包運算。不同于函數&#xff0c;閉包允許捕獲被定義時所在作用域中的值。 迭代器&#xff08;iterato…

C++ STL 隨機數用法介紹

目錄 一:C語言中的隨機數 二:C++中的隨機數 1. 生成隨機數的例子 2. 隨機數引擎 3. 隨機數引擎適配器 4. C++中預定義的隨機數引擎,引擎適配器 5. 隨機數分布 一:C語言中的隨機數 <stdlib.h>//初始化隨機種子 srand(static_cast<unsigned int>(time(nullptr)…

C#面: 依賴注入有哪幾種方式?

依賴注入&#xff08;Dependency Injection&#xff0c;簡稱DI&#xff09;是一種設計模式&#xff0c;用于解耦組件之間的依賴關系。在C#中&#xff0c;常見的依賴注入方式有以下幾種&#xff1a; 構造函數注入&#xff08;Constructor Injection&#xff09;&#xff1a;通過…

dependencyManagement的作用、nacos的學習

使用SpringCloudAlibaba注意各組件的版本適配 SpringCloudAlibaba已經包含了適配的各組件&#xff08;nacos、MQ等&#xff09;的版本號&#xff0c;也是一個版本仲裁者&#xff0c;但是可能已經有了父項目Spring-Boot-Starter-Parent這個版本仲裁者&#xff0c;又不能加多個父…

什么是獨立服務器?

獨立服務器是指一個單獨的物理服務器&#xff0c;整體的硬件設施都是獨立存在的&#xff0c;有著強大的性能&#xff0c;只需要運行用戶個人的數據信息&#xff0c;并且可以享受到獨立服務器的硬件與軟件&#xff0c;當網站有著大量的用戶進行訪問或者是需要運行大型的軟件時&a…

leetcode熱題100.零錢兌換(動態規劃)

今天給大家分享一道動態規劃的常考題&#xff0c;零錢兌換&#xff0c;很有趣的動態規劃題目&#xff0c;希望可以對大家找工作過程中起到幫助&#xff0c;幫助大家拓展下思維 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xf…

6、Redis系統-數據結構-06-跳表

六、跳表&#xff08;Skiplist&#xff09; 跳表是一種高效的動態數據結構&#xff0c;可以用于實現有序集合&#xff08;Sorted Set&#xff0c;Zset&#xff09;。與平衡樹相比&#xff0c;跳表具有實現簡單、效率高的優點&#xff0c;因此被 Redis 選用作為有序集合的底層數…

階段三:項目開發---搭建項目前后端系統基礎架構:任務13:實現基本的登錄功能

任務描述 任務名稱&#xff1a; 實現基本的登錄功能 知識點&#xff1a; 了解前端Vue項目的基本執行過程 重 點&#xff1a; 構建項目的基本登陸功能 內 容&#xff1a; 通過實現項目的基本登錄功能&#xff0c;來了解前端Vue項目的基本執行過程&#xff0c;并完成基…

如何讓代碼兼容 Python 2 和 Python 3?Future 庫助你一臂之力

目錄 01Future 是什么? 為什么選擇 Future? 安裝與配置 02Future 的基本用法 1、兼容 print 函數 2、兼容整數除法 3、兼容 Unicode 字符串 03Future 的高級功能 1. 處理字符串與字節 2. 統一異常處理…

linux kthread任務管理

目錄 一、linux 創建內核線程1.1 kthread_create1.2 kthread_create_worker kthread_queue_work 二、設置線程優先級和調度策略2.1 sched_setscheduler2.2 調度策略 一、linux 創建內核線程 1.1 kthread_create 在 linux 中&#xff0c;可以使用 kthread_create 接口創建內核…