SpringBoot依赖之Spring Boot Admin(二)

news2024/9/25 19:17:20

本文核心:集成Prometheus 指标实现应用指标图表监控

作者语录:

我们一直在追逐需求和迭代的路上,却不曾回头看自己曾经的作品是否给自己留下经验和遗憾。技术永远没有边界,但个人必须对自己过往的行为买单,无论对与错,终究是个做个复盘。我们一直在被降本增效,我们自己也要考虑增效降本,技术人如何增效,简言之,就是释放自己成就他人。 释放自己,就需要“别人”替你去做事,无论是监控亦或是AI 还有可能是替身,最终的目的都是为了释放自己。何为成就他人?你把事做好了,他人就舒服了。那么现在作为开发者,你也可以去着手自己做独立的事情了-创业or do sth。

前文回顾

通过前文我们已经完成了,springboot整合Spring Boot Admin的应用监控功能。

SpringBoot依赖之Spring Boot Admin(一)

接下来我们逐步完成高阶功能,实现应用性能指标监控功能,这次我们先从Spring Boot 的 Micrometer 集成,Prometheus 可以采集、存储并可视化展示应用的性能指标(如 JVM 内存使用、HTTP 请求延迟、数据库连接池信息等)。结合 Spring Boot Admin的UI控制台,我们可以更直观地看到这些监控指标,并做出快速响应。

一、Prometheus 与 Spring Boot 的集成

为了让 Spring Boot 应用的性能指标能够被 Prometheus 采集,我们首先需要通过 Micrometer 启用 Prometheus 的 metrics 导出。

1.1 添加 Micrometer 和 Prometheus 依赖

在你的 Admin Client 项目中引入 Micrometer 和 Prometheus 依赖:

<dependencies>
    <!-- Micrometer Core 依赖 -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-core</artifactId>
    </dependency>
    
    <!-- Prometheus 依赖,用于导出数据 -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
</dependencies>
1.2 暴露 Prometheus 端点

在 Spring Boot 项目中,需要在 application.properties 中配置管理端点,确保 Prometheus 的 metrics 端点可以被访问:

指定暴露部分端点:

# 暴露 Prometheus 端点
management.endpoints.web.exposure.include=prometheus,health,info

指定暴露全部端点:

# 暴露 Prometheus 端点
management.endpoints.web.exposure.include=actuator,beans,caches,health,info,conditions,configprops,env,loggers,heapdump,threaddump,prometheus,metrics,sbom,scheduledtasks,mappings

或者直接暴露所有端点:

# 暴露 所有Prometheus 端点
management.endpoints.web.exposure.include=*

此配置将允许外部系统(如 Prometheus、Grafana)通过 /actuator/prometheus 端点访问应用的性能指标。这里我我们配置了所有,

1.3 验证 /actuator/prometheus 端点 Prometheus 指标

访问:
http://localhost:8083/actuator

{
    "_links": {
        "self": {
            "href": "http://localhost:8083/actuator",
            "templated": false
        },
        "beans": {
            "href": "http://localhost:8083/actuator/beans",
            "templated": false
        },
        "health-path": {
            "href": "http://localhost:8083/actuator/health/{*path}",
            "templated": true
        },
        "health": {
            "href": "http://localhost:8083/actuator/health",
            "templated": false
        },
        "info": {
            "href": "http://localhost:8083/actuator/info",
            "templated": false
        },
        "conditions": {
            "href": "http://localhost:8083/actuator/conditions",
            "templated": false
        },
        "configprops-prefix": {
            "href": "http://localhost:8083/actuator/configprops/{prefix}",
            "templated": true
        },
        "configprops": {
            "href": "http://localhost:8083/actuator/configprops",
            "templated": false
        },
        "env": {
            "href": "http://localhost:8083/actuator/env",
            "templated": false
        },
        "env-toMatch": {
            "href": "http://localhost:8083/actuator/env/{toMatch}",
            "templated": true
        },
        "loggers": {
            "href": "http://localhost:8083/actuator/loggers",
            "templated": false
        },
        "loggers-name": {
            "href": "http://localhost:8083/actuator/loggers/{name}",
            "templated": true
        },
        "heapdump": {
            "href": "http://localhost:8083/actuator/heapdump",
            "templated": false
        },
        "threaddump": {
            "href": "http://localhost:8083/actuator/threaddump",
            "templated": false
        },
        "prometheus": {
            "href": "http://localhost:8083/actuator/prometheus",
            "templated": false
        },
        "metrics": {
            "href": "http://localhost:8083/actuator/metrics",
            "templated": false
        },
        "metrics-requiredMetricName": {
            "href": "http://localhost:8083/actuator/metrics/{requiredMetricName}",
            "templated": true
        }
    }
}

启动应用后,你可以在浏览器中访问 http://localhost:8080/actuator/prometheus,看到类似这样的输出:

