Spring Boot × K8s 監控實戰-集成 Prometheus 與 Grafana

在微服務架構中,應用的可觀測性至關重要。Kubernetes 已成為容器化部署的標準,但其自身的監控能力有限,需要與其他工具集成才能實現詳細的運行數據采集與分析。

本文將通過 Spring Boot + Kubernetes + Prometheus + Grafana 實戰,打造一套高效監控體系,實現“數據采集 → 存儲 → 分析 → 可視化”的完整流程。

相關工具簡介:

? Kubernetes(K8S):容器化應用的部署與管理平臺,其自帶的監控能力較為基礎。

? Prometheus:開源的云原生監控系統,拉取(pull)Spring Boot Actuator 暴露的監控數據,并提供強大的查詢與分析。

? Grafana:可視化工具,將 Prometheus 數據呈現為直觀的儀表盤,幫助開發和運維人員實時監控應用狀態。

一、搭建監控基礎

1.1 配置 Spring Boot 集成 Prometheus

Spring Boot 可以集成 Prometheus,具體步驟如下。

步驟 1:添加必要的依賴

在pom.xml中添加以下依賴:

<!-- Actuator 依賴:提供應用的管理和監控端點 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><!-- Prometheus 依賴:支持 Prometheus 采集監控數據 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

解析:

Spring Boot Actuator 提供應用運行狀態的管理端點,如:

? /actuator/health:應用健康檢查

? /actuator/metrics:應用度量指標

? /actuator/prometheus:提供 Prometheus 可抓取的監控數據

Prometheus:

? 以定時抓取(pull模式) 的方式,從指定的 HTTP 端點獲取監控數據。

? 默認會讀取/actuator/prometheus端點的數據,并存儲、分析、提供查詢功能。

步驟 2:啟用 Prometheus 端點

在application.properties或application.yml中配置 Actuator 端點:

management:endpoints:web:exposure:include: health,metrics,prometheus

這樣,/actuator/prometheus端點會暴露,Prometheus 可以抓取該數據。

解析

? 指示 Spring Boot僅暴露health、metrics和prometheus三個管理端點,避免暴露過多無關信息。

? health 端點 是默認啟動端點,無需再顯示開啟。

1.2 Kubernetes 中配置監控

將 Spring Boot 應用部署到 Kubernetes 時,需要確保 Prometheus 能抓取到應用的監控數據。

步驟1:安裝Prometheus

使用 Helm 在 Kubernetes 集群中安裝 Prometheus Operator:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack

說明:

? helm install prometheus prometheus-community/kube-prometheus-stack:安裝 Prometheus 及相關組件,如 Grafana、Alertmanager。

? 默認情況下,Prometheus 會自動發現 Kubernetes 中的 Pod、Service 進行監控,但我們仍需確保 Spring Boot 應用的監控端點可被 Prometheus 訪問。

步驟2:創建 Service公開監控端點

創建 KubernetesService文件,并指定要暴露的端口,確保 Prometheus 可以訪問/actuator/prometheus端點。

在service.yaml 中配置:

apiVersion: v1
kind: Service
metadata:name: spring-boot-app
spec:ports:- port: 8080targetPort: 8080name: httpselector:app: spring-boot

應用該配置:

kubectl apply -f service.yaml

說明:

? spring-boot-app是Service的名稱,它映射到了 Spring Boot 應用的 8080 端口。

? Prometheus 會通過spring-boot-app.default.svc.cluster.local:8080訪問應用的/actuator/prometheus端點。這是 Kubernetes 中的 DNS 服務自動解析的規則。

1.3 Prometheus 配置抓取數據

在 Kubernetes 集群中,修改 Prometheus 配置,使其能夠定期抓取 Spring Boot 應用的監控數據。

步驟1:配置 Prometheus

1.在 Prometheus 配置目錄(如果使用helm安裝,則ConfigMap可能已默認配置)下,創建prometheus-config.yaml,內容如下:

apiVersion: v1
kind: ConfigMap
metadata:name: prometheus-confignamespace: monitoring
data:prometheus.yml: |global:scrape_interval: 15s  # 每 15 秒抓取一次數據scrape_configs:- job_name: 'spring-boot-app'metrics_path: '/actuator/prometheus'static_configs:- targets: ['spring-boot-app.default.svc.cluster.local:8080']

2.部署ConfigMap到 Kubernetes 集群:

kubectl apply -f prometheus-config.yaml

