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.mzph.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; 今天有其他事…