# HELP jvm_memory_max_bytes The maximum amount of memory in bytes that can be used for memory management
# TYPE jvm_memory_max_bytes gauge
jvm_memory_max_bytes{area="heap",id="G1 Eden Space"} -1.0
jvm_memory_max_bytes{area="heap",id="G1 Old Gen"} 8.589934592E9
jvm_memory_max_bytes{area="heap",id="G1 Survivor Space"} -1.0
jvm_memory_max_bytes{area="nonheap",id="CodeCache"} 5.0331648E7
jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space"} 1.073741824E9
jvm_memory_max_bytes{area="nonheap",id="Metaspace"} -1.0
....

这些指标数据可以被 Prometheus 抓取并存储。

Spring Boot Admin 提供了一个用户友好的监控界面,结合 Prometheus 的强大数据采集和分析能力,能够帮助你更加直观和高效地监控 Spring Boot 应用的健康状况和性能。我们可以直接使用SpringBoot AdminUI进行性能指标监测。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Prometheus 监控参数详解

在 Spring Boot 集成 Micrometer Prometheus 后,Prometheus 可以抓取和显示以下常见的监控指标:

  1. http_server_requests_seconds

    • 该指标记录了 HTTP 请求的处理时间。它包括以下标签:
      • method:HTTP 请求的方法(GET、POST 等)。
      • status:HTTP 响应状态码。
      • uri:被请求的路径。
    • 例如:请求处理时间的平均值可以通过 http_server_requests_seconds_sum / http_server_requests_seconds_count 计算。
  2. jvm_memory_used_bytes

    • 显示 JVM 中的内存使用情况,分为堆内存和非堆内存两部分:
      • area=heap:堆内存的使用。
      • area=nonheap:非堆内存的使用。
  3. jvm_gc_pause_seconds

    • 记录垃圾回收(GC)事件的暂停时间,帮助你监控 GC 是否对应用性能造成了影响。
      • action=major:指代 Major GC。
      • action=minor:指代 Minor GC。
  4. process_cpu_usage

    • 显示当前应用占用 CPU 的百分比,帮助监控应用的 CPU 负载。
  5. jvm_threads_live

    • 记录当前 JVM 中活动线程的数量。通过监控线程数的变化,你可以了解应用的线程消耗情况。
  6. logback_events_total

    • 记录应用的日志事件数量,分为不同的日志级别(INFO、WARN、ERROR)。
  7. system_cpu_usage

    • 显示系统整体的 CPU 使用率,帮助监控系统资源的消耗情况。
  8. process_uptime_seconds

    • 显示应用自启动以来的运行时长(以秒为单位)。

这些 Prometheus 指标能够帮助你全面监控 Spring Boot 应用的健康状况和性能表现。当与 Spring Boot Admin 集成后,不仅能够在 Spring Boot Admin UI 中查看这些指标,还可以通过 Prometheus 来定期抓取和分析这些数据,普罗米修斯我们后续再深入讲解,今天就到这,先消化一下。

欢迎一起交流讨论。关注我,为程序员职业生涯储能!!

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

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

相关文章

TestNet 资产管理信息收集系统,附下载链接

我们团队在进行例行的安全活动时&#xff0c;信息管理和监控变得越来越重要了。尤其是在 hvv 和 zb 的任务中&#xff0c;我们需要对公司的资产有一个全貌的了解&#xff0c;以便及时识别和修复潜在的安全漏洞。这个过程通常涉及到大量的信息收集和数据分析&#xff0c;往往会消…

基于多技术融合下生态系统服务权衡与协同动态分析及论文写作方法

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…

Vue——day13之脚手架

目录 概述 创建一个脚手架 首先下载脚手架 创建文件 脚手架中代码分析 main.js index.html render 为什么要用render 脚手架的默认配置 总结 概述 Vue的脚手架是一个快速构建Vue项目的工具&#xff0c;它集成了一系列的开发工具和配置&#xff0c;提供了一种标准化的…

MFC修改控件ID的详细说明

控件的ID可以在该对话框的.rc中修改 首先需要开启资源视图 然后在资源视图中打开该对话框 选中某个控件&#xff0c;就可以在属性面板中修改ID了 在此处修改ID后&#xff0c;对应Resource.h中也会发生变化 若在.rc中创建了一个控件时&#xff0c;Resource.h中会生成一个对应…

XML 保存 显示XML 方式 encoding=“UTF8“

XML 保存 encoding“UTF8” 将文件另存为 编码 UTF8 &#xff0c; 跟encoding“UTF8” 保持一致 。

NVDLA专题13:NVDLA软件部分设计和Compiler library

NVDLA拥有完整的软件生态&#xff0c;包括从编译神经网络到推理的支持。这个生态的一部分包括on-device软件栈&#xff08;software stack&#xff09;&#xff0c;它是NVDLA开源版本的一部分。此外&#xff0c;英伟达将提供完整的training infrastructure&#xff0c;用来构建…

