使用 Prometheus 监控 Spring Boot 应用

1、概览

在软件开发这个要求严苛的领域中,确保应用在在部署到生产环境后能够以最佳性能和可靠性运行是至关重要的。

本文将带你了解如何在 Spring Boot 应该中整合 Prometheus,以及如何通过基本配置和复杂配置丰富我们的监控策略。

2、Prometheus 是什么?

Prometheus 是一个开源项目,旨在深入挖掘我们的应用程序数据,通过创建过滤层来收集和分析从最简单到最复杂的所有内容。它不仅仅关乎数字和图表,而且通过其高级查询语言和时间序列数据能力,帮助我们理解应用程序的运行状况。

集成 Prometheus 使我们能够在问题发生之前就发现问题,对系统进行微调,确保应用程序以最佳性能运行,最终为用户带来更好的体验 - 方便、快捷、可靠。

3、开始在 Spring Boot 中使用 Prometheus

将 Prometheus 与 Spring Boot 应用程序整合后,就能以 Prometheus 可以理解和抓取的格式公开应用指标,从而有效地进行监控。这一过程包括两个主要步骤:向项目添加必要的依赖项,以及配置应用以公开指标。

3.1、添加依赖

首先,将 Spring Boot ActuatorMicrometer Prometheus Registry 添加到项目的依赖中。Actuator 提供了一系列内置端点,用于显示运行应用的性能信息,如健康状况、指标等。Micrometer Prometheus registry 会将这些指标格式化为 Prometheus 可读格式。

将依赖添加到 Maven 项目的 pom.xml 文件中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

如果使用的是 Gradle,则应在 build.gradle 文件中添加如下内容:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'

3.2、配置应用

添加依赖后,下一步就是配置 Spring Boot 应用,使其暴露 Prometheus 指标端点。这需要更新项目中的 application.propertiesapplication.yml 文件。

application.properties 的配置如下:

management.endpoints.web.exposure.include=*
management.endpoint.health.show.details=always

这个配置确保 Actuator 暴露 /actuator/prometheus 端点,该端点以 Prometheus 可以抓取的格式提供了丰富的应用指标。

需要注意的是,公开所有 的Actuator 端点(management.endpoints.web.exposure.include=*)在开发过程中可以提供有用的洞察力,但可能会暴露敏感的运行数据。对于生产环境,最佳实践是根据监控和运营需求慎重地选择要公开的端点。

通过上述这些步骤,我们的 Spring Boot 应用现在将公开有价值的指标,供 Prometheus 收集和存储。这个基础设置对于我们监控策略的下一阶段非常关键,包括使用 Prometheus 抓取这些指标,并使用 Grafana 等工具进行可视化展示。

4、设置 Prometheus 以抓取指标

现在,应用已暴露指标,下一步就是设置 Prometheus 以收集这些指标。这部分过程要求我们下载和配置 Prometheus,并针对我们的 Spring Boot 应用调整 prometheus.yml 配置文件。

4.1、安装

安装 Prometheus 非常简单。

Windows 系统

  1. 从 Prometheus 官方网站下载最新的 Prometheus 版本,选择 Windows 版。
  2. 将下载的 .zip 文件解压到所需位置,该位置将作为 Prometheus 的 Home 目录。
  3. 打开命令提示符,导航到 Prometheus 目录,然后执行 prometheus.exe,运行 Prometheus。此操作将启动 Prometheus 服务器。

Linux/Mac 系统

  1. Prometheus 下载页面 下载 Linux 或 Mac 的最新版本。
  2. 使用 tar xvfz prometheus-*.tar.gz. 命令解压压缩包
  3. 导航到解压缩目录,其为 Prometheus 的 Home 目录
  4. 在终端执行 ./prometheus 命令启动 Prometheus,从而启动 Prometheus 服务器。

Docker

选择使用 Docker 部署 Prometheus 可以简化设置过程,无论操作系统如何,都能提供一致且简化的安装方法。

  1. 拉取 Prometheus 镜像:首先,从 Docker Hub 拉取官方的 Prometheus 镜像,以确保使用最新版本:

    docker pull prom/prometheus
    
  2. 运行 Prometheus 容器: 拉取镜像后,就可以启动 Prometheus 容器了。该命令会将 Prometheus 的默认端口(9090)转发到主机上的相同端口,从而通过 http://localhost:9090 访问 Prometheus Web UI:

    docker run --name prometheus -d -p 9090:9090 prom/prometheus
    

    对于需要自定义配置的部署,可以将主机上的自定义 prometheus.yml 文件挂载到容器中:

    docker run --name prometheus -d -p 9090:9090 -v /our/path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
    

    用配置文件的实际路径替换 /our/path/to/prometheus.yml

  3. 访问 Prometheus Web 界面:当 Prometheus 在 Docker 容器中运行时,可以通过 http://localhost:9090 访问UI界面。这个界面对于执行查询、查看收集的指标以及验证抓取目标的状态非常重要。

