编程

使用 Prometheus 监控 Spring Boot 应用

448 2024-09-26 04:48:00

1. 概述

在要求苛刻的软件开发世界中,确保应用在部署到生产环境中后能够以最佳和可靠的方式运行不仅是可取的,而且是至关重要的。使用 Spring Boot,开发人员可以轻松设置独立的高级应用。然而,为了真正提高性能、可用性和可靠性,集成像 Prometheus 这样的复杂监控工具是关键。

本文旨在提供将 Prometheus 与 Spring Boot 应用连接的详细演练,通过基本和复杂的配置丰富我们的监控策略。

2. Prometheus 是什么?

Prometheus 是一个开源项目,旨在深入探究我们的应用数据,创建过滤层来收集和分析从最简单到最复杂的一切数据。不仅仅是数字和图表:它通过高级查询语言和时间序列数据功能来理解我们应用的心跳。

集成 Prometheus 使我们能够在问题发生之前识别问题,微调我们的系统,确保我们的应用以最佳性能运行,最终为用户带来更好的体验——方便、快速、可靠。

3. 开始在 Spring Boot 中使用 Prometheus

将 Prometheus 与 Spring Boot 应用集成,使我们能够以 Prometheus 可以理解和抓取的格式公开应用指标,从而有效地进行监控。这个过程包括两个主要步骤:向我们的项目添加必要的依赖关系,以及配置我们的应用以暴露指标。

3.1. 添加依赖

首先,我们将 Spring Boot Actuator 和 Micrometer Prometheus 注册表添加到项目的依赖项中。该执行器(Actuator)提供了一系列内置端点,用于显示有关正在运行的应用的性能信息,如健康状况、指标等。然后,Micrometer Prometheus 注册表将这些指标格式化为 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/prometheus 端点,以 Prometheus 可以抓取的格式提供丰富的应用指标。

值得注意的是,暴露所有执行器端点(management.endpoints.web.exposure.include=*)可以在开发过程中提供有用的见解,但可能会暴露敏感的操作数据。对于生产环境,我们最好根据监控和操作需求慎重选择要公开的端点。

通过执行这些步骤,Spring Boot 应用现在将暴露 Prometheus 可以收集和存储的有价值的指标。这一基础设置对于我们监控策略的下一阶段至关重要,这些策略包括使用 Prometheus 抓取这些指标,并使用像 Grafana 这样的工具将其可视化。

4. 安装并设置 Prometheus 以抓取指标

现在,我们的应用已配置为公开指标,下一步是设置 Prometheus 来收集这些指标。这部分过程要求我们下载并配置 Prometheus——基于操作系统详解分步指南——并调整 prometheus.yml 文件以锁定 Spring Boot 应用。

4.1. 安装

安装 Prometheus 很简单。让我们看一下两种最常见的操作系统和 Docker 中的安装步骤:

对于 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 命令解压 tar 包。
  3. 导航到解压的目录,使其成为 Prometheus 主目录。
  4. 在终端中执行 ./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 UI:随着 Prometheus 在 Docker 容器中活跃运行,其 UI 将可以通过 http://localhost:9090 访问。此接口有助于执行查询、查看收集的指标和验证抓取目标的状态。

4.2. 配置 Prometheus 以抓取指标

安装后,我们需要配置 Prometheus 以从 Spring Boot 应用中抓取指标。这需要编辑位于 Prometheus home 列表中的 prometheus.yml 记录。

我们将 Spring Boot 应用作为 scrape_configs 区域下的 target 添加:

scrape_configs:
  - job_name: 'spring-boot-application'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s # This can be adjusted based on our needs
    static_configs:
      - targets: ['localhost:8080']

此处,请将 localhost:8080 换成 Spring Boot 运行的主机和端口。scrape_interval 指定 Prometheus 应该从应用中抓取的频率。

4.3. 使用 Grafana 可视化指标

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

将 Grafana与 Prometheus 集成

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

在 Grafana 中创建仪表盘:

  1. 点击左边侧边栏上的图标,创建全新的仪表盘
  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 中自定义指标(Metric)

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 的自定义计数器指标。此计数器可以递增以跟踪我们应用中的特定事件,例如用户注册或登录尝试。

通过注入 MeterRegistry,我们注册了自定义指标,使其可供 Prometheus 抓取。

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

我们来看看这项工作的一些最佳实践:

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

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

6. 总结

利用 Prometheus 和 Grafana 来监控 Spring Boot 应用,为理解应用行为和先发制人了解潜在问题提供了一种强大的方法。本文指导我们制定了一个有效的监控解决方案,提高了我们包的可观察性。

通过将该设备集成到我们的改进和部署工作流程中,大大提高了软件的可靠性和性能。这不仅确保他们满足用户和业务需求,还培养了一种持续改进的文化。

采用 Prometheus 和 Grafana 进行跟踪不仅仅是一种维护基础设施健康的策略。这是朝着积极管理和优化应用迈出的一步,为持续的成功和增长奠定了基础。