【微服务】springboot对接Prometheus指标监控使用详解

news2024/11/25 14:40:44

目录

一、前言

二、微服务监控概述

2.1 微服务常用监控指标

2.2 微服务常用指标监控工具

2.3 微服务使用Prometheus监控优势

三、环境准备

3.1 部署Prometheus服务

3.2 部署Grafana 服务

3.3 提前搭建springboot工程

3.3.1 引入基础依赖

3.3.2 配置Actuator 端点

3.3.3 访问actuator端点

四、springboot接入Prometheus

4.1 工程配置与改造操作流程

4.4.1 引入新的依赖包

4.4.2 补充配置信息

4.4.3 prometheus 端点验证

4.4.4 增加配置bean

4.4.5 打包并部署到服务器

4.2 配置Prometheus

4.2.1 修改Prometheus 配置文件

4.2.2 重启Prometheus 服务

五、SpringBoot监控指标接入Grafana

5.1 部署与启动Grafana服务

5.2 官网拷贝监控模板的ID

5.3 配置dashboard

六、写在文末


一、前言

随着微服务在生产环境大规模部署和应用,随之而来也带来了新的问题,其中比较关键的就是关于微服务的运维和监控。行业有句话叫无监控不运维,以springboot为基础框架的微服务开发和部署模式,给业务快速发展提供了有效的支撑,但随着业务的飞速发展,需要拆分的服务也越来越多,这就给线上的运维工作带了很大的挑战,所以近些年来,微服务的运维、链路跟踪和各类指标监控被日渐重视起来。本文将结合微服务运维监控中的指标监控进行详细的说明。

二、微服务监控概述

2.1 微服务常用监控指标

 在微服务的监控世界里,可以说涉及到的内容非常多,涵盖内容也比较多,结合实际经验以下列举了微服务中常用的一些监控指标:

  • 性能指标

    • 响应时间 (Response Time):请求从发起到收到响应的时间。

    • 吞吐量 (Throughput):单位时间内处理的请求数量。

    • 延迟 (Latency):请求到达系统到处理完成的时间。

  • 资源利用

    • CPU 使用率 (CPU Utilization):微服务进程或容器的CPU资源使用情况。

    • 内存使用量 (Memory Usage):微服务进程或容器的内存消耗情况。

    • 磁盘I/O (Disk I/O):磁盘读写操作的性能情况。

  • 错误指标

    • 错误率 (Error Rate):错误请求的比例,通常包括4xx和5xx错误。

    • 失败请求数 (Failed Requests):特定时间段内的失败请求总数。

  • 系统健康

    • 健康检查 (Health Checks):检查微服务的健康状态,通常包括应用程序、数据库、依赖服务等。

    • 服务可用性 (Service Availability):服务的可用时间与总时间的比率。

  • 业务指标

    • 请求量 (Request Volume):特定时间段内的请求总数。

    • 业务关键指标 (Business KPIs):如订单数量、用户注册数等与业务目标相关的指标。

  • 日志监控

    • 日志分析 (Log Analysis):监控应用生成的日志信息,帮助排查问题。

  • 网络指标

    • 网络延迟 (Network Latency):网络传输数据的延迟时间。

    • 带宽使用率 (Bandwidth Usage):网络带宽的使用情况。

  • 分布式跟踪

    • 追踪请求链路 (Request Tracing):追踪请求在微服务间的流动情况,识别瓶颈。

2.2 微服务常用指标监控工具

在微服务架构中,常用的指标监控工具有很多选择,以下列举了几个比较流行和广泛使用的工具:

  • Prometheus

    • Prometheus 是一个开源的监控和警报工具包,特别适合动态服务发现和高度动态的环境。它具有强大的数据模型和查询语言,可以实时存储和查询大量时间序列数据,用于监控各种微服务的性能指标。

  • Grafana

    • Grafana 是一个开源的数据可视化和监控平台,与多种数据源兼容,包括 Prometheus、Elasticsearch、InfluxDB 等。它可以通过仪表盘展示监控数据,支持创建灵活的图表和警报。

  • Jaeger

    • Jaeger 是一个开源的分布式追踪系统,用于监控和故障排除微服务架构中的服务调用。它提供了端到端的跟踪信息,帮助理解和优化服务间的调用路径和性能问题。

  • Datadog

    • Datadog 是一种云端监控和安全平台,支持监控微服务的性能、日志和安全事件。它提供实时分析、警报和可视化工具,帮助团队监控和优化复杂的微服务架构。

  • ELK Stack (Elasticsearch, Logstash, Kibana)

    • ELK Stack 是一个流行的日志管理和分析解决方案,Elasticsearch 用于存储和搜索日志数据,Logstash 用于数据收集和处理,Kibana 用于数据可视化和分析。ELK Stack 适用于监控微服务的日志输出,帮助分析和排查问题。

  • Zipkin

    • Zipkin 是另一个开源的分布式追踪系统,可以帮助追踪和可视化请求在微服务间的传播和延迟情况。它支持多种后端存储,如MySQL、Cassandra等。

  • AWS CloudWatch

    • AWS CloudWatch 是亚马逊提供的监控和管理服务,用于收集和跟踪AWS云上的资源和应用程序。它支持监控各种AWS服务以及自定义应用程序指标,可以设置警报和自动响应。

  • New Relic

    • New Relic 提供全栈的性能监控解决方案,适用于云端和本地部署环境。它支持实时监控应用程序性能、基础设施状态和用户行为,帮助优化微服务的性能和稳定性。