說明:

? 該ConfigMap將被 Prometheus 讀取,指定抓取 Spring Boot 應用的監控數據。

? scrape_interval: 15s表示 Prometheus 每 15 秒抓取一次監控數據。

步驟2:在 Prometheus 部署中加載 ConfigMap

1.修改 Prometheus 的Deployment文件(如果使用 Helm 安裝,則需要修改values.yaml配置文件):

apiVersion: apps/v1
kind: Deployment
metadata:name: prometheusnamespace: monitoring
spec:template:spec:volumes:- name: prometheus-config-volumeconfigMap:name: prometheus-configcontainers:- name: prometheusimage: prom/prometheusvolumeMounts:- name: prometheus-config-volumemountPath: /etc/prometheussubPath: prometheus.yml

2.應用修改后的配置:

kubectl apply -f prometheus-deployment.yaml

1.4 驗證 Prometheus配置

部署完成后,訪問 Prometheus Web UI(默認端口9090):

kubectl port-forward svc/prometheus 9090:9090 -n monitoring

在瀏覽器打開http://localhost:9090,進入Targets頁面,查看spring-boot-app是否在UP狀態。

總結

1.Prometheus 安裝:使用 Helm 在 Kubernetes 集群中安裝kube-prometheus-stack。

2.Service 創建:在 Spring Boot 應用的k8s部署文件夾下創建service.yaml并部署到 Kubernetes。

3.Prometheus 配置:

? 在 Kubernetes 中創建ConfigMap,配置 Prometheus 采集 Spring Boot/actuator/prometheus數據。

? 在 PrometheusDeployment中掛載ConfigMap,確保 Prometheus 正確加載配置。

4.驗證監控是否生效:使用kubectl port-forward訪問 Prometheus Web UI,確認監控數據是否正常抓取。

二、集成 Grafana可視化

2.1 配置 Grafana

使用 Helm 安裝 Grafana:

helm install grafana stable/grafana

訪問 Grafana 控制臺(默認用戶名和密碼為admin):

http://<grafana-service-ip>:3000

2.2 配置 Prometheus 數據源

在 Grafana 控制臺中配置 Prometheus 為數據源,URL 為:

http://prometheus-server:80

確認連接成功后,Grafana 就可以從 Prometheus 中獲取監控數據。

2.3 創建監控面板

在 Grafana 中,選擇 Prometheus 數據源,并根據需要創建監控面板。常見監控指標包括 JVM 內存使用、請求響應時間、系統負載、自定義業務指標等。

三、Spring Boot 應用部署到 Kubernetes

3.1 Spring Boot 應用目錄結構

通常在 Spring Boot 項目中,會有應用代碼和配置,以及部署相關文件,推薦的目錄結構如下:

springboot-app/
│── src/                      # Spring Boot 代碼
│── pom.xml 或 build.gradle   # 依賴管理
│── Dockerfile                # 構建 Docker 鏡像
│── config/                   # 應用配置(如 application.yml)
│── deployment/               # K8s 部署文件
│   ├── deployment.yaml       # Deployment 資源
│   ├── service.yaml          # Service 資源
│   ├── configmap.yaml        # 可選的 ConfigMap 資源
│   ├── ingress.yaml          # 可選的 Ingress 資源

其中:

? Dockerfile:用于構建 Spring Boot 容器鏡像。

? deployment/ 目錄:存放 Kubernetes 相關的 YAML 配置文件,用于部署、服務等。

如下是應用部署到K8S 的步驟:

3.2 創建 Docker 鏡像

在將 Spring Boot 應用部署到 Kubernetes 前,需要構建 Docker 鏡像。在項目根目錄下創建Dockerfile:

步驟1:創建 Docker 鏡像

# 使用官方的 OpenJDK 鏡像作為基礎鏡像
FROM openjdk:17-jdk-alpine# 設置工作目錄
WORKDIR /app# 將 Spring Boot 構建的 JAR 文件復制到容器中
COPY target/myapp.jar app.jar# 設置容器啟動時運行的命令
ENTRYPOINT ["java", "-jar", "app.jar"]

解析:

1.FROM openjdk:11-jre-slim: 選擇一個基礎的 Java 鏡像。

2.COPY ${JAR_FILE} app.jar: 將構建好的 Spring Boot JAR 文件復制到容器中。

3.ENTRYPOINT [“java”, “-jar”, “/app.jar”]: 設置容器啟動時執行的命令,啟動 Spring Boot 應用。

