⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/dazhong2012/article/details/139288005 「dazhong2012」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

引言

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

Spring Boot作为Java领域快速构建微服务的框架,与Prometheus的结合可以实现对Spring Boot应用的实时监控。

本文将介绍如何使用Prometheus监控Spring Boot应用。

一、 Prometheus 简介

Prometheus 是一个开源的系统监控和警报工具包,它通过采集和存储指标(metrics),提供了强大的数据查询语言,可以帮助我们分析和理解应用程序的行为。Prometheus 的核心组件是 Prometheus Server,它负责采集监控指标并提供查询接口。

Prometheus 官网:

https://prometheus.io/

项目 github 地址:

https://github.com/prometheus/prometheus

二、 Spring Boot Actuator

Spring Boot Actuator 是 Spring Boot 提供的一系列用于监控和管理 Spring Boot 应用的工具。它提供了许多端点(endpoints),例如 /health、/info、/metrics 等,这些端点可以公开应用的内部信息,如健康状态、配置信息和度量指标。

三、 集成 Prometheus 和 Spring Boot

要将 Prometheus 与 Spring Boot 应用集成,我们需要执行以下步骤:

3.1 添加依赖

首先,将 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>
<version>2.7.15</version>
</dependency>
<!-- Micrometer Prometheus Registry -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.9.14</version>
</dependency>
</dependencies>

3.2 配置 Actuator

接下来,application.yml 文件中配置 Actuator 以暴露 Prometheus 端点:

management:
endpoints:
web:
exposure:
include: '*'
metrics:
export:
prometheus:
enabled: true

其他配置属性:

management.endpoints.web.exposure.include=* # 暴露所有端点
management.metrics.export.prometheus.enabled=true #启用Prometheus导出器
management.endpoints.web.base-path=“/status” # 将/actuator/xxx修改为/status/xxx,防止被猜到
management.endpoints.server.request.metric-name=“application:request” # 自定义接口指标名
management.server.port=10001 #指定端口,默认跟server.port一样,可以防止被猜到

3.3 启动 Prometheus

下载并运行 Prometheus Server。可以从 Prometheus官网 下载适用于您操作系统的版本。

1.docker 方式 拉取安装镜像文件

docker pull prom/prometheus

2.创建并运行容器

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

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

docker run -d --name prometheus -p 9090:9090 -v D:\developsoft\docker\DockerDesktopWSL\data\prometheus\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

3.浏览器访问 http://localhost:9090

3.4 配置 Prometheus

拷贝 prometheus.yml 文件到宿主机 :

docker cp prometheus:/etc/prometheus/prometheus.yml  D:\developsoft\docker\DockerDesktopWSL\data\prometheus\prometheus.yml

修改 Prometheus 的配置文件 prometheus.yml,添加 Spring Boot 应用作为目标(target):

scrape_configs:
- job_name: 'spring-boot-application'
metrics_path: 'prometheus-demo/actuator/prometheus'
scrape_interval: 15s
static_configs:
- targets: ['192.168.10.108:8091']

如上,localhost:8080 应替换为 Spring Boot 应用相应的 宿主机 和端口。

  • scrape_interval 指定 Prometheus 从应用中抓取指标的频率。
  • metrics_path 中 prometheus-demo为 springboot 应用的contextPath,/actuator/prometheus为默认路径

3.5 访问监控数据

启动 Spring Boot 应用后,Prometheus 将定期从 /actuator/prometheus 端点抓取指标数据。

四、 Grafana 可视化指标

虽然 Prometheus 提供了基本的数据查询和展示功能,但通常我们会使用 Grafana 来实现更丰富的数据可视化。Grafana 支持 Prometheus 作为数据源,可以方便地创建仪表板展示监控数据。

4.1 安装 Grafana

docker 方式 拉取安装镜像文件

docker pull grafana/grafana

创建并运行容器

docker  run -d --name=grafana  -p 3000:3000  grafana/grafana

浏览器访问 http://localhost:3000

默认用户名/密码:admin/admin

4.2 配置数据源

在 Grafana 中配置 Prometheus 作为数据源,指向 Prometheus Server 的地址。

4.3 创建仪表板

创建新的仪表板,并添加面板来展示关心的监控指标。

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

五、 自定义监控指标

除了 Spring Boot Actuator 提供的内置指标,我们还可以通过 Micrometer 添加自定义监控指标,以监控特定的业务逻辑或性能瓶颈。

5.1 添加自定义指标

在 Spring Boot 应用中,使用 Micrometer 的 API 添加自定义指标:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;

@RestController
public class CustomMetricsController {
private final Counter ordersCounter;

public CustomMetricsController(MeterRegistry registry) {
this.ordersCounter = Counter.builder("orders_count")
.description("The total number of orders")
.register(registry);
}

@GetMapping("/order")
public String createOrder() {
ordersCounter.increment();
return "Order created";
}
}

5.2 在 Grafana 中展示自定义指标

在 Grafana 中,可以像展示其他 Prometheus 指标一样展示自定义指标。

文章目录
  1. 1. 引言
  2. 2. 一、 Prometheus 简介
  3. 3. 二、 Spring Boot Actuator
  4. 4. 三、 集成 Prometheus 和 Spring Boot
    1. 4.1. 3.1 添加依赖
    2. 4.2. 3.2 配置 Actuator
    3. 4.3. 3.3 启动 Prometheus
    4. 4.4. 3.4 配置 Prometheus
    5. 4.5. 3.5 访问监控数据
  5. 5. 四、 Grafana 可视化指标
    1. 5.1. 4.1 安装 Grafana
    2. 5.2. 4.2 配置数据源
    3. 5.3. 4.3 创建仪表板
  6. 6. 五、 自定义监控指标
    1. 6.1. 5.1 添加自定义指标
    2. 6.2. 5.2 在 Grafana 中展示自定义指标