目 录CONTENT

文章目录

Spring Boot + Prometheus:打造高效监控系统

在等晚風吹
2024-10-12 / 0 评论 / 0 点赞 / 21 阅读 / 0 字 / 正在检测是否收录...

Spring Boot + Prometheus:打造高效监控系统

引言

随着微服务架构的流行,服务的监控和管理变得尤为重要。Prometheus 作为一个开源的监控和告警工具,凭借其强大的数据采集、存储和查询能力,受到了开发者的广泛欢迎。

Spring Boot 是 Java 领域用于快速构建微服务的框架,将其与 Prometheus 集成可以实现对 Spring Boot 应用的实时监控。

本文将介绍如何使用 Prometheus 监控 Spring Boot 应用,并通过 Grafana 实现数据的可视化展示和自定义监控指标。

目录

  1. 引言
  2. Prometheus 简介
  3. Spring Boot Actuator
  4. 集成 Prometheus 和 Spring Boot
    4.1 添加依赖
    4.2 配置 Actuator
    4.3 启动 Prometheus
    4.4 配置 Prometheus
    4.5 访问监控数据
  5. Grafana 可视化指标
    5.1 安装 Grafana
    5.2 配置数据源
    5.3 创建仪表板
  6. 自定义监控指标
    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

Prometheus1.png

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

Prometheus2.png

4.2 配置数据源

在 Grafana 中配置 Prometheus 作为数据源:

  1. 在 Grafana 左侧菜单中,选择 “Configuration” -> “Data Sources”。
  2. 点击 “Add Data Source”,选择 Prometheus。
  3. 输入 Prometheus 的 URL,例如 http://localhost:9090

Prometheus3.png

4.3 创建仪表板

  1. 点击左侧菜单中的 “Dashboards”,选择 "New Dashboard"。

  2. 在仪表板中添加新面板,并选择 Prometheus 数据源。

  3. 使用 PromQL 查询你想展示的监控数据,例如:

    sum(rate(http_requests_total[5m]))
    
  4. 设置面板样式,保存仪表板。

Prometheus4.png

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 集成,你可以实现对应用的高效监控、告警以及数据可视化,帮助你及时发现性能瓶颈并进行优化。

0

评论区