Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)

文章目录

  • [Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)](#Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer))
  • 环境准备
  • 示例结构
  • 启动和验证
  • [验证 Spring Boot 应用](#验证 Spring Boot 应用)
  • [Prometheus 抓取配置(静态方式)](#Prometheus 抓取配置(静态方式))
  • [Grafana 面板配置](#Grafana 面板配置)
  • 总结

Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)

在微服务架构中,监控是保障系统稳定运行的关键组成部分。本文将介绍如何通过 Spring Boot 的 actuator 和 micrometer 组件,将应用的运行指标暴露出来,并使用 Prometheus 定时采集这些指标数据。

环境准备

  • JDK:21
  • Spring Boot:3.2.5
  • 构建工具:Maven
  • 监控工具:Prometheus 2.53.4 安装参考
  • 面板工具:Grafana v9.1.2 安装参考

示例结构

bash 复制代码
test/
├── pom.xml                                           # Maven 项目对象模型文件
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── example
│       │           └── DemoMonitorApplication.java   # 主类(示例控制器)
│       └── resources
│           └── application.yml                       # 应用配置文件

pom.xml 文件内容如下:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!-- ✅ 加入 Spring Boot 官方 parent,自动管理版本号 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.5</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <groupId>com.example</groupId>
  <artifactId>demo-monitor</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <name>demo-monitor</name>

  <properties>
    <java.version>21</java.version>
  </properties>

  <dependencies>
    <!-- Web 服务 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Actuator 监控端点 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!-- Prometheus 指标导出 -->
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- Spring Boot 插件 -->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>
模块 用途
spring-boot-starter-web 提供 Web 支持
spring-boot-starter-actuator 暴露监控端点(如 /actuator/health)
micrometer-registry-prometheus 让 Prometheus 能采集指标
spring-boot-maven-plugin Maven 构建可执行 jar 的插件

src/main/java/com/example/DemoMonitorApplication.java 内容如下:

java 复制代码
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoMonitorApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoMonitorApplication.class, args);
    }
}

src/main/resources/application.yml 内容如下:

yaml 复制代码
server:
  port: 8080

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always
  metrics:
    export:
      prometheus:
        enabled: true

说明:

  • management.endpoints.web.exposure.include: 暴露的端点,必须包含 prometheus
  • management.metrics.export.prometheus.enabled: 启用 Prometheus 导出
  • 默认 Prometheus 指标路径为 /actuator/prometheus
  • 注意:上述依赖中未显式声明版本号,是因为使用了 Spring Boot 的官方 parent

启动和验证

使用 Maven 启动项目:

bash 复制代码
./mvnw spring-boot:run

或打包后运行:

bash 复制代码
mvn clean package
java -jar target/demo-monitor-1.0.0.jar

然后就可以看到有个 8080 端口启动了


验证 Spring Boot 应用

启动应用后,访问指标接口:

url 复制代码
http://localhost:8080/actuator/prometheus

你可以看到形如以下格式的指标输出:

Prometheus 抓取配置(静态方式)

Prometheus 配置示例(prometheus.yml):

yaml 复制代码
scrape_configs:
  - job_name: 'spring-boot-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['localhost:8080']

启动 Prometheus 后,访问 http://localhost:9090 ,你就可以查询该 Spring Boot 应用的各类指标了,如:

Grafana 面板配置

表盘市场导入仪表盘:访问地址

ID:14370

总结

  • 依赖配置简单 :通过引入 spring-boot-starter-actuator 和 micrometer-registry-prometheus,即可在 Spring Boot 中集成监控能力。
  • 指标暴露统一 :所有 JVM、应用及自定义指标统一暴露在 /actuator/prometheus 接口上。
  • Prometheus 易于集成 :通过 Prometheus 的 scrape_configs 采集配置,即可定时拉取指标数据。
  • 适用于单体与微服务架构:无论是本地部署还是容器化,Spring Boot + Prometheus 都是轻量而强大的监控方案。

若后续部署在 Kubernetes 集群中采集多实例指标。欢迎继续探讨 👇

相关推荐
程序猿DD34 分钟前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8263 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne6 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF6 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
省钱兄--zs6 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
upala7 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端
罗丹丹Luna7 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构