4.2、配置 Prometheus 以抓取指标

安装完成后,需要配置 Prometheus,以从 Spring Boot 应用中抓取指标。这需要编辑位于 Prometheus Home 目录中的 prometheus.yml

将 Spring Boot 应用作为目标添加到 scrape_configs 部分:

scrape_configs:
  - job_name: 'spring-boot-application'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s # 可根据需要进行调整
    static_configs:
      - targets: ['localhost:8080']

如上,localhost:8080 应替换为 Spring Boot 应用相应的主机和端口。scrape_interval 指定 Prometheus 从应用中抓取指标的频率。

4.3、用 Grafana 可视化指标

Prometheus 擅长收集和存储指标,而 Grafana 则是首选工具,可通过富有洞察力的仪表盘将这些指标可视化。

将 Grafana 与 Prometheus 整合

  1. 访问 Grafana 官方下载页面 安装 Grafana。
  2. 启动 Grafana ,并在浏览器上打开 http://localhost:3000 访问其 Web 界面。
  3. 在 Grafana 的用户界面中导航到 “Configuration” > “Data Sources” > “Add data source”,将 Prometheus 添加为数据源。选择 Prometheus 作为类型,并指定运行 Prometheus 的 URL,通常是 http://localhost:9090
  4. 保存并测试,确认 Grafana 可以成功连接到 Prometheus。

在 Grafana 中创建仪表盘

  1. 点击左侧边栏的图标,选择 “Dashboard”,创建一个新的仪表盘。
  2. 在仪表盘中添加一个全新的面板。在这里,选择要显示的指标,决定可视化类型(图表、仪表、表格等),并自定义面板的外观。
  3. 选择 Prometheus 记录源,并使用 Prometheus 查询语言 (PromQL) 选择希望可视化的指标。例如,要显示 HTTP 请求的消耗,可以使用 price(http_requests_total[5m]) 这样的查询。
  4. 保存面板和仪表盘。可以创建尽可能多的面板,以可视化 Spring Boot 应用中的特殊指标。

按照上述这些步骤,就能设置 Prometheus 从 Spring Boot 应用中抓取指标,并利用 Grafana 将其可视化。通过这一设置,我们可以深入了解应用的健康状况和整体性能。

5、高级配置和最佳实践

本节涉及高级配置,可以增强 Spring Boot 应用的可观察性和安全性。主要讲解如何在 Prometheus 中设置警报规则以及在 Spring Boot 中使用 Micrometer 创建自定义指标。

遵循这些最佳实践可确保我们的应用保持稳健、安全和高可用性。

5.1、在 Spring Boot 中自定义指标

Spring Boot 与 Micrometer 的集成提供了一种无缝方法,可将自定义指标添加到应用中,使我们能够监控特定于应用的行为和操作。

下面介绍如何创建和注册自定义指标:

@Component
public class CustomMetricsService {

    private final Counter customMetricCounter;

    public CustomMetricsService(MeterRegistry meterRegistry) {
        customMetricCounter = Counter.builder("custom_metric_name")
          .description("Description of custom metric")
          .tags("environment", "development")
          .register(meterRegistry);
    }

    public void incrementCustomMetric() {
        customMetricCounter.increment();
    }
}

如上例,定义了一个名为 custom_metric_name 的自定义 counter 度量。该 counter 可以递增,以跟踪应用中的特定事件,如用户注册或登录尝试。

通过注入的 MeterRegistry 注册了自定义指标,使其可以被 Prometheus 抓取。

5.2、监控和警报的最佳实践

以下是这方面的一些最佳做法:

  • 在 Prometheus 中设置警报规则:根据应用特定的指标和阈值定义警报规则。这种积极主动的方法有助于在影响用户之前发现并解决问题。
  • 监控关键业务事务:除系统健康状况外,还要跟踪代表关键业务功能的指标,如订单完成或付款事务。
  • 安全访问指标:确保指标端点受到保护,防止未经授权的访问。根据需要利用 Spring Security 配置访问控制。
  • 定期检查指标和警报:定期审查已配置的指标和警报,确保它们始终与操作和业务需求相关。随着应用的发展,调整阈值和指标。

通过实施这些高级配置并遵循最佳实践,我们可以实现强大的监控和警报设置,不仅能保护我们的应用,还能深入了解其性能和使用模式。

6、总结

本文介绍了如何在 Spring Boot 应用中整合 Prometheus 来监控应用,并利用 Grafana 根据指标生成图表,以提高软件的可观察性。


Ref:https://www.baeldung.com/spring-boot-prometheus