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

SpringBoot 项目集成 Prometheus 和 Grafana

下面是一个完整的 Spring Boot 项目示例,集成 Prometheus 和 Grafana 进行性能监控,包括:

  • Prometheus 作为监控数据收集工具
  • Micrometer 作为指标采集库
  • Grafana 作为可视化展示工具

步骤概览

  1. 引入依赖:在 pom.xml 中添加 Prometheus 和 Actuator 相关依赖。
  2. 配置 Spring Boot:启用 Actuator 并暴露 Prometheus 端点。
  3. 编写示例代码:使用 Micrometer 记录应用性能数据。
  4. 配置 Prometheus:拉取 Spring Boot 端点的数据。
  5. 配置 Grafana:可视化 Prometheus 数据。

1. 添加 Maven 依赖

pom.xml 文件中加入:

<dependencies>
    <!-- Spring Boot Actuator 监控 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!-- Micrometer Prometheus 监控支持 -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
</dependencies>

2. 配置 application.yml

server:
  port: 8080

management:
  endpoints:
    web:
      exposure:
        include: "prometheus, health, info, metrics"
  metrics:
    export:
      prometheus:
        enabled: true

此配置:

  • 允许 Actuator 通过 http://localhost:8080/actuator/prometheus 公开 Prometheus 监控数据。
  • 允许 /actuator/health/actuator/info 等端点。

3. 编写 Spring Boot 监控代码

创建 MonitorController.java,提供测试接口并记录自定义监控指标:

package com.example.monitoring.controller;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.Duration;
import java.util.Random;

@RestController
public class MonitorController {
    private final Counter requestCounter;
    private final Timer responseTimer;
    private final Random random = new Random();

    public MonitorController(MeterRegistry registry) {
        this.requestCounter = Counter.builder("api_requests_total")
                .description("Total API Requests")
                .register(registry);
        
        this.responseTimer = Timer.builder("api_response_time")
                .description("API Response Time")
                .register(registry);
    }

    @GetMapping("/hello")
    public String hello(@RequestParam(defaultValue = "World") String name) {
        requestCounter.increment(); // 记录请求数
        
        return responseTimer.record(() -> {  // 记录执行时间
            try {
                Thread.sleep(random.nextInt(500)); // 模拟延迟
            } catch (InterruptedException ignored) {}
            return "Hello, " + name;
        });
    }
}
  • api_requests_total:记录 /hello 接口的总访问量。
  • api_response_time:记录 /hello 的执行时间。

4. 启动 Prometheus

配置 prometheus.yml

prometheus.yml 添加:

global:
  scrape_interval: 5s # 每 5 秒抓取数据

scrape_configs:
  - job_name: 'spring-boot-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['host.docker.internal:8080']  # 或者改成 'localhost:8080' 取决于你的运行环境

然后运行 Prometheus:

./prometheus --config.file=prometheus.yml

访问 http://localhost:9090,进入 Prometheus 界面,查询 api_requests_total 指标。

5. 启动 Grafana

配置数据源

  1. 访问 http://localhost:3000/(默认账号 admin/admin)。
  2. 添加数据源,选择 Prometheus
  3. 设置 http://localhost:9090 作为数据源地址。
  4. 保存后,在 Explore 面板查询 api_requests_totalapi_response_time

总结

  1. Spring Boot 通过 Actuator 和 Micrometer 采集监控数据。
  2. Prometheus/actuator/prometheus 端点拉取数据。
  3. Grafana 通过 Prometheus 进行数据可视化。

这样,你就成功在 Spring Boot 项目中集成了 Prometheus 和 Grafana 进行性能监控! 🚀

相关文章:

  • 项目准备(flask+pyhon+MachineLearning)- 3
  • 计算机毕业设计SpringBoot+Vue.js线上辅导班系统(源码+文档+PPT+讲解)
  • 授权与认证之jwt(五)创建ShiroConfig类
  • 从头开始学SpringBoot—01入门基础配置
  • [3/11]C#性能优化-实现 IDisposable 接口-每个细节都有示例代码
  • CF 118A.String Task(Java实现)
  • Linux基础开发工具——vim(5)
  • NC2227_约瑟夫环
  • 代码随想录算法训练营第三十天 | 卡码网46.携带研究材料(二维解法)、卡码网46.携带研究材料(滚动数组)、LeetCode416.分割等和子集
  • Kubernetes Service服务发现dns之CoreDNS
  • 快速排序算法详解
  • 赛博算命之“八字排盘“的JAVA实现
  • 128陷阱
  • uniapp-原生android插件开发摘要
  • Android Studio安装与配置详解
  • 软件工程-软件测试
  • fortify安全扫描Access Control: Database问题解决
  • Java 8 到 Java 17 主要新特性
  • 高频 SQL 50 题(基础版)_1141. 查询近30天活跃用户数
  • 私有化部署大模型推理性能分析
  • 流散千年的金印归藏故里,实证晋代册封高句丽
  • 经济日报金观平:“适度宽松”基调稳市场稳预期
  • 越秀地产约41.49亿元出售北京海淀功德寺项目公司65%股权,此前已质押给华润置地
  • 菲律宾华人“钢铁大王”撕票案两主谋被捕,部分赎金已被提取
  • 萨洛宁、康托罗夫、长野健……7月夏季音乐节来很多大牌
  • 中国戏剧梅花奖终评结果公示,蓝天和朱洁静等15名演员入选