工具的选择通常需要结合团队的配置,资源的预算以及当前系统所处的阶段合理选择,没有确定的标准,但是有一点是需要注意的,选择监控工具时,尽量选择那些知名度高,运维难度低,社区活跃,同时生态较为丰富的工具。

2.3 微服务使用Prometheus监控优势

在上一篇 Prometheus搭建与使用,我们较为详细的了解了Prometheus的使用,Prometheus提供了强大而丰富的监控功能,而且可以结合Grafana 将动态监控的各项指标进行可视化图形展示,可以说是非常完美的使用组合,而springboot服务在线上运行的过程中,也会产生各类指标数据,基于此,可以将微服务对接Prometheus,利用Grafana 将微服务运行过程中的各项指标信息呈现出来。

具体来说,微服务架构与Prometheus结合使用有几个显著的优势:

  • 动态服务发现和监控

    • 微服务架构通常涉及多个服务实例的动态扩展和收缩,这些实例可以动态添加或删除。Prometheus支持与服务发现工具(如Kubernetes、Consul等)集成,能够自动发现和监控这些服务实例的健康状态和性能指标,无需手动配置每个实例。

  • 多维度数据模型

    • Prometheus使用灵活的多维数据模型来存储时间序列数据。这种模型允许开发人员定义和记录各种自定义指标,可以根据服务的特定需求捕获各种不同的度量数据,如请求延迟、吞吐量、错误率等。这对于微服务架构中的复杂度是非常重要的。

  • 强大的查询语言

    • Prometheus提供了PromQL查询语言,允许开发人员执行高级查询和聚合操作,以分析和理解微服务架构中不同服务的性能和行为。这些查询可以帮助识别瓶颈、优化资源使用和改进系统的可靠性。

  • 可扩展性和灵活性

    • Prometheus设计为可扩展和灵活的监控解决方案,适用于从小型部署到大规模微服务架构的各种场景。它支持水平扩展和分布式部署,可以处理大量的时间序列数据并保持低延迟查询。

  • 与Grafana等工具的集成

    • Prometheus与Grafana等数据可视化工具集成紧密,可以通过仪表盘直观地展示收集到的监控数据。这种集成使开发团队能够快速识别问题、监控关键性能指标并实时做出响应。

三、环境准备

在正式使用springboot接入Prometheus之前,需要提前将相关的环境准备完成。提前准备一台服务器,部署如下几个服务即可。

3.1 部署Prometheus服务

参考相关的资料部署Prometheus服务,部署完成后确保能够访问下面的页面

3.2 部署Grafana 服务

Grafana 主要用于展示监控的服务指标信息,以更优雅的可视化看板进行展示

3.3 提前搭建springboot工程

提前准备一个springboot工程,便于后面做集成使用

3.3.1 引入基础依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/>
    </parent>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

    </dependencies>

重点说明一下actuator的作用,这是springboot将指标上报Prometheus的关键组件,关于actuator具备如下作用:

  • 健康检查

    • Actuator 提供了一个 /actuator/health 端点,用于检查应用程序的健康状态,开发者可以通过该端点了解应用程序是否正常运行,以及是否存在任何健康问题。

  • 信息端点

    • Actuator 提供了一组信息端点,用于获取应用程序的详细信息,例如,/actuator/info 端点可以返回应用程序的自定义信息,如版本号、环境配置等。

  • 度量指标

    • Actuator 收集和暴露了许多与应用程序性能相关的度量指标,如 CPU 使用率、内存使用情况、请求计数等,这些指标可以通过 /actuator/metrics 端点获取,并用于监控和性能调优。

  • 日志管理

    • Actuator 允许动态修改应用程序的日志级别,而无需重新启动应用程序,通过 /actuator/loggers 端点,开发者可以查看和修改应用程序中各个日志记录器的级别。

  • 远程 Shell

    • Actuator 提供了一个远程 Shell 端点,可以通过命令行或远程终端与应用程序进行交互,这使得开发者可以在运行中的应用程序中执行命令、查看状态等。