3.3 構建并推送鏡像

步驟1:構建鏡像

docker build -t springboot-app .

步驟2:推送鏡像到鏡像倉庫

具體步驟:

1.登錄 Docker Hub(如果使用 Docker Hub):

docker login

輸入用戶名和密碼以驗證身份。

2.給鏡像打標簽(假設鏡像倉庫是docker.io):

docker tag springboot-app:latest docker.io/yourusername/springboot-app:latest

為本地鏡像springboot-app:latest打上標簽,使其能夠正確推送到 Docker Hub。yourusername是你的 Docker Hub 用戶名,docker.io是 Docker Hub 默認倉庫。

3.推送鏡像到鏡像倉庫:

docker push docker.io/yourusername/springboot-app:latest

將打標簽后的鏡像推送到 Docker Hub 上的倉庫。

3.4 部署到 Kubernetes

步驟1:創建deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:name: springboot-app
spec:replicas: 3selector:matchLabels:app: springboot-apptemplate:metadata:labels:app: springboot-appspec:containers:- name: springboot-appimage: springboot-app:latestports:- containerPort: 8080

解析:

1.replicas: 3: 部署三個副本,確保應用高可用。

2.image: springboot-app:latest: 使用構建好的 Docker 鏡像。

3.containerPort: 8080: 暴露容器的 8080 端口。

步驟2:部署應用

kubectl apply -f deployment.yaml

此命令會啟動一個具有 3 個副本的 Spring Boot 應用,并暴露為一個 Kubernetes 服務。

3.5 創建服務暴露應用

步驟1:創建服務文件service.yaml來暴露應用:

apiVersion: v1
kind: Service
metadata:name: spring-boot-app
spec:ports:- port: 8080targetPort: 8080selector:app: spring-boot

步驟2:應用服務

kubectl apply -f service.yaml

通過如上步驟完成應用部署后,Spring Boot 應用將運行在 Kubernetes 集群中,并可以通過 Prometheus 和 Grafana 進行監控。

四、自動發現服務監控目標

Prometheus 可以通過 Kubernetes 的服務發現功能,自動抓取集群中所有服務的數據。

在 prometheus.yml配置中啟用Kubernetes 服務發現:

scrape_configs:- job_name: 'springboot-app'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_label_app]target_label: app- source_labels: [__meta_kubernetes_pod_name]target_label: pod_namemetrics_path: '/actuator/prometheus'scheme: httpport: 8080

這樣 Prometheus 能夠自動發現 Kubernetes 中的 Spring Boot 服務,無需手動添加監控信息。

五、Grafana 高級功能

5.1 設置報警規則

Grafana 不僅能夠展示監控數據,還能夠設置報警規則。您可以配置響應時間、錯誤率等閾值,當超過指定條件時觸發報警。

以下是設置報警規則的步驟:

1.在 Grafana 儀表板中,選擇一個面板,點擊 “Edit”。

2.選擇 “Alert” 標簽,點擊 “Create Alert”。

3.配置報警條件,如當響應時間大于 2 秒時觸發報警。

5.2 多面板展示

Grafana 支持將不同類型的監控數據展示在同一面板上。如將 CPU 使用率、內存使用情況、請求響應時間等多個圖表放在同一個儀表板上,創建一個綜合的監控視圖。

六、構建跨微服務的完整監控系統

在微服務架構中,監控不僅限于單一服務,而是需要跨多個服務進行集中管理。使用 Prometheus 和 Grafana可以輕松實現跨微服務的監控。

6.1 Prometheus 聯邦聚合

功能:允許多個 Prometheus 實例將監控數據聚合到一個中央實例,適用于多集群環境。通過配置prometheus.yml,您可以將其他 Prometheus 實例作為數據源,進行數據聚合。

示例配置:

scrape_configs:- job_name: 'federated'  # 定義抓取任務名稱,這里為 'federated'metrics_path: '/federate'  # 指定聚合抓取的路徑,通常 Prometheus 會在 /federate 路徑提供聚合數據static_configs:- targets: ['prometheus-instance-1:9090', 'prometheus-instance-2:9090']  # 配置聚合 Prometheus 實例的地址,指向其他 Prometheus 

實例的 API,通常是每個集群中 Prometheus 的地址。
這樣中央 Prometheus 實例將定期抓取多個實例的數據。

6.2 Grafana 跨集群展示

