Micrometer与Prometheus在Spring中如何集成实现监控指标采集?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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.yml或application.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 本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报