3.3.2 配置Actuator 端点

在springboot的yml配置文件中添加如下信息:

server:
  port: 8087

spring:
  application:
    name: boot-pro

#暴露actuator的端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

在上面的配置中,通过management这个标签将actuator的相关指标暴露出去

3.3.3 访问actuator端点

启动工程之后,访问actuator的端点,确保可以正常暴露指标信息

在/actuator这个端点中,列举出了更详细的指标信息的url访问地址,比如需要访问系统的健康信息指标,可以访问如下的url

到这里基本的前置准备工作就初步完成了,接下来就是如何接入Prometheus的过程。

四、springboot接入Prometheus

通过上一步,利用actuator暴露服务端点信息的能力,可以将微服务的各项指标暴露出去,理论上讲,actuator这个组件就相当于是上一篇提到的各种exporter,用于搜集指标,然后上报到Prometheus,但是光有上面暴露出来的指标信息还不够,因为Prometheus并不认识这些指标,因此需要通过某种方式进行转换之后才能被Prometheus接受,下面看具体的操作流程。

4.1 工程配置与改造操作流程

4.4.1 引入新的依赖包

为了让Prometheus能够解析actuator的指标信息,还需要引入下面的依赖,通过该组件,将服务的指标信息转换成Prometheus能够接收的数据格式

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
            <scope>runtime</scope>
        </dependency>

4.4.2 补充配置信息

在yml配置文件中补充关于Prometheus的配置信息,完整配置如下:

server:
  port: 8087

spring:
  application:
    name: boot-pro

#暴露actuator的端点
management:
  endpoints:
    web:
      exposure:
        include: "*"
        
  # 激活prometheus
  endpoint:
    prometheus:
      enabled: true
    health:
      show-details: always
  #指标信息相关配置
  metrics:
    export:
      prometheus:
        enabled: true

4.4.3 prometheus 端点验证

再次启动工程,重新访问/actuator端点,此时可以看到展示的端点列表中就有了prometheus的信息

进一步,当访问prometheus的端点url时,就能看到关于prometheus的相关指标信息了,那么当服务接入prometheus时,prometheus监控的就是如下这些指标数据

4.4.4 增加配置bean

增加如下的配置bean,主要是为了将当前接入到prometheus中的服务具有一个明确的标识

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configureBean (
            @Value("${spring.application.name}") String appName
    ){
        return (registry) -> registry.config().commonTags("application",appName);
    }

4.4.5 打包并部署到服务器

工程打包并部署到服务器

在工程中有一个接口可以测试一下是否可以正常访问

4.2 配置Prometheus

以上工程改造就完成了,接下来就需要配置Prometheus 的相关信息了,参考下面的步骤。

4.2.1 修改Prometheus 配置文件

找到prometheus.yml配置文件中,在job的部分添加如下配置内容

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
      
  #新增springboot服务的监控    
  - job_name: "boot-pro"
    scrape_interval: 5s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ["localhost(建议使用公网IP):8087"]

配置内容说明:

  • scrape_interval:5s;

    • 每隔5秒,prometheus发起向指点的端点url拉取一次指标监控信息并存储至本地;

  • metrics_path:

    • 暴露给prometheus拉取监控指标信息的url;

4.2.2 重启Prometheus 服务

重启完成之后,再次访问Prometheus 的控制台,可以看到上述的微服务指标就在这里展现出来了

通过链接点击进去,正好是 /actuator/prometheus这个端点,里面展示了详细的被prometheus监控的指标信息

五、SpringBoot监控指标接入Grafana

通过上面的整合,我们已经可以通过Prometheus拉取到springboot的指标信息,但为了后续能够更直观的看到指标中的各项数据的动态变化,还需要接入Grafana,利用Grafana强大的数据看板功能进行呈现,下面介绍如何在Grafana中展示SpringBoot的监控指标信息。

5.1 部署与启动Grafana服务

在准备阶段完成

5.2 官网拷贝监控模板的ID

进入Grafana的官网,找一个展示效果还不错的模板,然后拷贝模板ID供下面配置dashboard使用

dashboard地址:Grafana dashboards | Grafana Labs

