普通网友 2025-08-17 03:35 采纳率: 98.5%
浏览 0
已采纳

Micrometer与Prometheus在Spring中如何集成实现监控指标采集?

**问题:** 在Spring Boot应用中,如何正确集成Micrometer与Prometheus,以实现监控指标的采集与暴露?具体需要添加哪些依赖、配置哪些端点,以及如何与Prometheus服务器集成?
  • 写回答

1条回答 默认 最新

  • 蔡恩泽 2025-08-17 03:35
    关注

    1. 引入背景与基本概念

    在现代微服务架构中,监控是保障系统稳定性和可维护性的关键环节。Spring Boot 提供了对 Micrometer 的集成支持,而 Micrometer 是一个用于收集指标数据的度量库,能够与 Prometheus 等多种监控系统集成。

    Prometheus 是一个开源的监控和告警系统,支持拉取(pull)模式获取监控指标。Micrometer 提供了 Prometheus 格式的指标输出,使得 Spring Boot 应用可以轻松暴露指标供 Prometheus 抓取。

    2. 添加依赖

    在 Spring Boot 项目中集成 Micrometer 和 Prometheus,首先需要在 pom.xml 中添加相关依赖:

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

    3. 配置 Actuator 端点

    Spring Boot Actuator 提供了多个监控端点,其中 Prometheus 的指标通过 /actuator/prometheus 暴露。

    application.ymlapplication.properties 中启用 Prometheus 端点:

    
            management:
              endpoints:
                web:
                  exposure:
                    include: prometheus,health,info
              metrics:
                tags:
                  application: ${spring.application.name}
        

    上述配置启用了 Prometheus 端点,并为指标添加了应用名称的标签。

    4. 验证指标输出

    启动应用后,访问 http://localhost:8080/actuator/prometheus,可以查看到类似如下的指标输出:

    
            # HELP jvm_memory_used_bytes_used Heap memory used in bytes
            # TYPE jvm_memory_used_bytes_used gauge
            jvm_memory_used_bytes_used{application="my-spring-boot-app",} 1.23456789E9
            # HELP system_cpu_usage The "recent cpu usage" of the system
            # TYPE system_cpu_usage gauge
            system_cpu_usage 0.15
        

    这些指标可以直接被 Prometheus 抓取。

    5. 配置 Prometheus 抓取目标

    在 Prometheus 的配置文件 prometheus.yml 中添加 Spring Boot 应用作为抓取目标:

    
            scrape_configs:
              - job_name: 'spring-boot-app'
                metrics_path: '/actuator/prometheus'
                static_configs:
                  - targets: ['localhost:8080']
        

    重启 Prometheus 后,访问 Prometheus 的 Web UI(默认 http://localhost:9090),输入指标名称如 jvm_memory_used_bytes_used,即可看到采集到的数据。

    6. 自定义指标示例

    Micrometer 支持自定义指标。例如,记录某个业务逻辑的调用次数:

    
            @Service
            public class MyService {
    
                private final Counter myCounter;
    
                public MyService(MeterRegistry registry) {
                    this.myCounter = Counter.builder("my.custom.metric")
                                            .description("A custom counter for business logic")
                                            .tags("type", "example")
                                            .register(registry);
                }
    
                public void doSomething() {
                    myCounter.increment();
                    // 业务逻辑
                }
            }
        

    访问 Prometheus 端点时,可以看到新增的指标:my_custom_metric_count

    7. 集成流程图

    以下是 Spring Boot 集成 Micrometer 与 Prometheus 的整体流程图:

                graph TD
                    A[Spring Boot Application] --> B[Add Micrometer & Prometheus Dependencies]
                    B --> C[Enable Prometheus Endpoint in application.yml]
                    C --> D[Expose /actuator/prometheus Endpoint]
                    D --> E[Prometheus Server Scrapes Metrics]
                    E --> F[Store and Visualize Metrics]
            

    8. 常见问题与解决方案

    问题可能原因解决方法
    无法访问 /actuator/prometheus未正确配置 management.endpoints.web.exposure.include确保 prometheus 端点已启用
    Prometheus 未采集到指标抓取配置错误或应用未启动检查 Prometheus 的 targets 配置及应用状态
    自定义指标未显示未正确注册 MeterRegistry 或未调用 increment()检查自定义指标注册逻辑和调用路径
    指标标签缺失未配置全局标签或未在指标中指定使用 MeterRegistry 添加全局标签或在指标中指定 tags
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 8月17日