目錄
一、前言
二、微服務監控概述
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進行全方位的監控,為日常微服務的運維工作提供便利,希望對看到的同學有用,本篇到此結束,感謝觀看。