Spring Boot + Prometheus:打造高效监控系统
引言
随着微服务架构的流行,服务的监控和管理变得尤为重要。Prometheus 作为一个开源的监控和告警工具,凭借其强大的数据采集、存储和查询能力,受到了开发者的广泛欢迎。
Spring Boot 是 Java 领域用于快速构建微服务的框架,将其与 Prometheus 集成可以实现对 Spring Boot 应用的实时监控。
本文将介绍如何使用 Prometheus 监控 Spring Boot 应用,并通过 Grafana 实现数据的可视化展示和自定义监控指标。
目录
- 引言
- Prometheus 简介
- Spring Boot Actuator
- 集成 Prometheus 和 Spring Boot
4.1 添加依赖
4.2 配置 Actuator
4.3 启动 Prometheus
4.4 配置 Prometheus
4.5 访问监控数据 - Grafana 可视化指标
5.1 安装 Grafana
5.2 配置数据源
5.3 创建仪表板 - 自定义监控指标
6.1 添加自定义指标
6.2 在 Grafana 中展示自定义指标
1 Prometheus 简介
Prometheus 是一个开源的系统监控和告警工具,它通过采集和存储指标(metrics)来帮助我们分析和理解应用的运行状态。Prometheus 的核心组件是 Prometheus Server,它负责从目标应用中采集数据,并提供强大的查询语言(PromQL)以便进行数据分析。
2 Spring Boot Actuator
Spring Boot Actuator 是 Spring Boot 提供的一系列用于监控和管理应用的工具。它可以通过多个端点(如 /health
、/info
和 /metrics
)公开应用的健康状态、配置信息和性能指标。
3 集成 Prometheus 和 Spring Boot
要将 Prometheus 集成到 Spring Boot 应用中,按照以下步骤进行操作。
3.1 添加依赖
在 pom.xml
文件中添加 Spring Boot Actuator 和 Micrometer Prometheus Registry 的依赖:
-
Actuator 提供了一系列内置端点,用于显示运行应用的性能信息,如健康状况、指标等。
-
Micrometer Prometheus registry 会将这些指标格式化为 Prometheus 可读格式。
<dependencies>
<!-- Spring Boot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micrometer Prometheus Registry -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
3.2 配置 Actuator
在 application.yml
文件中配置 Actuator 以暴露 Prometheus 的指标端点:
management:
endpoints:
web:
exposure:
include: '*'
metrics:
export:
prometheus:
enabled: true
server:
port: 10001 # 选择安全端口,避免默认端口
额外配置选项:
management.endpoints.web.base-path: "/status" # 自定义 Actuator 路径
management.endpoints.server.request.metric-name: "application:request" # 自定义指标名称
management.endpoints.web.exposure.include=* # 暴露所有端点
management.metrics.export.prometheus.enabled=true #启用Prometheus导出器
3.3 启动 Prometheus
使用 Docker 启动 Prometheus:
docker pull prom/prometheus
docker run --name prometheus -d -p 9090:9090 prom/prometheus
如果需要自定义配置,可以将本地 prometheus.yml
文件挂载到容器中:
docker run -d --name prometheus -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
然后通过浏览器访问 Prometheus:http://localhost:9090
3.4 配置 Prometheus
在 prometheus.yml
中添加 Spring Boot 应用作为 Prometheus 的目标(target):
scrape_configs:
- job_name: 'spring-boot-application'
metrics_path: '/status/prometheus'
scrape_interval: 15s
static_configs:
- targets: ['192.168.10.108:8091']
其中,metrics_path
指定了 Spring Boot 应用的 Prometheus 指标路径,scrape_interval
定义了 Prometheus 抓取数据的时间间隔。
3.5 访问监控数据
当 Spring Boot 应用启动后,Prometheus 会定期从 /status/prometheus
端点抓取指标数据。可以在 Prometheus 控制台中使用 PromQL 查询应用的监控数据。
4 Grafana 可视化指标
尽管 Prometheus 自带了基础的数据查询和展示功能,但通常我们会使用 Grafana 来实现更丰富的数据可视化。
4.1 安装 Grafana
使用 Docker 安装并运行 Grafana:
docker pull grafana/grafana
docker run -d --name=grafana -p 3000:3000 grafana/grafana
通过浏览器访问 Grafana:http://localhost:3000
,默认用户名和密码均为 admin
。
4.2 配置数据源
在 Grafana 中配置 Prometheus 作为数据源:
- 在 Grafana 左侧菜单中,选择 “Configuration” -> “Data Sources”。
- 点击 “Add Data Source”,选择 Prometheus。
- 输入 Prometheus 的 URL,例如
http://localhost:9090
。
4.3 创建仪表板
-
点击左侧菜单中的 “Dashboards”,选择 "New Dashboard"。
-
在仪表板中添加新面板,并选择 Prometheus 数据源。
-
使用 PromQL 查询你想展示的监控数据,例如:
sum(rate(http_requests_total[5m]))
-
设置面板样式,保存仪表板。
5 自定义监控指标
除了 Spring Boot Actuator 提供的内置监控指标,我们还可以通过 Micrometer 添加自定义监控指标,以追踪特定的业务逻辑或性能瓶颈。
5.1 添加自定义指标
在 Spring Boot 应用中,可以使用 Micrometer API 来定义自定义指标:
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustomMetricsController {
private final Counter ordersCounter;
public CustomMetricsController(MeterRegistry registry) {
this.ordersCounter = Counter.builder("orders_count")
.description("订单总数")
.register(registry);
}
@GetMapping("/order")
public String createOrder() {
ordersCounter.increment();
return "订单已创建";
通过将 Spring Boot 与 Prometheus 和 Grafana 集成,你可以实现对应用的高效监控、告警以及数据可视化,帮助你及时发现性能瓶颈并进行优化。
评论区