功能:在 Grafana 中配置多個 Prometheus 數據源,集中展示不同集群的監控數據。這樣,您可以通過一個儀表板查看多個集群的指標。

操作:在 Grafana 的 “Data Sources” 設置中添加不同 Prometheus 數據源,每個數據源指向不同的集群實例。

七、總結

7.1 核心重點:

? Spring Boot 與 Kubernetes 集成

在 Kubernetes 中部署 Spring Boot 應用,實現容器化管理與自動擴展。

? Prometheus 集成與優化

使用 Spring Boot Actuator 暴露監控端點,配置 Prometheus 自動抓取數據,優化監控準確性。

? Grafana 可視化面板配置

配置 Grafana 連接 Prometheus,展示應用健康、性能和資源使用情況。

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

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

相關文章

phpstudy修改Apache端口號

1. 修改Listen.conf文件 本地phpstudy安裝目錄&#xff1a; 2.其他問題 ① 修改httpd.conf不起作用 ② 直接通過控制面板配置好像有延遲緩存

(done) 吳恩達版提示詞工程 6. 轉換 (翻譯,通用翻譯,語氣風格變換,文本格式轉換,拼寫檢查和語法檢查)

視頻&#xff1a;https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 別人的筆記&#xff1a;https://zhuanlan.zhihu.com/p/626966526 6. 轉換任務&#xff08;Transforming&#xff0…

什么是靜態住宅ip,跨境電商為什么要用靜態住宅ip

在數字時代&#xff0c;IP地址不僅是設備聯網的“ID”&#xff0c;更是跨境電商運營中的關鍵工具。尤其對于需要長期穩定、安全操作的場景&#xff0c;靜態住宅IP逐漸成為行業首選。 一、什么是靜態住宅IP&#xff1f; 靜態住宅IP&#xff08;Static Residential IP&#xff0…

Qemu-STM32(十七):STM32F103加入AFIO控制器

概述 本文主要描述了在Qemu平臺中&#xff0c;如何添加STM32F103的AFIO控制器模擬代碼&#xff0c;AFIO是屬于GPIO引腳復用配置的功能。 參考資料 STM32F1XX TRM手冊&#xff0c;手冊編號&#xff1a;RM0008 添加步驟 1、在hw/arm/Kconfig文件中添加STM32F1XX_AFIO&#x…

QuecPython+audio:實現音頻的錄制與播放

概述 QuecPython 作為專為物聯網設計的開發框架&#xff0c;通過高度封裝的 Python 接口為嵌入式設備提供了完整的音頻處理能力。本文主要介紹如何利用 QuecPython 快速實現音頻功能的開發。 核心優勢 極簡開發&#xff1a;3行代碼完成基礎音頻錄制與播放。快速上手&#xf…

企業架構之旅(3):TOGAF ADM架構愿景的核心價值

一、引言&#xff1a;為什么架構愿景是企業架構的「導航圖」 在企業數字化轉型的浪潮中&#xff0c;TOGAF ADM&#xff08;架構開發方法&#xff09;作為公認的企業架構「方法論圣經」&#xff0c;其首個關鍵階段 —— 架構愿景&#xff08;Architecture Vision&#xff09;&a…

C++:Lambda表達式

C&#xff1a;Lambda表達式 C中lambda的基本語法1. 捕獲列表&#xff08;Capture List&#xff09;2. 示例代碼示例 1&#xff1a;簡單的lambda示例 2&#xff1a;捕獲變量示例 3&#xff1a;按引用捕獲示例 4&#xff1a;捕獲所有變量示例 5&#xff1a;作為函數參數 3. lambd…

被關在idea小黑屏里寫spark程序

一、先在idea中添加Scala插件 二、使用Maven創建新項目 1.啟動idea,選擇新建項目。之后的設置如下&#xff1a; 2.將Scala添加到全局庫中&#xff08;注意&#xff1a;Scala的版本不宜太高&#xff0c;最好是2-12.否則后面會報下面這個錯誤 E:\tool接口\SparkCore_01\src\mai…

自動化立庫/AGV物流仿真詳細步驟

以下是一種可以在預算和周期內實現自動化立庫及AGV 方案仿真分析的方法&#xff1a; 一、工具選擇 軟件工具FlexSim&#xff1a;這是一款流行的離散事件仿真軟件。它具有直觀的圖形用戶界面&#xff0c;通過簡單的拖拽操作就可以構建自動化立庫和 AGV 的模型。其內置的豐富的…

