Spring Boot 整合 Prometheus 实现资源监控

引言

在微服务架构流行的今天,服务的监控和管理变得尤为重要。Prometheus 作为一个开源的监控和告警工具,以其强大的数据采集、存储和查询能力,受到了众多开发者的青睐。Spring Boot 作为 Java 领域快速构建微服务的框架,与 Prometheus 的结合可以实现对 Spring Boot 应用的实时监控。本文将介绍如何使用 Prometheus 监控 Spring Boot 应用。

一、Prometheus 简介

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

二、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 可读格式。

xml
<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 或 application.properties 文件中配置 Actuator 以暴露 Prometheus 端点。例如,在 application.yml 中:

yaml
management:endpoints:web:exposure:include: '*'metrics:export:prometheus:enabled: trueendpoints:web:base-path: "/status" # 将/actuator/xxx修改为/status/xxx,防止被猜到server:request:metric-name: "application:request" # 自定义接口指标名client:request:metric-name: "application:client_request" # 自定义http客户端指标名server:port: 10111 # 指定端口,默认跟server.port一样,可以防止被猜到

3.3 配置 Prometheus

下载并运行 Prometheus Server,然后从 Prometheus 官网或 GitHub 仓库获取适用于您操作系统的版本。启动 Prometheus Server 后,需要修改其配置文件 prometheus.yml,以便添加 Spring Boot 应用作为监控目标。

yaml
global:scrape_interval: 15s
scrape_configs:- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]- job_name: 'prometheusapp'metrics_path: '/actuator/prometheus'static_configs:- targets: ['localhost:8080']

四、监控落地

基于 Prometheus + Grafana 的监控落地,包括安装 Prometheus + Grafana、导入依赖、配置 Prometheus 拉取数据以及配置 Grafana 监控面板。

五、总结

通过上述步骤,我们可以成功地将 Prometheus 与 Spring Boot 应用集成,实现对应用的实时监控。

监控结果与可观察的指标

在Spring Boot应用中整合Prometheus后,我们可以监控到一系列关键的性能指标,这些指标对于理解应用的行为和健康状况至关重要。以下是一些主要的监控结果和可观察的指标:

1. 系统和JVM指标

  • CPU使用率:监控系统CPU的使用情况,可以通过PromQL查询rate(process_cpu_seconds_total[5m])来获取。

  • 内存使用情况:包括堆内存和非堆内存的使用情况,可以通过jvm_memory_used_bytes等指标来监控。

  • 垃圾回收(GC):监控JVM的垃圾回收情况,包括GC次数和耗时,可以通过jvm_gc_collection_seconds_sum等指标来监控。

2. 应用性能指标

  • 请求处理时间:监控接口的响应时间,可以通过http_server_requests_seconds等指标来获取。

  • 请求量:监控接口的请求次数,可以通过http_server_requests_total等指标来监控。

  • 错误率:监控接口的错误请求次数,可以通过http_server_requests_seconds_count等指标来监控。

3. 业务指标

  • 订单总额:模拟订单系统的实时订单总额,可以通过自定义指标order_amount_sum来监控。

  • 下单失败率:监控10分钟内的下单失败率,可以通过自定义指标来实现监控。

  • 请求失败数:监控请求失败的次数,可以通过自定义指标来实现监控。

4. 容器和部署指标

  • 容器启动时间:监控容器的启动时间,可以通过自定义脚本和Prometheus的pushgateway来实现。

  • 容器运行时指标:监控容器的运行时指标,如资源使用情况等。

5. 自定义指标

  • 接口调用次数和耗时:通过自定义指标来监控特定接口的调用次数和耗时,可以通过method_rt等指标来监控。

  • 订单请求次数:通过自定义指标metrics_request_count来监控订单请求的次数。

通过这些指标,我们可以对Spring Boot应用的性能和健康状况有一个全面的了解。这些数据不仅可以帮助我们及时发现和解决问题,还可以用于性能优化和故障排查。通过Grafana等可视化工具,我们可以将这些指标以图表的形式展示出来,使得监控结果更加直观和易于理解。

 如何通过Prometheus监控分布式系统的指标?

要通过Prometheus监控分布式系统的指标,可以遵循以下步骤和最佳实践:

1. 选择合适的监控指标

根据Google的分布式监控经验,推荐的四个黄金指标包括[1]:

  • 延迟:服务请求的时间,反映用户体验和系统核心性能。

  • 通讯量:监控当前系统的流量,用于衡量服务的容量需求。

  • 错误:监控当前系统所有发生的错误请求,衡量当前系统错误发生的速率。

  • 饱和度:衡量当前服务的饱和度,主要强调最能影响服务状态的受限制的资源,如内存状态。

