在SpringBoot/SpringCloud中实现监控埋点的具体实践

 更新时间:2025年11月09日 08:46:32   作者:IT橘子皮  
这篇文章主要介绍了在 SpringBoot/SpringCloud 中如何实现监控埋点,核心是构建一个覆盖指标收集、链路追踪、日志聚合三个维度的可观测性体系,需要的朋友可以参考下

在 SpringBoot/SpringCloud 中实现监控埋点,核心是构建一个覆盖指标收集、链路追踪、日志聚合三个维度的可观测性体系。下面这个表格能帮你快速了解核心的监控维度、推荐工具及其主要作用。

监控维度核心技术/工具主要作用
🔢 指标监控Spring Boot Actuator, Micrometer, Prometheus收集应用性能指标(如JVM、HTTP请求、业务指标),用于性能分析和告警。
🔀 链路追踪Spring Cloud Sleuth, Zipkin/Jaeger在微服务架构中追踪一个请求的完整调用链,用于定位故障点和性能瓶颈。
📃 日志聚合SLF4J + Logback, ELK Stack收集、存储和检索分布式系统中的日志,配合Trace ID进行关联查询。

指标监控

指标监控帮助你量化系统的运行状态。

核心依赖:在项目中引入 Spring Boot Actuator 和 Micrometer 的依赖。Actuator 提供了许多开箱即用的端点(如 /health, /metrics),而 Micrometer 是一个监控门面,可以让你方便地将指标导出到 Prometheus 等外部系统。

<!-- 在 pom.xml 中添加 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

基础配置:在 application.yml中暴露 Prometheus 端点,以便指标被采集。

management:
  endpoints:
    web:
      exposure:
        include: prometheus,health,info # 暴露指定的监控端点
  metrics:
    tags:
      application: ${spring.application.name} # 为所有指标添加应用标签

配置后,即可通过 /actuator/prometheus访问指标。

自定义业务指标:Micrometer 提供了多种指标类型,你可以根据业务场景灵活使用:

@Service
public class BusinessService {
    private final Counter orderCounter;
    public BusinessService(MeterRegistry registry) {
        // 创建并注册一个名为 "order.created" 的计数器
        orderCounter = Counter.builder("order.created")
                .description("Number of orders created")
                .tag("version", "1.0")
                .register(registry);
    }
    public void createOrder() {
        // 业务逻辑...
        orderCounter.increment(); // 下单成功后计数器+1
    }
}
  • Counter(计数器) :用于只增不减的指标,如订单量、访问次数。
  • Gauge(仪表盘) :用于反映瞬时状态的可增可减的指标,如当前在线人数、队列大小。
  • Timer(计时器) :用于记录耗时操作,如接口响应时间,并可以计算分位数(如P99)。
  • 使用示例:你可以通过注入 MeterRegistry来创建和注册自定义指标。

分布式链路追踪

在微服务架构中,链路追踪对于理解请求的完整路径至关重要。

核心依赖与配置:为每个需要追踪的微服务添加 Sleuth 和 Zipkin 客户端依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

application.yml中配置 Zipkin 服务器地址和采样率。

spring:
  zipkin:
    base-url: http://your-zipkin-server-host:9411
  sleuth:
    sampler:
      probability: 1.0 # 采样率,生产环境可设置为0.1(10%)以降低压力

核心概念

  • Trace:代表一条完整的调用链,拥有一个唯一的 Trace ID。
  • Span:代表调用链中的一个独立工作单元,例如一次服务调用。一个 Trace 由多个 Span 组成。
  • Sleuth 会自动为通过 RestTemplate、FeignClient 等发出的请求注入 Trace ID 和 Span ID,并上报到 Zipkin。在 Zipkin 的 UI 上,你可以根据 Trace ID 直观地看到请求的完整路径和每个环节的耗时。

自定义Span标签:你可以在业务代码中手动添加更详细的标签信息,便于后续筛选和定位问题。

@Autowired
private Tracer tracer;
public void process() {
    Span currentSpan = tracer.currentSpan();
    if (currentSpan != null) {
        currentSpan.tag("user.id", "12345");
        currentSpan.tag("business.type", "payment");
    }
    // ... 业务逻辑
}

日志处理

