Spring Boot中使用Prometheus监控教程

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

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

什么是普罗米修斯?
Prometheus是一个开源项目,旨在深入研究我们的应用程序数据,创建过滤层来收集和分析从最简单到最复杂的所有内容。它也不仅仅是数字和图表:它是通过其高级查询语言和时间序列数据功能来了解我们的应用程序的心跳。

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

Spring Boot 中的 Prometheus 入门
将 Prometheus 与 Spring Boot 应用程序集成使我们能够通过以 Prometheus 可以理解和抓取的格式公开应用程序指标来进行有效监控。此过程涉及两个主要步骤:向我们的项目添加必要的依赖项并配置我们的应用程序以公开指标。

1.添加依赖项
首先,我们将Spring Boot Actuator和Micrometer Prometheus 注册表添加到项目的依赖项中。执行器提供了一系列内置端点来显示有关正在运行的应用程序的性能信息,例如运行状况、指标等。然后,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'

2.配置应用程序
添加依赖项后,下一步是配置 Spring Boot 应用程序以公开 Prometheus 指标端点。这是通过更新项目中的application.properties或application.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 等工具将它们可视化。

设置 Prometheus 来抓取指标
现在我们的应用程序已配置为公开指标,下一步涉及设置 Prometheus 来收集这些指标。这部分过程需要我们下载并配置 Prometheus(详细介绍基于操作系统的分步指南),并调整prometheus.yml文件以定位我们的 Spring Boot 应用程序。

1.安装
安装 Prometheus 非常简单。我们回顾一下两种最常见的操作系统和 Docker 的步骤:

对于 Windows:

  • 从 Prometheus 官方网站下载最新的 Prometheus 版本,选择 Windows 版本。
  • 将下载的.zip文件解压缩到我们所需的位置,该位置将作为 Prometheus 主目录。
  • 通过打开命令提示符、导航到 Prometheus 目录并执行prometheus.exe来运行 Prometheus 。此操作启动 Prometheus 服务器。

对于 Linux/Mac:
  • 从Prometheus 下载页面下载适用于 Linux 或 Mac 的最新版本。
  • 使用命令tar xvfz prometheus-*.tar.gz提取 tarball 。
  • 导航到提取的目录,使其成为 Prometheus 主目录。
  • 通过在终端中执行./prometheus来启动 Prometheus,这会启动 Prometheus 服务器。

使用 Docker:
  • 选择Docker部署 Prometheus 可简化设置过程,无论使用哪种操作系统,均可提供一致且简化的安装方法。

以下是我们可以实现此目的的方法:

拉取 Prometheus 镜像:首先,我们从 Docker Hub 拉取官方 Prometheus 镜像,以确保我们拥有最新版本:
docker pull prom/prometheus

运行 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替换为配置文件的实际路径。

访问 Prometheus Web UI:随着 Prometheus 在 Docker 容器中主动运行,用户界面将可以通过http://localhost:9090访问。该接口对于执行查询、查看收集的指标以及验证抓取目标的状态非常有用。

2.配置 Prometheus 来抓取指标
安装后,我们需要配置 Prometheus 以从 Spring Boot 应用程序中抓取指标。这需要编辑位于 Prometheus 主目录中的prometheus.yml记录。

我们将 Spring Boot 应用程序添加为scrape_configs部分下的目标:

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 应从我们的应用程序中抓取指标的频率。

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

将 Grafana 与 Prometheus 集成:

  • 通过访问Grafana 官方下载页面安装 Grafana 。
  • 启动 Grafana 并通过在 Web 浏览器上访问http://localhost:3000来访问其 Web 界面。
  • 通过导航到Grafana UI 中的配置 > 数据源 > 添加数据源,将 Prometheus 添加为数据源。我们选择 Prometheus 作为类型,并指定 Prometheus 运行的 URL,通常为http://localhost:9090。
  • 保存并测试以确认 Grafana 可以成功连接到 Prometheus。

在 Grafana 中创建仪表板:
  • 通过单击左侧边栏的图标并选择仪表板来创建新的仪表板。
  • 向仪表板添加一个全新的面板。在这里,我们选择要显示的指标,决定可视化类型(图形、仪表、表格等),并自定义面板的外观。
  • 选择我们的 Prometheus 记录源并利用 Prometheus 查询语言 (PromQL) 来选择我们希望可视化的指标。例如,要显示 HTTP 请求的费用,我们将使用类似Price(http_requests_total[5m]) 的查询。
  • 保存我们的面板和仪表板。我们可以创建尽可能多的面板,以可视化 Spring Boot 实用程序中的特殊指标。

遵循这些步骤使我们能够设置 Prometheus 从 Spring Boot 应用程序中抓取指标,并利用 Grafana 来可视化它们。此设置为我们提供了有关应用程序运行状况和整体性能的重要见解。

高级配置和最佳实践
本节介绍可以增强 Spring Boot 应用程序的可观察性和安全性的高级配置。我们将探索在 Prometheus 中设置警报规则,并使用 Micrometer 在 Spring Boot 中创建自定义指标。

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

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

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

2.监控和警报的最佳实践
让我们回顾一下这项工作的一些最佳实践:

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

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