2. 使用Exporter收集数据

Prometheus通过Exporter来收集分布式系统中的数据。常见的Exporter包括[11]:

  • NodeExporter:收集主机的CPU、内存、磁盘等信息。

  • 其他Exporter:根据需要监控的具体服务或组件,可能需要使用特定的Exporter。

3. 配置Prometheus

配置Prometheus的prometheus.yml文件,定义如何拉取不同Exporter的数据[11]:

yaml
scrape_configs:- job_name: 'node'static_configs:- targets: ['localhost:8080']

这将配置Prometheus从NodeExporter的:8080端口拉取数据。

4. 多集群监控方案

在分布式云场景下,可以采用TMP+TDCC方案,通过在中心账号下创建TMP监控实例,并在该账号下开启TDCC HUB集群,将其他账号下的集群统一注册到TDCC HUB集群中,实现一套监控系统采集所有集群的指标[9]。

5. 聚合查询与指标数据量

对于多集群数据存放在一起的情况,可以进行预聚合以减少查询时Prometheus的压力和反馈耗时[9]。同时,需要注意监控数据的总量,建议所有集群总的数据量不超过450w。

6. 可视化与告警

使用Grafana与Prometheus结合,实现数据的可视化展示[12]。同时,可以设置告警规则,当特定指标超过阈值时触发告警。

7. 监控指标的类型

Prometheus主要有四种类型的监控指标[10]:

  1. Counter:只增不减的计数器,如HTTP访问量。

  2. Gauge:反映系统的当前状态,可增可减,如CPU使用率。

  3. Histogram:用于统计和分析样本的分布情况。

  4. Summary:与Histogram类似,但提供了分位数统计。

通过上述步骤和实践,可以有效地通过Prometheus监控分布式系统的指标,确保系统的稳定性和性能。

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

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

相关文章

网络安全期末复习

第1章 网络安全概括 &#xff08;1&#xff09;用户模式切换到系统配置模式&#xff08;enable&#xff09;。 &#xff08;2&#xff09;显示当前位置的设置信息&#xff0c;很方便了解系统设置&#xff08;show running-config&#xff09;。 &#xff08;3&#xff09;显…

使用Python实现自动化邮件通知:当长时程序运行结束时

使用Python实现自动化邮件通知&#xff1a;当长时程序运行结束时 前提声明 本代码仅供学习和研究使用&#xff0c;不得用于商业用途。请确保在合法合规的前提下使用本代码。 目录 引言项目背景项目设置代码分析 导入所需模块定义邮件发送函数发送邮件 实现步骤结语全部代码…

Python学习35天

# 定义父类 class Computer: CPUNone MemoryNone diskNone def __init__(self,CPU,Memory,disk): self.disk disk self.Memory Memory self.CPU CPU def get_details(self): return f"CPU:{self.CPU}\tdisk:{self.disk}\t…

Opencv+ROS实现摄像头读取处理画面信息

一、工具 ubuntu18.04 ROSopencv2 编译器&#xff1a;Visual Studio Code 二、原理 图像信息 ROS数据形式&#xff1a;sensor_msgs::Image OpenCV数据形式&#xff1a;cv:Mat 通过cv_bridge()函数进行ROS向opencv转换 cv_bridge是在ROS图像消息和OpenCV图像之间进行转…

Spring Boot 动态数据源切换

背景 随着互联网应用的快速发展&#xff0c;多数据源的需求日益增多。Spring Boot 以其简洁的配置和强大的功能&#xff0c;成为实现动态数据源切换的理想选择。本文将通过具体的配置和代码示例&#xff0c;详细介绍如何在 Spring Boot 应用中实现动态数据源切换&#xff0c;帮…

Flink 任务启动脚本-V2(包括ck启动)

#!/bin/bash#crontab时设置&#xff0c;如果依赖其他环境变量配置&#xff0c;可以在脚本执行一下环境变量脚本 source /etc/profile# 进入脚本目录 curdirdirname "$0" curdircd "$curdir"; pwd echo "进入启动脚本目录 $curdir"# 定义应用程序…

C#设计模式——抽象工厂模式(重点)

文章目录 项目地址一、抽象工厂模式1.1 特性1.2 使用反射获取特性标记的类1.3 完整代码 项目地址 教程作者&#xff1a;教程地址&#xff1a; 代码仓库地址&#xff1a; 所用到的框架和插件&#xff1a; dbt airflow一、抽象工厂模式 工厂方法模式依然存在一个问题就是&…

LAMP环境的部署

