首页 > 其他分享 >Spring Boot 开发 -- 集成 Prometheus 进行高效监控

Spring Boot 开发 -- 集成 Prometheus 进行高效监控

时间:2024-05-31 14:33:31浏览次数:28  
标签:自定义 -- Spring Boot Prometheus 指标 prometheus

引言

随着微服务架构的流行,对服务的监控和管理变得尤为重要。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官网 下载适用于您操作系统的版本。

  • docker 方式 拉取安装镜像文件
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 D:\developsoft\docker\DockerDesktopWSL\data\prometheus\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  • 浏览器访问 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 创建仪表板

创建新的仪表板,并添加面板来展示关心的监控指标。
在这里插入图片描述

  1. 点击左侧边栏的图标,选择 “Dashboard”,创建一个新的仪表盘。
  2. 在仪表盘中添加一个全新的面板。在这里,选择要显示的指标,决定可视化类型(图表、仪表、表格等),并自定义面板的外观。
  3. 选择 Prometheus 记录源,并使用 Prometheus 查询语言 (PromQL) 选择希望可视化的指标。例如,要显示 HTTP 请求的消耗,可以使用 price(http_requests_total[5m]) 这样的查询。
  4. 保存面板和仪表盘。可以创建尽可能多的面板,以可视化 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. https://spring4all.com/forum-post/6888.html
  2. prometheus 官方文档: https://prometheus.io/docs/prometheus/latest/getting_started/
  3. https://www.jianshu.com/p/9480634bbfeb
  4. https://springdoc.cn/spring-boot-prometheus/
  5. https://springdoc.cn/spring-boot-actuators/

标签:自定义,--,Spring,Boot,Prometheus,指标,prometheus
From: https://blog.csdn.net/dazhong2012/article/details/139288005

相关文章

  • 网络安全在2024好入行吗?
    前言023年的今天,慎重进入网安行业吧,目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多,还有很多高中被挖过来的大佬。理由很简单,目前来说,信息安全的圈子人少,985、211院校很多都才建立这个专业,加上信息安全法的存在,形成了小圈子的排他效应,大佬们的技术交流都是......
  • SOLIDWORKS参数化开发 慧德敏学
    传统的设计模式下大规模定制型产品结构设计周期长,问题多,以及大量重复性工作让工程师疲于应对,这些严重阻碍了公司订单承接能力和技术创新能力,难以响应市场需求。什么是参数化设计?1、它是一种设计的方式,将设计规范到由产品结构的顶层传递至相关次层级的一种设计方式;2、它是一种管......
  • 目前我国网络安全人才市场状况
    网络安全人才市场状况本章以智联招聘多年来形成的丰富的招聘、求职信息大数据为基础,结合了奇安信集团在网络安全领域多年来的专业研究经验,相关研究成果具有很强的代表性。对涉及安全人才的全平台招聘需求与求职简历进行分析(注:本章中的需求指数采用的是全量数据统计,其他......
  • 两台windowserver服务器配置Redis哨兵集群
    十年河东,十年河西,莫欺少年穷学无止境,精益求精redis下载地址:https://github.com/tporadowski/redis/releases 这里选择压缩版,不选择安装版1、集群环境 主机master:局域网IP  172.27.40.27从机slave:局域网IP  172.27.40.29 2、修改主从相关配置-两台服务器均需修改......
  • STM32--如何合理使用宏定义使用来简化开发工作
    #defineI2C_OAR1_OA1EN_Pos(15U)#defineI2C_OAR1_OA1EN_Msk(0x1UL<<I2C_OAR1_OA1EN_Pos)/*!<0x00008000*/#defineI2C_OAR1_OA1ENI2C_OAR1_OA1EN_Msk......
  • 广告联盟四大家
    国内四大广告承接商:①抖音旗下-穿山甲②快手旗下-快手联盟③百度旗下-百青藤④腾讯旗下-优量汇    我们目前在互联网上能看到的所有广告都是由他们发放的,在其中我们打小游戏复活看广告,获得道具看广告,看剧看广告,这其中看广告是会产生收益的,但是这些收益会直接到二级承接商......
  • 【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实
    ......
  • 云端部署mes/云mes系统
    什么是MES制造执行系统?MES系统中文全称“制造执行系统”,英文全称“manufacturingexecutionsystem”,简称“MES”。该系统对企业的制造生产具有很大的作用,帮助企业提高生产效率,管理效率、质量问题,有效的执行生产计划等。MES系统应用包括:MES系统能工艺规格标准管理、MES系统能......
  • 用技术合法挖漏洞能有多少钱?年挖洞超过300个,奖金收入过百万
    挖洞能力是白帽子的核心能力,通过挖洞或参加实战攻防演习获取奖金收入,是白帽人才获取收入的重要方式。调研显示,我国近四成的白帽子年均奖金收入在3000元以下,约六成在1万元以下。而年均奖金超过10万元的白帽子约占17.0%,约0.4%的白帽子年奖金收入超过100万元。按照补天平台目......
  • 【复现】考虑泊位优化和多能协同的港口综合能源系统运行优化(Matlab代码实现)
     ......