可以根据自己的需要搜索并选择一个合适的模板

比如我选择下面这个,拷贝并保存这个ID:4701

5.3 配置dashboard

在Grafana界面找到配置dashboard的入口

点击添加一个新的dashboard,来到下面的页面

点击导入一个dashboard

拷贝上面的ID到此处,然后点击load

首先需要点击ID框右侧的load,它会做ID的正确性检查,校验通过之后,再点击下面的load,才会跳转到下一页面,在下面的页面中,如果之前你没有配置过Prometheus的数据源的话,还需要重新配置一下

出现上面的信息之后,点击Import即可,如果导入成功,将会跳转到下面的页面看到如下的可视化效果展示

上面只是截了一部分的指标监控信息,页面上还有更完整的信息可以看到,有兴趣的同学可以深入研究里面的配置项。

六、写在文末

本文通过详细的操作展示了如何将springboot应用快速接入Prometheus进行指标监控,并且通过配置Grafana将Prometheus监控的指标信息可视化的呈现出来,基于此,可以在实际的项目中,利用这个思路改造现有的工程,并接入Prometheus进行全方位的监控,为日常微服务的运维工作提供便利,希望对看到的同学有用,本篇到此结束,感谢观看。

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

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

相关文章

STM32实现看门狗(HAL库)

文章目录 一. 看门狗1. 独立看门狗&#xff08;IWDG&#xff09;1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗&#xff08;WWDG&#xff09;2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG&#xff0c;而导致芯片无法正常工…

如何对GD32 MCU进行加密?

GD32 MCU有哪些加密方法呢&#xff1f;大家在平时项目开发的过程中&#xff0c;最后都可能会面临如何对出厂产品的MCU代码进行加密&#xff0c;避免产品流向市场被别人读取复制。 下面为大家介绍GD32 MCU所支持的几种常用的加密方法&#xff1a; 首先GD32 MCU本身支持防硬开盖…

无需服务器,浏览器跑700+AI模型?!【送源码】

Transformers.js 是一个创新的网络机器学习库&#xff0c;它将先进的 Transformer 模型直接带入浏览器&#xff0c;无需服务器端支持。这个库与 Hugging Face 的 Python transformers 库功能对等&#xff0c;提供相似的 API 接口来运行预训练模型&#xff0c;涵盖了自然语言处理…

人工智能系列-Python面向对象编程

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 面向对象编程和面向过程编程 在使用计算机语言进行代码编写时&#xff0c;常见的两种思路是面向对象编程和面向过程编程。 面向过程&#xff1a;根据业务逻辑从上到下写代码。…

Hi6602 恒压恒流SSR电源方案

Hi6602是一款针对离线式反激电源设计的高性能PWM控制器。Hi6602内集成有通用的原边恒流控制技术&#xff0c;可支持断续模式和连续模式工作&#xff0c;适用于恒流输出的隔离型电源应用中。Hi6602内部具有高精度65kHz开关频率振荡器&#xff0c;且带有抖频功能可优化EMI性能。H…

【Python迭代器探秘】:揭秘迭代器与生成器的魔法,掌握高效循环的艺术

文章目录 一、迭代器的基本概念1.1 迭代器优点1.2 迭代器的编写方法1.3 python内置迭代器函数1.4 小结1.5 迭代器对象与迭代对象1.5.1 区别1. 迭代对象2. 迭代器对象3. 小结 1.5.2 方法区分 二、生成器基本概念1. 生成器函数2. 生成器表达式 一、迭代器的基本概念 迭代器是Pyt…

【数据结构/操作系统 堆和栈】区别及应用场景、底层原理图解

堆和栈 比较有趣的是&#xff0c;计算机网络、操作系统中都会对堆栈有不同方面比较详细的描述&#xff0c;而使用的地方通常对这些底层的细节表现得没有那么明显。 但如果你能了解堆栈在计算机网络和操作系统中的表现形式&#xff0c;在你写代码时就会有不一样的认识&#xff…

基于AOP的数据字典实现:实现前端下拉框的可配置更新

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严禁转载。 目录 1. 前言 2. 数据字典 2.1. 数据字典简介 2.2. 数据字典如何管理各模块的下拉框 3. 数据字典核心内容解读 3.1. 表结构 3.2. 核心代码 3.2.1. 根据实体类名称获取下属数据字典 3.2.2. 数据字…

【QT】显示类控件

显示类控件 显示类控件1. label - 标签2. LCD Number - 显示数字的控件3. ProgressBar - 进度条4. Calendar Widget - 日历5. Line Edit - 输入框6. Text Edit - 多行输入框7. Combo Box - 下拉框8. Spin Box - 微调框9. Date Edit & Time Edit - 日期微调框10. Dial - 旋钮…