一、软件安装介绍 在Linux系统中安装软件有rpm安装、yum安装、源码安装等方法&#xff0c;在这里主要给大家介绍 yum 安装&#xff0c;这是一种最简单方便的一种安装方法。 YUM&#xff08;Yellow dog Upadate Modifie&#xff09;是改进版的 RPM 管理器&#xff0c;很好地解…

『VUE』elementUI dialog的子组件created生命周期不刷新(详细图文注释)

目录 1. 测试代码分析令人迷惑的效果 分析原因解决方法 如何在dialog中反复触发created呢?总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 主要是在做表单的时候想要有一个编辑表单在dialog弹窗中出现,同时dialog调用的封装的…

项目实战:基于深度学习的人脸表情识别系统设计与实现

大家好&#xff0c;人脸表情识别是计算机视觉领域中的一个重要研究方向&#xff0c;它涉及到对人类情感状态的理解和分析。随着深度学习技术的发展&#xff0c;基于深度学习的人脸表情识别系统因其高精度和强大的特征学习能力而受到广泛关注。本文旨在探讨基于深度学习的人脸表…

QChart数据可视化

目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …

Chrome和edge浏览器如何为任何网站强制暗模式

前言 因为我的编辑器是黑色&#xff0c;可能是看的时间长了比较喜欢这种颜色了&#xff0c;感觉白色有些刺眼。尤其是看文章时&#xff0c;两边的空白纯白色&#xff0c;所以强迫症搜素设置了谷歌浏览器和edge如何设置成黑色。 Chrome和edge浏览器如何为任何网站强制暗模式 前…

使用 Elastic 收集 Windows 遥测数据:ETW Filebeat 输入简介

作者&#xff1a;来自 Elastic Chema Martinez 在安全领域&#xff0c;能够使用 Windows 主机的系统遥测数据为监控、故障排除和保护 IT 环境开辟了新的可能性。意识到这一点&#xff0c;Elastic 推出了专注于 Windows 事件跟踪 (ETW) 的新功能 - 这是一种强大的 Windows 原生机…

k8s网络服务

k8s 中向外界提供服务的几种方法port-forward、NodePort&#xff0c;以及 更加常用的提供服务的资源ingress。 1 kubectl port-forward service/redis 6379:6379 现在k8s中有一个pod运行在6379&#xff0c;本机访问映射到6379上&#xff0c;它可以针对部署&#xff0c;服务&…

手动设置 IP 地址和使用 DHCP 在以下方面存在区别

手动设置 IP 地址和使用 DHCP 在以下方面存在区别&#xff1a; 配置过程 手动设置 IP 地址&#xff1a;需要用户手动输入 IP 地址、子网掩码、默认网关、DNS 服务器地址等网络配置参数。在 Windows 系统中&#xff0c;通常要打开 “控制面板”&#xff0c;进入 “网络和共享中…

Python网络爬虫基础

Python网络爬虫是一种自动化工具&#xff0c;用于从互联网上抓取信息。它通过模拟人类浏览网页的行为&#xff0c;自动地访问网站并提取所需的数据。网络爬虫在数据挖掘、搜索引擎优化、市场研究等多个领域都有广泛的应用。以下是Python网络爬虫的一些基本概念&#xff1a; 1.…

实现跨语言通信:Rust 和 Thrift 的最佳实践

前言 在分布式系统中&#xff0c;服务之间高效且安全的通信至关重要。Apache Thrift 是一个被广泛应用的跨语言 RPC&#xff08;远程过程调用&#xff09;框架&#xff0c;它支持多种编程语言&#xff0c;包括 Rust。Rust 以其卓越的性能和内存安全保障&#xff0c;成为越来越…

微信小程序按字母顺序渲染城市 功能实现详细讲解

在微信小程序功能搭建中&#xff0c;按字母渲染城市会用到多个ES6的方法&#xff0c;如reduce&#xff0c;map&#xff0c;Object.entries()&#xff0c;Object.keys() &#xff0c;需要组合熟练掌握&#xff0c;才能优雅的处理数据完成渲染。 目录 一、数据分析 二、数据处理 …

框架学习07 - SpringMVC 其他功能实现

一. 拦截器实现HandlerInterceptor 接⼝ SpringMVC 中的 Interceptor 拦截器也是相当重要和相当有⽤的&#xff0c;它的主要作⽤是拦截⽤户的请求并进⾏相应的处理。⽐如通过它来进⾏权限验证&#xff0c;或者是来判断⽤户是否登陆等操作。对于 SpringMVC 拦截器的定义⽅式有两…

前端JavaScript(一)---基本介绍

Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言&#xff0c;主要目的是为了解决服务器端语言&#xff0c;比如Perl&#xff0c;遗留的速度问题&#xff0c;为客户提供更流畅的浏览效果。当时服务端需要对…