使用springboot+easyexcel實現導出excel并合并指定單元格

1&#xff1a;準備一個單元格合并策略類代碼&#xff1a; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.metadata.holder.Writ…

Python三大Web框架對比:Django、Flask、Tornado的異步實現方式詳解

目錄 引言 一、框架基礎概覽 1.1 Django 1.2 Flask 1.3 Tornado 二、異步編程基礎 2.1 同步 vs 異步 2.2 Python異步演進 三、框架異步實現對比 3.1 Django的異步進化 3.2 Flask的異步擴展 3.3 Tornado的異步范式 四、異步實現差異對比 4.1 實現機制對比 4.2 性…

深入理解Spring AI框架的核心概念

深入理解Spring AI框架的核心概念 前言 在當今人工智能飛速發展的時代&#xff0c;將AI技術集成到應用程序中已成為眾多開發者關注的焦點。Spring AI框架為Java開發者提供了便捷的途徑來實現這一目標。理解其核心概念對于充分發揮框架的潛力至關重要。本文將詳細探討Spring A…

LabVIEW基于VI Server的控件引用操作

本 VI 通過展示控件引用&#xff08;Control References&#xff09;的使用&#xff0c;借助 VI Server 實現對前面板對象的編程操作。 ? 詳細說明 隱式屬性節點&#xff08;Implicitly Linked Property Node&#xff09;&#xff1a;通過右鍵單擊控件&#xff08;或其控件終…

AI 邊緣計算網關十大品牌

引言 在物聯網與人工智能技術飛速發展的當下&#xff0c;數據量呈爆發式增長&#xff0c;對數據處理的實時性、準確性和安全性要求不斷提高。AI邊緣計算網關應運而生&#xff0c;它融合了人工智能、邊緣計算與物聯網技術&#xff0c;在靠近數據源或物理設備的網絡邊緣側&#…

基于深度學習的視頻目標跟蹤算法研究

標題:基于深度學習的視頻目標跟蹤算法研究 內容:1.摘要 隨著視頻數據的爆炸式增長&#xff0c;視頻目標跟蹤在智能監控、自動駕駛、人機交互等領域有著廣泛的應用需求。本文的目的是研究基于深度學習的視頻目標跟蹤算法&#xff0c;以提高跟蹤的準確性和實時性。方法上&#x…

C++代碼隨想錄刷題知識分享-----面試題鏈表相交

一、題目要求 題目&#xff1a;給定兩條單鏈表 headA、headB&#xff0c;找出它們相交的起始節點&#xff08;節點對象相同而非數值相等&#xff09;。若無交點返回 null。 限制&#xff1a;鏈表無環&#xff1b;函數返回后鏈表結構不能被破壞。 圖示兩個鏈表在節點 c1 開始相…

修改輸入框選擇框顏色

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 有時候需要改寫element原來輸入框/選擇框的顏色 問題描述 提示&#xff1a;這里描述項目中遇到的問題&#xff1a; 輸入框的話需要hover時邊框顏色修改&#xff0c;選擇值的時候邊框顏色修改以及選…

8.學習筆記-Maven進階(P82-P89)

&#xff08;一&#xff09;Maven-08-配置文件加載屬性 通過maven可以做版本的集中管理&#xff0c;所以能不能通過maven進行配置文件&#xff08;jdbc.properties&#xff09;的集中管理。 &#xff08;1&#xff09;resource-》jdbc.properties 可以識別$符號 因為只能…

基于Springboot+Mysql的漢服推廣網站(含LW+PPT+源碼+系統演示視頻+安裝說明)

系統功能 管理員功能&#xff1a;首頁、個人中心、漢服知識管理、服裝展示管理、服裝類別管理、用戶相冊管理、論壇交流、系統管理、訂單管理&#xff1b;用戶功能&#xff1a;首頁、個人中心、用戶相冊管理、論壇交流、我的收藏管理、訂單管理。 作者&#xff1a;計算機搬磚家…

Missashe考研日記-day30

Missashe考研日記-day30 0 寫在前面 日記也是寫到第30篇了哈哈&#xff0c;滿月了&#xff0c;雖然過了不止30天中間有斷更&#xff0c;但還是表揚一下自己堅持下來了。&#xff1a;&#xff09; 1 專業課408 學習時間&#xff1a;2h30min學習內容&#xff1a; 今天有其他事…