在 Spring Boot 应用中,监控 JVM 状态(如内存使用情况、GC、线程等)对于系统的稳定运行至关重要。本文介绍如何使用 Spring Boot Actuator 和 promethus 和 grafana 来监控 JVM 状态。

版本

工具 版本
系统 windows10
java 21
Spring Boot 3.2.2
prometheus 2.53.3
grafana 11.5.0
jmeter 5.5

1. 引入 Spring Boot Actuator

Spring Boot 提供了 Actuator 组件,它可以帮助我们快速获取 JVM 运行状态。

1.1 添加依赖

pom.xml 中添加 Actuator 依赖:

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

1.2 配置 Actuator 端点

application.yml 配置文件中启用 Actuator 端点:

spring:
  application:
    name: SIMPLE-APP

server:
  port: 8080

# 暴露所有 Actuator 端点
management:
  endpoints:
    enabled-by-default: true
    web:
      exposure:
        # 暴露 Prometheus 端点
        include: '*'
#        exclude:
      server:
        request:
          metric-name: http.server.requests
  # 对外暴露tag
  metrics:
    tags:
      application: ${spring.application.name}

1.3 访问 JVM 相关信息

Spring Boot Actuator 提供了多个端点来获取 JVM 相关信息:

  • http://localhost:8080/actuator/metrics/jvm.memory.used - 查看 JVM 内存使用情况。
  • http://localhost:8080/actuator/metrics/system.cpu.usage - 查看 CPU 使用率。
  • http://localhost:8080/actuator/threaddump - 获取线程堆栈信息。
  • http://localhost:8080/actuator/heapdump - 下载 JVM 堆内存快照。
  • http://localhost:8080/actuator/prometheus - 查看prometheus指标。

2. 配置 Prometheus 和 Grafana 监控 JVM

如果需要更详细的监控,可结合 Prometheus 和 Grafana。

2.1 添加 Micrometer Prometheus 依赖

        <!-- Micrometer Prometheus Registry -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

3.2 配置 Prometheus 端点

1.2步骤中已配置完毕。

3.3 访问 Prometheus 监控数据

访问 http://localhost:8080/actuator/prometheus 获取 JVM 监控数据。

3.4 配置Prometheus服务,监控web应用

打开prometheus根目录下的prometheus.yml文件,找到scrape_configs节点,修改为如下:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    metrics_path: '/actuator/prometheus'  # 从 Spring Boot Actuator 的 Prometheus 端点采集数据
    static_configs:
      - targets: ['localhost:8080']  # 替换为服务 IP 和端口

然后执行prometheus.exe --config.file=prometheus.yml启动promethus。

访问地址是http://localhost:9090/

3.5 启动 Grafana

双击bin/grafana-server.exe启动grafana。

访问地址是http://localhost:3000/,默认用户名/密码是admin/admin。

3.6 配置 Grafana 监控面板

  1. 添加数据源
  • 在 Grafana 中依次点击如下:左上角logo - Connections,搜索promethus并点击“Add new data source”,地址填http://localhost:9090
  1. 导入一个看板,模板id填4701
  2. 查看看板图表

上述步骤已录制成视频,见grafana中配置prometheus数据源和jvm看板(无声音)_哔哩哔哩_bilibili

4. 结论

本文介绍了如何使用 Spring Boot Actuator 以及 Prometheus + Grafana 监控 JVM 状态。结合这些工具,可以有效跟踪和优化应用的性能,排查出现的问题,提升系统的稳定性。

5. 附件

代码已上传到github:valuetodays/java-code-samples的springboot-simple-for-jvm目录。