3-4 优化器和学习率

3-4 优化器和学习率 主目录点这里 优化器是机器学习和深度学习模型训练过程中用于调整模型参数的方法。它的主要目标是通过最小化损失函数来找到模型参数的最优值&#xff0c;从而提升模型的性能。 在深度学习中&#xff0c;优化器使用反向传播算法计算损失函数相对于模型参数…

pycharm远程连接和conda环境参考博客自用整理

pycharm远程连接 pycharm的连接需要先用xftp把项目上传上去&#xff08;包括venv&#xff09;&#xff0c;似乎才能连 https://blog.csdn.net/weixin_41174300/article/details/134420981 注意要上传一份一模一样的&#xff0c;然后在deployment里面添加mapping 注意传输文件…

【C语言】操作符--百科全书

目录 一、操作符的分类 二、 ⼆进制和进制转换 三、 原码、反码、补码 四、 移位操作符 五、位操作符&#xff1a;&、|、^、~ 六、单⽬操作符 七、逗号表达式 八、 下标访问[]、函数调⽤() 九、结构体 十、操作符的属性&#xff1a;优先级、结合性 十一、表达式…

P1392 取数

传送门&#xff1a;取数 如若你看完题解后&#xff0c;仍有问题&#xff0c;欢迎评论 首先说一下 我首先想到的思路 &#xff08; 20%通过率 &#xff09;&#xff1a;通过dfs , 将所有的情况放入priority_queue中&#xff08;greater<int>&#xff09;&#xff0c;维持…

【ARMv8/v9 GIC 系列 1.7 -- GIC PPI | SPI | SGI | LPI 中断使能配置介绍】

文章目录 GIC 各种中断使能配置PPIs(每个处理器私有中断)SPIs(共享外设中断)SGIs(软件生成的中断)LPIs(局部中断)GIC 各种中断使能配置 在ARM GICv3和GICv4架构中,不同类型的中断(如PPIs、SPIs、SGIs和LPIs)可以通过不同的方式进行启用和禁用。 下面详细介绍这些中…

java项目总结6

目录 1.双列集合 2.map的三种遍历方式&#xff1a; 1.键找值 2.键值对 3.lambda遍历map 3.HashMap 例子&#xff1a;统计字符出现次数 4.LinkedHashMap 5.TreeMap 6.可变参数 7.Collections: 1.双列集合 双列集合特点&#xff1a; 定义Map<String&#xff0c;St…

【Python】已解决:(paddleocr导包报错)ModuleNotFoundError: No module named ‘paddle’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;&#xff08;paddleocr导包报错&#xff09;ModuleNotFoundError: No module named ‘paddle’ 一、分析问题背景 近日&#xff0c;一些使用PaddleOCR库进行文字…

移动校园(3):处理全校课程数据excel文档,实现空闲教室查询与课程表查询

首先打开教学平台 然后导出为excel文档 import mathimport pandas as pd import pymssql serverName 127.0.0.1 userName sa passWord 123456 databaseuniSchool conn pymssql.connect(serverserverName,useruserName,passwordpassWord,databasedatabase) cursor conn.cur…

vue3项目 前端blocked:mixed-content问题解决方案

一、问题分析 blocked:mixed-content其实浏览器不允许在https页面里嵌入http的请求&#xff0c;现在高版本的浏览器为了用户体验&#xff0c;都不会弹窗报错&#xff0c;只会在控制台上打印一条错误信息。一般出现这个问题就是在https协议里嵌入了http请求&#xff0c;解决方法…

拉曼光谱入门:3.拉曼光谱的特征参数与定量定性分析策略

1.特征参数 1.1 退偏振率 退偏振率&#xff08;p&#xff09;是一个衡量拉曼散射光偏振状态的参数&#xff0c;它描述了拉曼散射光的偏振方向与入射光偏振方向之间的关系。退偏振率定义为垂直偏振方向的拉曼散射强度与平行偏振方向的拉曼散射强度之比。退偏振率&#xff08;p&…

逆变器学习笔记(二)

用正点原子示波器看交流220V波形的时候&#xff0c;一定注意先把探头调到X10档位&#xff01;&#xff01;!!!!!!!!!!!!!!!!!!!!!!!!!!! 全桥LLC电路&#xff1a; 1.电感的两种模式——DCM和CCM的区别&#xff1a; DCM&#xff08;Discontinuous Conduction Mode&#xff0c;…