Bootstrap

快速搭建 Spring Boot 3 + Prometheus + Grafana 实现实时监控

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

📜 前言

在现代微服务架构中,服务监控和指标分析已成为维护和优化系统性能的关键需求。随着微服务数量的增加和系统复杂性的提高,开发人员需要一种可靠的方式来监控应用性能和资源使用情况。本文将从零开始讲解如何使用 Spring Boot 3、Prometheus 和 Grafana 来实现微服务的实时监控。

🌟 摘要

本文将引导您使用 Java 开发语言,通过搭建 Spring Boot 3 应用程序并整合 Prometheus 和 Grafana,实现从数据采集到数据可视化的一体化监控。我们会详细解析核心源码,并提供应用场景演示,分析其优缺点,帮助读者在实际项目中快速集成这一技术栈。

📝 简介

Spring Boot 3 引入了更强大的功能和新特性,Prometheus 和 Grafana 则是监控系统中广受欢迎的开源工具。Prometheus 负责从 Spring Boot 应用程序中采集监控数据,而 Grafana 负责展示 Prometheus 采集的数据,形成直观的图表。通过整合这三者,我们可以快速搭建一套实时、可靠的监控系统。

📚 概述

Spring Boot 3 应用程序生成的指标可以使用 Actuator 暴露到 /actuator/prometheus 端点,Prometheus 可以定期抓取数据并存储,Grafana 则通过 Prometheus 提供的接口访问并展示这些数据。

🛠️ 技术栈

  • Spring Boot 3:构建应用主服务
  • Prometheus:收集和存储应用监控数据
  • Grafana:可视化监控数据

🔍 核心源码解读

1. 📦 Spring Boot 配置

要让 Spring Boot 暴露 Prometheus 端点,我们需要添加 spring-boot-starter-actuator 依赖,并将端点配置为可访问状态。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

2. 🔧 application.properties 配置

application.properties 中添加配置,开启 Prometheus 支持:

management.endpoints.web.exposure.include=*
management.endpoint.prometheus.enabled=true

3. 🚀 控制器示例代码

创建一个简单的控制器类,模拟一些业务逻辑。这里我们实现一个简单的 RESTful 接口。

@RestController
public class MetricsController {

    private final AtomicInteger counter = new AtomicInteger();

    @GetMapping("/metrics")
    public String getMetrics() {
        counter.incrementAndGet();
        return "Metrics fetched successfully!";
    }
}

🛠️ 案例分析

假设该应用为一个电商平台的商品服务,在用户访问量高峰期时,可以通过 Prometheus + Grafana 实时监控访问量、请求时长等指标。这样一来,运维人员可以及时获知是否需要水平扩展以应对流量峰值。

💻 应用场景演示

  • 微服务架构中的各服务监控:每个服务部署相应的 Prometheus 和 Grafana 监控,实现实时数据采集和展示。
  • 大流量、高并发的业务监控:实时监控数据帮助排查请求响应慢等问题。
  • 系统健康和性能监控:可以监控内存、CPU 使用率等基础系统指标。

🔄 优缺点分析

优点

  • 快速集成:只需几步配置即可快速搭建,开发成本低。
  • 数据实时性高:Prometheus 实现快速的数据采集。
  • 可视化便捷:Grafana 提供多种数据展示形式。

缺点

  • 数据存储有时间限制:Prometheus 存储数据时间有限制。
  • 学习成本:需要理解 Prometheus 的抓取逻辑及 Grafana 配置。

📋 类代码方法介绍及演示

MetricsController 类中,getMetrics() 方法增加了一个计数器。可以通过 http://localhost:8080/actuator/prometheus 端点抓取此数据,从而在 Prometheus 和 Grafana 中展示。

public String getMetrics() {
    counter.incrementAndGet();  // 计数器自增
    return "Metrics fetched successfully!";
}

🧪 测试用例(main 函数写法)

public static void main(String[] args) {
    SpringApplication.run(MonitoringApplication.class, args);
    // 验证 /metrics 接口是否正常返回
    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForObject("http://localhost:8080/metrics", String.class);
    System.out.println(result);
}

📈 测试结果预期

  • /metrics 接口应返回 “Metrics fetched successfully!”。
  • /actuator/prometheus 应返回 Prometheus 格式的数据。

🔍 测试代码分析

main 函数中调用 /metrics,同时确认 /actuator/prometheus 端点数据是否被 Prometheus 抓取,最后在 Grafana 中展示。

🔚 小结

本文构建了一个 Spring Boot 3 项目,并整合了 Prometheus 和 Grafana 实现实时监控。通过示例代码和应用场景,展示了如何快速构建应用监控系统。希望该项目能帮助您在实际业务中有效实现系统监控。

🎉 总结

通过本项目,开发人员可以轻松搭建出完整的监控系统,不仅可以实时跟踪系统性能,还可以帮助团队快速定位问题。Spring Boot + Prometheus + Grafana 组合是一种值得推荐的监控方案。

🌟 寄语

希望通过本文,您能掌握这一实用的监控工具链,提升项目的可靠性和用户体验!

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

;