1. 简介
Spring Boot 的一大亮点就是内置了强大的 Actuator 模块。这些 Actuator 提供了一套简单直接的方式,用于监控和管理应用的几乎所有运行时状态。
本文将聚焦于使用 Metrics Actuator,搭建一套完全自托管的 Spring Boot 应用监控系统。
核心思路是:把应用产生的监控指标(metrics)持久化到外部存储,并通过可视化工具展示,避免指标随应用重启而丢失。
2. 指标数据库选型
构建自托管监控的第一步,是选择一个独立于应用进程的指标数据库。
Spring Boot 默认集成了 Micrometer,并使用内存作为指标注册中心。这意味着它能自动收集内存、CPU、HTTP 请求等基础指标,但⚠️这些数据仅存在于内存中,一旦应用重启就全部清零。
要实现持久化监控,我们必须引入一个外部的时序数据库。Spring Boot 通过 Micrometer 支持多种主流选项,以下介绍三种常见的自托管方案。
✅ 提示:只要在项目 classpath 中引入了特定数据库的 Micrometer 依赖,Spring Boot 就会自动禁用内存注册中心,转而使用你指定的外部存储。
2.1. InfluxDB
InfluxDB 是一个开源的时序数据库,非常适合存储监控指标这类时间序列数据。
最简单的启动方式是使用 Docker:
docker run -p 8086:8086 -v /tmp:/var/lib/influxdb influxdb
⚠️ 注意:此命令将数据存储在宿主机的
/tmp
目录下,仅适合开发测试。生产环境务必挂载持久化卷。
启动 InfluxDB 后,只需两步即可让 Spring Boot 接入:
- 引入依赖:添加
micrometer-registry-influx
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-influx</artifactId>
</dependency>
- 配置连接:在
application.properties
中指定 InfluxDB 地址
management.metrics.export.influx.uri=http://localhost:8086
默认情况下,数据库名为 mydb
,用户名和密码为空。生产环境建议显式配置:
management.metrics.export.influx.db=myapp_metrics
management.metrics.export.influx.user-name=admin
management.metrics.export.influx.password=securePass123!
⚠️ InfluxDB 本身不提供强大的可视化界面,但它有配套的 Chronograf 工具,专用于数据展示。
2.2. Prometheus
Prometheus 是 SoundCloud 开源的监控告警系统,其工作模式与 InfluxDB 不同:它采用主动“拉取”(scrape)的方式收集指标,而不是由应用主动推送。
接入步骤如下:
- 暴露指标接口:引入
micrometer-registry-prometheus
依赖
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
该依赖会自动创建一个 /actuator/prometheus
接口,以 Prometheus 能识别的格式输出所有指标。
- 配置 Prometheus 服务:编写
prometheus.yml
配置文件,告诉 Prometheus 去哪里拉取数据。
scrape_configs:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['192.168.1.100:8080'] # 替换为你的应用实际IP和端口
- 启动 Prometheus:使用 Docker 运行
docker run -d \
--name=prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml
启动后,访问 http://localhost:9090/
即可使用 Prometheus 内置的查询和图表功能。
2.3. Graphite
Graphite 是另一个老牌的开源时序数据库和监控工具。
使用 Docker 快速启动一个包含 StatsD 的 Graphite 实例:
docker run -d \
--name graphite \
--restart=always \
-p 80:80 \
-p 2003-2004:2003-2004 \
-p 2023-2024:2023-2024 \
-p 8125:8125/udp \
-p 8126:8126 \
graphiteapp/graphite-statsd
Spring Boot 接入配置:
- 添加依赖
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-graphite</artifactId>
</dependency>
- 配置主机和端口
management.metrics.export.graphite.host=127.0.0.1
management.metrics.export.graphite.port=2004
Graphite 自带一个 Web 界面,可通过 http://localhost/
访问进行数据查看。
3. 可视化工具
虽然 InfluxDB、Prometheus、Graphite 都自带可视化功能,但它们的配置灵活性和美观度通常不如专业的 BI 工具。
3.1. Grafana
Grafana 是目前最流行的开源监控和数据分析平台。
它的强大之处在于:
✅ 统一数据源:能无缝对接 InfluxDB、Prometheus、Graphite 等几乎所有主流时序数据库。
✅ 强大的可视化:提供丰富的图表类型(折线图、柱状图、热力图、仪表盘等)和灵活的布局。
✅ 开箱即用的仪表盘:社区有大量高质量的预设仪表盘模板,可一键导入。
✅ 告警系统:支持基于指标设置复杂的告警规则,并集成邮件、钉钉、Slack 等通知渠道。
使用 Docker 快速部署:
docker run -d -p 3000:3000 grafana/grafana
访问 http://localhost:3000/
,初始账号密码通常是 admin/admin
。
接下来的关键步骤是:
- 添加数据源:在 Grafana 中配置你的指标数据库(如 Prometheus 的
http://host.docker.internal:9090
)。 - 创建或导入仪表盘:可以新建,也可以从 Grafana 官方仪表盘库 搜索并导入适合 Spring Boot 应用的模板。
4. 总结
本文介绍了如何为 Spring Boot 应用搭建一套完整的自托管监控体系。
核心要点:
- 脱离内存存储:使用 InfluxDB、Prometheus 或 Graphite 将指标持久化。
- Micrometer 是关键:它是 Spring Boot 与各种监控后端之间的桥梁。
- Prometheus 模式更主流:其“拉取”模型在微服务架构中更易管理。
- Grafana 是首选可视化:功能强大,社区支持好,是打造专业监控大屏的不二之选。
这套方案简单粗暴,能快速落地,帮你彻底告别“应用健康状况全靠猜”的踩坑时代。