基于yolov8的肺炎检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的肺炎检测系统是一项前沿的深度学习应用&#xff0c;该系统利用YOLOv8这一先进的目标检测算法&#xff0c;能够高效地分析病人的X射线肺部图像&#xff0c;从而快速识别出肺炎的征状。YOLOv8作为Ultralytics公司开发的最新版本&#xff0c;引入了多项…

猎板通信PCB动态:苹果16系列多款设备上线,PCB供应商的机遇与挑战!

在最新的苹果供应链动态中&#xff0c;苹果公司对于PCB供应商的选择标准非常严格&#xff0c;主要考虑因素包括技术能力、生产规模、质量控制、成本效益、供应链稳定性以及环境和社会责任等。随着苹果产品技术的不断进步&#xff0c;PCB供应商也需要具备相应的技术升级能力&…

安泰功率放大器在微纳光固化3D打印中的具体应用

随着科技的进步&#xff0c;3D打印技术已经渗透到各个领域&#xff0c;尤其是微纳光固化3D打印技术。这种技术结合了光学、材料科学和微电子学的知识&#xff0c;能够制造出具有微米级精度的复杂物体。本文Aigtek安泰电子将带你探索功率放大器在微纳光固化3D打印中的应用&#…

太简单,用这个例子详解TCP协议你肯定不知道

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友 当你在微信上给你的朋友发送一条消息&#xff0c;或者在淘宝浏览商品时&#xff0c;这些信息是如何安全、准确地…

LLM - 理解 多模态大语言模型 (MLLM) 的架构与相关技术 (二)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142063880 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 多模态…

CDGA|推动数据治理与传统产业深度融合:策略与实践路径

在数字化浪潮席卷全球的今天&#xff0c;数据已成为推动经济社会发展的关键生产要素。传统产业&#xff0c;作为国民经济的基石&#xff0c;正面临着前所未有的转型挑战与机遇。如何让数据治理这一现代管理理念与实践方法深度融入传统产业&#xff0c;促进其转型升级与高质量发…

K均值聚类

根据到给点样本的距离&#xff0c;来聚类。 1.曼哈顿距离、 2.欧几里得距离 直线距离 3.切比雪夫距离 4.闵氏距离 5.余弦相似度 对数据大小/长度等不关注&#xff0c;只关注相似度。 6.汉明距离 二进制距离 二、密度聚类 DBSCAN 前提是样本是根据紧密程度分布的。 先用超参…

Go语言概述

1.Go语言的特点 1&#xff09;从语言层面支持并发&#xff0c;实现简单 2&#xff09;goroutine&#xff0c;轻量级线程&#xff0c;可实现大并发处理&#xff0c;高效利用多核 3&#xff09;垃圾回收机制&#xff0c;内存自动回收&#xff0c;不需要开发人员管理 4&#xff0…

【网络】DNS协议、ICMP协议

DNS协议与ICMP协议 文章目录 1.DNS协议1.1DNS背景1.2域名简介1.3域名解析过程&#xff08;了解&#xff09;1.4使用dig工具分析DNS过程 2.ICMP协议2.1ICMP的功能2.2ping命令2.3traceroute命令 1.DNS协议 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协…

idear获取git项目

最近想下载个ruoyi项目来包装简历&#xff0c;结果打开idear总是上一个项目&#xff0c;找不到get for vcs只好自己捣鼓了&#xff0c;顺便记录留着下次用。 步骤&#xff1a; 1. 2. 3.输入我们想访问的地址 eg: 点击克隆&#xff0c;我们就能获取项目到本地了。

C语言 | Leetcode C语言题解之第396题旋转函数

题目&#xff1a; 题解&#xff1a; #define MAX(a, b) ((a) > (b) ? (a) : (b))int maxRotateFunction(int* nums, int numsSize){int f 0, numSum 0;for (int i 0; i < numsSize; i) {f i * nums[i];numSum nums[i];}int res f;for (int i numsSize - 1; i &g…

教师节重磅福利!《动手学强化学习》作者亲自带你学强化学习

作为大模型的核心技术之一&#xff0c;强化学习越来越受到人们的重视。强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习的一个领域&#xff0c;主要研究智能主体&#xff08;agent&#xff09;在环境中应该怎样采取行动以最大化所获得的累积奖励。目前强…

【视频教程】GEE遥感云大数据在林业中的应用与典型案例实践

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

运动耳机精选分享,热门骨传导耳机运动好物推荐!

因为骨传导耳机独特的佩戴方式和声音的传播方式&#xff0c;受到了小耳、油耳以及运动爱好者的的喜爱&#xff0c;但也由于市面上的骨传导耳机品牌越来越多&#xff0c;很多朋友不知道该怎么选择&#xff0c;今天我挑选出市面上体验感较好&#xff0c;各方面比较出色的骨传导给…