清晰的日志与链路追踪结合,能极大提升排查问题的效率。

  1. 结构化日志:在 logback-spring.xml等日志配置文件中,设置日志输出模式,确保包含 Sleuth 自动添加的 [appname,traceId,spanId,exportable]信息。这是将日志与调用链关联的关键。
  2. 与ELK技术栈集成:将各微服务的日志集中收集到 Elasticsearch 中,再通过 Kibana 进行查询。在 Kibana 中,你可以通过 Trace ID 轻松检索到分布在各个服务实例上的所有相关日志。

生产环境注意事项

将监控投入生产环境时,还需注意以下几点:

  • 采样率调整:在全链路追踪中,高频请求会产生海量数据。在生产环境中,应根据实际需求适当降低采样率(例如设置为 0.1 或 0.01),以避免对系统和存储造成过大压力。
  • 数据存储与持久化:Zipkin 默认将数据存在内存中,重启会丢失。生产环境务必配置持久化存储,如 Elasticsearch 或 MySQL。
  • 监控与告警:利用 Grafana 创建可视化监控大盘,对核心指标(如错误率、延迟)设置告警规则,实现主动发现问题。
  • 性能影响:监控本身也会消耗少量系统资源。应关注采集代理的性能,避免监控过度侵入影响核心业务。

总结

总的来说,在 SpringBoot/SpringCloud 中实现监控埋点,指标监控(Micrometer + Prometheus)让你知其然,链路追踪(Sleuth + Zipkin)让你知其所以然,而集中式日志(ELK)则为深入排查提供了详实的现场记录。这三者共同构成了微服务可观测性的坚实基座。

以上就是在SpringBoot/SpringCloud中实现监控埋点的具体实践的详细内容,更多关于SpringBoot/SpringCloud监控埋点的资料请关注脚本之家其它相关文章!

相关文章

  • elasticsearch源码分析index action实现方式

    elasticsearch源码分析index action实现方式

    这篇文章主要为大家介绍了elasticsearch源码分析index action实现方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Java中-Xms和-Xmx参数的使用与默认内存设置

    Java中-Xms和-Xmx参数的使用与默认内存设置

    在 Java 程序运行时,内存的管理是影响程序性能的关键因素之一,Java 程序使用的内存主要由两部分组成:堆内存和栈内存,Java 提供了多个参数来控制堆内存的大小,其中最常用的参数是 -Xms 和 -Xmx,本文将详细介绍这些参数,需要的朋友可以参考下
    2024-11-11
  • SpringBoot多环境配置方式的新手教程

    SpringBoot多环境配置方式的新手教程

    我们平时做项目的时候,一般都会分几套环境,每一套环境的配置都是不一样的,所以这篇文章就来为大家详细介绍一下SpringBoot多环境配置方式,希望对大家有所帮助
    2023-11-11
  • java实现酒店管理系统

    java实现酒店管理系统

    这篇文章主要为大家详细介绍了java实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • 详解JAVA 字节流和字符流

    详解JAVA 字节流和字符流

    这篇文章主要介绍了JAVA 字节流和字符流的的相关资料,文中讲解非常的细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • SpringCloud 集成Sentinel的实战教程

    SpringCloud 集成Sentinel的实战教程

    这篇文章主要介绍了SpringCloud 集成Sentinel的详细过程,本文通过实例代码图文相结合给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-08-08
  • Java中将异步调用转为同步的五种实现方法

    Java中将异步调用转为同步的五种实现方法

    本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownLatch和CyclicBarrier,每种方法都有其适用场景和核心机制,可以根据具体需求选择合适的方法,需要的朋友可以参考下
    2025-02-02
  • Java使用JFreeChart创建动态图表的代码示例

    Java使用JFreeChart创建动态图表的代码示例

    在数据可视化的世界中,图表是展示数据的强大工具,无论是折线图、柱状图还是饼图,它们都能帮助我们更直观地理解数据,在Java生态中,JFreeChart是一个功能强大且灵活的图表库,广泛应用于各种 Java 应用程序中,本文将带你从零开始学习如何使用JFreeChart创建动态图表
    2025-02-02
  • SpringBoot图文并茂讲解Lombok库的安装与使用

    SpringBoot图文并茂讲解Lombok库的安装与使用

    Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成
    2022-06-06
  • mybatis中返回主键一直为1的问题

    mybatis中返回主键一直为1的问题

    这篇文章主要介绍了mybatis中返回主键一直为1的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论