当前位置: 首页 > article >正文

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

全文目录:

    • 开篇语
    • 📜 前言
    • 🌟 摘要
    • 📝 简介
    • 📚 概述
      • 🛠️ 技术栈
    • 🔍 核心源码解读
      • 1. 📦 Spring Boot 配置
      • 2. 🔧 application.properties 配置
      • 3. 🚀 控制器示例代码
    • 🛠️ 案例分析
    • 💻 应用场景演示
    • 🔄 优缺点分析
      • 优点
      • 缺点
    • 📋 类代码方法介绍及演示
    • 🧪 测试用例(main 函数写法)
    • 📈 测试结果预期
    • 🔍 测试代码分析
    • 🔚 小结
    • 🎉 总结
    • 🌟 寄语
    • 文末

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区: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 !!!


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

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

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


http://www.kler.cn/news/367755.html

相关文章:

  • Java中的设计模式:单例模式详解
  • 【C++】—— 模板进阶
  • 量子机器学习:颠覆性的前沿技术
  • 100种算法【Python版】第14篇——Pollard‘s Rho 质因数分解算法
  • 【AI换装整合及教程】CatVTON:时尚与科技的完美融合
  • ubuntu22.04安装qemu-9.1并在i.MX6上运行linux kernel 6.11
  • Z-BlogPHP显示错误Undefined array key 0 (set_error_handler)的解决办法
  • 【Chapter 2】因果推断中的随机实验与统计学复习
  • 基于flask+vue框架的的法律咨询信息系统的设计与实现5m1le(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 隨筆 Kafka 拦截器概述
  • 如何选择适合的有序集合数据结构?
  • 瑞吉外卖之com.fasterxml.jackson.dataformat.cbor.CBORFactor相关报错
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21
  • 基于Kratos+ent+postgreSQL构建简单的CRUDapi
  • 嵌入式软开项目——电子手环开发——学习引导和资料网址
  • 基于R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析
  • linux运维100讲练习:第7集
  • 【~/.bashrc】linux系统添加环境变量
  • Linux练习_2账户管理
  • IPV6扩展头部
  • Verilog:参数(parameter)的使用
  • 嵌入式——STM32外设应用
  • 抖音列表页采集-爬虫部分(2)
  • B/S架构的诊所药店云his管理系统源码,云门诊管理系统,自主知识产权,支持二次开发
  • iOS Swift逆向——deMangle过程中的偏移计算
  • 算法|牛客网华为机试10-20C++