Spring Boot 开发 -- 集成 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: 15sstatic_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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux c 求取MD5 转char 输出

要将MD5摘要转换为可打印的十六进制字符串&#xff08;char数组&#xff09;&#xff0c;可以使用sprintf函数来实现。以下是修改后的代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/md5.h>void ca…

单轮对话和多轮对话

参考&#xff1a;数据集对应关系说明 - 千帆大模型平台 | 百度智能云文档 (baidu.com) 什么是单轮对话 单轮对话和多轮对话是两种不同的对话形式&#xff0c;它们分别指的是在一次对话中只涉及一个问题和对应的回答&#xff0c;以及在一次对话中涉及多个问题和对应的回答。 …

暑假打工兼职首选——千行赏金

考虑暑假打工兼职该怎么选&#xff1f;加入千行赏金这样的平台确实是一个值得考虑的选择。以下是一些关于此问题的分析&#xff1a; 首先&#xff0c;暑假打工兼职的好处是显而易见的。它不仅可以为学生提供一定的经济收入&#xff0c;减轻家庭的经济负担&#xff0c;还可以帮…

【教程】从0开始搭建大语言模型:文本预处理

从0开始搭建大语言模型&#xff1a;文本预处理 参考仓库&#xff1a;LLMs-from-scratch 理解Word embedding 深度神经网络模型&#xff0c;包括LLM&#xff0c;不能直接处理原始文本&#xff0c;因此需要一种方法将它转换为连续值的向量&#xff0c;也就是embedding。如下图…

深入理解 Spring Boot 启动原理

本文将从以下几个方面进行详细阐述&#xff1a; Spring Boot 启动过程概述BeanFactory 初始化Bean 的实例化和依赖注入Aware 接口的设置Bean 的初始化单例 Bean 的后处理Spring 启动后的后处理启动 HTTP 流量入口 一、Spring Boot 启动过程概述 Spring Boot 的启动过程可以分…

长轮询之websocket

官方文档 背景 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它是为了解决 HTTP 协议存在的一些问题而产生的。WebSocket 的产生背景主要包括以下几点: HTTP 协议的局限性 HTTP 协议是一种请求-响应模型,客户端发起请求,服务端返回响应。这种模型存在一些问题,如…

等级保护测评与风险评估:构建网络安全的双重保障

# 等级保护测评与风险评估&#xff1a;构建网络安全的双重保障 在网络信息技术飞速发展的今天&#xff0c;网络安全问题日益成为社会关注的焦点。等级保护测评和风险评估作为网络安全管理的两个重要环节&#xff0c;对于确保信息系统的安全稳定运行具有重要意义。本文将探讨等级…

Stage #15深度解析:十六进制编码在XSS绕过中的应用

Stage #15深度解析&#xff1a;十六进制编码在XSS绕过中的应用 在网络安全领域&#xff0c;跨站脚本攻击&#xff08;XSS&#xff09;是一种常见的网络攻击手段。随着Web应用安全防护措施的不断完善&#xff0c;攻击者需要更高级的技术来绕过这些防护。本文将详细介绍如何利用…

1782java英语陪学记词系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java英语陪学记词系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

AI大底座核心平台:百度百舸AI异构计算平台(AI IaaS)与AI中台(AI PaaS)

AI大底座正是整合了以上端到端全要素技术能力&#xff0c;将基础架构IaaS与应用平台PaaS能力深度融合&#xff0c;面向企业和产业AI生 产与应用的全生命周期提供完整解决方案。 百舸AI异构计算平台是AI IaaS层的核心平台&#xff0c;包括AI计算、AI存储、AI加速、AI容器四层套件…

win磁盘映射到linux

有时虚拟机磁盘不够或文件想存在本地但使用linux环境&#xff0c;可以使用磁盘映射 1.windows磁盘映射&#xff0c;指定文件win_share进行文件共享&#xff0c;右键属性共享 2.linux 新建映射目录win_share 3.在linux进行挂载 sudo mount -t cifs //win7ip地址/win_share /hom…

【k8s的三种探针】

一、探针类型 作用&#xff1a;容器内应用的监测机制&#xff0c;根据不同的探针来判断容器应用当前的状态。 k8s 有三种类型的探针&#xff1a;StartupProbe(启动探针)、LivenessProbe(存活探针)、ReadinessProbe(就绪探针)。它们可以同时存在&#xff0c;但如果有StartupPro…

shell(一)

shell 既是脚本语言又是应用程序 查看自己linux系统的默认解析&#xff1a;echo $SHELL 创建第一个shell 文件 touch 01.sh编辑 vi 01.sh01.sh 文件内容 #!/bin/bash echo felicia保存 按Esc 然后输入:wq 定义以开头&#xff1a;#!/bin/bash #!用来声明脚本由什么shell解释…

idea maven 执行 控制台乱码

这是没加出现的问题 上方案

【HTTP系列】TCP/IP协议

文章目录 一、是什么二、划分五层体系应用层传输层网络层数据链路层物理层 四层体系 三、总结参考文献 一、是什么 TCP/IP&#xff0c;传输控制协议/网际协议&#xff0c;是指能够在多个不同网络间实现信息传输的协议簇 TCP&#xff08;传输控制协议&#xff09; 一种面向连…

【YOLOv5/v7改进系列】替换上采样层为Dysample

一、导言 介绍了一种名为DySample的超轻量级且高效的动态上采样器。DySample旨在解决当前动态上采样技术如CARAFE、FADE和SAPA虽然性能提升显著但带来大量计算负担的问题&#xff0c;这些问题主要来源于动态卷积的时间消耗以及用于生成动态核的额外子网络。此外&#xff0c;FA…

STC90C51驱动LCD1602、LCD12864、OLED

主控芯片&#xff08;STC90C516RDPG5151028&#xff09;介绍 ROM64K,RAM1280字节&#xff0c;40Pin&#xff0c;3个定时器&#xff0c;1个串口&#xff0c;8个中断源&#xff08;分别是&#xff1a;外部中断0(INTO)、外部中断 1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)、定…

系统化自学Python的实用指南

目录 一、理解Python与设定目标 二、搭建学习环境与基础准备 三、入门学习阶段 四、中级进阶阶段 五、项目实践与持续深化 六、持续学习与拓展 一、理解Python与设定目标 Python概述&#xff1a;详细介绍Python的历史沿革、设计理念、主要特点&#xff08;如易读、易维护…

pytest构建和测试FastAPI CURD API

文章目录 概述目标FASTAPI 介绍CRUD API 项目设置freezepipreqs 代码介绍run APIpytest测试F&Q1.执行uvicorn app.main:app --host localhost --port 8000 --reload 报错 zsh: /usr/local/bin/uvicorn: bad interpreter2.生成requirement.txt时&#xff0c;pip3 list pipre…

C语言printf( ) 函数有哪些参数?

一、问题 printf( ) 函数的作⽤是向终端输出若⼲个任意类型的数据&#xff0c;此函数由格式控制部分和输出表列两部分组成&#xff0c;格式控制部分⼜由“&#xff05;”和格式字符串组成&#xff0c;那么&#xff0c;此函数格式字符串部分有哪些参数呢&#xff1f; 二、解答 …