Seal^_^ 2025-11-30 22:37 采纳率: 91.2%
浏览 4
已结题

如何使用Micrometer收集Java应用指标?与Prometheus和Grafana的集成方式是什么?

如何使用Micrometer收集Java应用指标?与Prometheus和Grafana的集成方式是什么?

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-11-30 22:42
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    使用 Micrometer 收集 Java 应用的指标,并将其与 PrometheusGrafana 集成,是一个常见的监控方案。下面我将详细说明整个过程,并提供关键步骤和示例代码。


    一、Micrometer 简介

    Micrometer 是一个用于在 Java 应用中收集度量数据的库,支持多种监控系统(如 Prometheus、Graphite、InfluxDB 等)。它提供了统一的 API 来创建指标,而无需关心底层存储系统。


    二、集成 Micrometer 到 Java 应用

    1. 添加依赖

    pom.xml 中添加 Micrometer 的依赖:

    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-core</artifactId>
        <version>1.10.0</version> <!-- 使用最新版本 -->
    </dependency>
    
    <!-- 如果你使用 Spring Boot -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-spring-boot-starter</artifactId>
        <version>1.10.0</version>
    </dependency>
    

    2. 初始化 MeterRegistry

    在你的应用中初始化 MeterRegistry,通常使用 SimpleMeterRegistryPrometheusMeterRegistry

    import io.micrometer.core.instrument.MeterRegistry;
    import io.micrometer.prometheus.PrometheusConfig;
    import io.micrometer.prometheus.PrometheusMeterRegistry;
    
    public class MetricsCollector {
        public static final MeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
    }
    

    3. 创建并记录指标

    例如,记录一个计数器(Counter):

    import io.micrometer.core.instrument.Counter;
    import io.micrometer.core.instrument.MeterRegistry;
    
    public class MyService {
    
        private final Counter requestCounter;
    
        public MyService(MeterRegistry registry) {
            this.requestCounter = Counter.builder("requests_total", "Total number of requests")
                    .description("Total number of HTTP requests")
                    .register(registry);
        }
    
        public void handleRequest() {
            requestCounter.increment();
            // 处理请求逻辑...
        }
    }
    

    三、与 Prometheus 集成

    Prometheus 是一个开源的监控系统,能够从 /actuator/metrics 端点拉取数据。

    1. 添加 Prometheus 依赖(Spring Boot)

    如果你使用 Spring Boot,可以添加以下依赖:

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

    2. 启用 Actuator 端点

    application.properties 中启用 Prometheus 端点:

    management.endpoints.web.exposure.include=*
    management.endpoints.web.base-path=/actuator
    

    3. 访问指标端点

    启动应用后,访问以下 URL 获取指标:

    http://localhost:8080/actuator/metrics
    

    或者直接访问 Prometheus 格式的端点:

    http://localhost:8080/actuator/prometheus
    

    四、与 Grafana 集成

    Grafana 是一个可视化工具,支持从 Prometheus 数据源展示监控数据。

    1. 安装并配置 Prometheus

    • 下载并安装 Prometheus
    • 修改 prometheus.yml 配置文件,添加你的应用目标:
    scrape_configs:
      - job_name: 'my-app'
        static_configs:
          - targets: ['localhost:8080']
        metrics_path: /actuator/prometheus
    

    2. 启动 Prometheus

    运行 Prometheus 服务,确保它能成功抓取你的应用指标。

    3. 安装并配置 Grafana

    • 下载并安装 Grafana
    • 在 Grafana 中添加 Prometheus 数据源:
      • URL: http://localhost:9090
      • 其他默认设置即可

    4. 创建仪表盘(Dashboard)

    在 Grafana 中创建一个新的 Dashboard,并选择 Prometheus 数据源,然后通过查询语句(如 http_requests_total)来展示你的指标。


    五、完整流程总结

    1. 添加依赖
    2. 初始化 MeterRegistry 并创建指标
    3. 配置 Actuator 和 Prometheus 支持
    4. 启动 Prometheus 抓取指标
    5. 在 Grafana 中展示指标


    六、修改后的代码示例(Spring Boot)

    pom.xml 示例(部分):

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

    application.properties 示例:

    management.endpoints.web.exposure.include=*
    management.endpoints.web.base-path=/actuator
    

    Java 示例类(带有指标):

    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import io.micrometer.core.instrument.Counter;
    import io.micrometer.core.instrument.MeterRegistry;
    
    @RestController
    public class MyController {
    
        private final Counter requestCounter;
    
        public MyController(MeterRegistry registry) {
            this.requestCounter = Counter.builder("requests_total", "Total number of requests")
                    .description("Total number of HTTP requests")
                    .register(registry);
        }
    
        @GetMapping("/hello")
        public String sayHello() {
            requestCounter.increment();
            return "Hello, World!";
        }
    }
    

    七、重点总结

    1. Micrometer 是 Java 应用中收集指标的核心工具
    2. Prometheus 负责抓取和存储指标数据
    3. Grafana 提供可视化界面展示这些指标
    4. 整体架构清晰,适合构建现代监控体系


    如有需要,我可以提供完整的项目结构或更复杂的指标示例。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 11月30日