Spring Boot 4使用Opentelemetry OTLP协议快速集成Jaeger + Prometheus + loki 实现指标监控,链路追踪,日志聚合

Spring Boot 4使用Opentelemetry OTLP协议快速集成Jaeger + Prometheus + loki 实现指标监控,链路追踪,日志聚合

效果图:

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

描述

在现代云原生架构中,可观测性不再是可选项,而是一项基本要求。你需要通过指标了解应用程序的运行情况,通过跟踪了解请求的流向,并通过日志了解应用程序的运行状态。

什么是Opentelemetry

官方:https://opentelemetry.io

OpenTelemetry(简称 OTel) 是一个开源的、厂商中立的 可观测性(Observability)框架和工具集,旨在统一和标准化应用程序的 指标(Metrics)、日志(Logs)和分布式追踪(Traces) 的生成、收集、处理与导出。
它由 Cloud Native Computing Foundation(CNCF) 托管,是目前云原生生态中最主流、最推荐的可观测性标准,被广泛用于微服务、Kubernetes、Serverless 等现代架构中。

为什么使用Jaeger,Prometheus,Loki

Jaeger官方描述与安装:https://www.jaegertracing.io/

prometheus官方描述与安装:https://prometheus.io/

Loki官方描述与安装:https://grafana.com/docs/loki/latest/

使用 Jaeger + Prometheus + Loki的组合,是构建现代云原生应用可观测性(Observability)体系中一种非常经典且高效的方案。它们分别专注于可观测性的不同维度,互补性强,尤其适合微服务、Kubernetes 等分布式系统环境。

Jaeger,Prometheus,Loki 原生支持OTLP协议,大大简化了配置流程,不需要中间转换,减少性能消耗

组件聚焦领域功能
Prometheus指标(Metrics)采集、存储、查询时间序列数据(如 CPU 使用率、请求速率、错误率、延迟分位数等)
Jaeger分布式追踪(Traces)记录单次请求在多个服务间的完整调用链路,分析性能瓶颈与依赖关系
Loki日志聚合(Logs)高效存储和查询日志,但不索引日志内容,而是基于标签(labels)进行索引,节省资源

并且加入Grafana + Loki,形成 “PLGJ” 栈(Prometheus + Loki + Grafana + Jaeger),成为 CNCF 推荐的云原生可观测性黄金组合。

使用 Spring 团队提供的 OpenTelemetry Spring Boot Starter

官方描述和文档:https://spring.io/blog/2025/11/18/opentelemetry-with-spring-boot
Spring Boot 4.0 通过官方 spring-boot-starter-opentelemetry 提供了 开箱即用、协议优先(OTLP)、与 Micrometer 深度集成 的 OpenTelemetry 支持。
开发者只需少量配置,即可实现 Metrics、Traces、Logs 三位一体的可观测性,且能灵活对接任意 OTel 兼容后端。

虽然日志集成仍需手动步骤,但整体体验已非常接近“无缝”

代码

pom

只需要spring-boot-starter-opentelemetry 就可以实现 Metrics + Traces + Logs三合一

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-opentelemetry</artifactId></dependency><dependency><groupId>io.opentelemetry.instrumentation</groupId><artifactId>opentelemetry-logback-appender-1.0</artifactId><version>2.21.0-alpha</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency></dependencies>

配置

使用Prometheus + Jaeger otlp协议来收集数据, 可以配置Loki 用来日志收集

Prometheus开启otlp协议需要额外配置一个参数

配置地址:https://prometheus.io/docs/guides/opentelemetry/#enable-the-otlp-receiver

server: port: 8090 spring: application: name: test-service management: otlp: metrics: export: url: http://localhost:9090/api/v1/otlp/v1/metrics #Prometheus otlp协议 http地址 step: 30s opentelemetry: tracing: export: otlp: endpoint: http://localhost:4317/v1/traces #Jaeger otlp协议 grpc地址 transport: grpc # endpoint: http://localhost:4318/v1/traces # transport: http logging: export: otlp: endpoint: http://localhost:3100/otlp/v1/logs #Loki otlp协议 http地址 

采集配置

手动配置一个采集的参数

@Configuration(proxyBeanMethods =false)publicclassOpenTelemetryConfiguration{@BeanOpenTelemetryServerRequestObservationConventionopenTelemetryServerRequestObservationConvention(){returnnewOpenTelemetryServerRequestObservationConvention();}@BeanOpenTelemetryJvmCpuMeterConventionsopenTelemetryJvmCpuMeterConventions(){returnnewOpenTelemetryJvmCpuMeterConventions(Tags.empty());}@BeanProcessorMetricsprocessorMetrics(){returnnewProcessorMetrics(List.of(),newOpenTelemetryJvmCpuMeterConventions(Tags.empty()));}@BeanJvmMemoryMetricsjvmMemoryMetrics(){returnnewJvmMemoryMetrics(List.of(),newOpenTelemetryJvmMemoryMeterConventions(Tags.empty()));}@BeanJvmThreadMetricsjvmThreadMetrics(){returnnewJvmThreadMetrics(List.of(),newOpenTelemetryJvmThreadMeterConventions(Tags.empty()));}@BeanClassLoaderMetricsclassLoaderMetrics(){returnnewClassLoaderMetrics(newOpenTelemetryJvmClassLoadingMeterConventions());}}

日志配置

  1. 创建 src/main/resources/logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?><configuration><includeresource="org/springframework/boot/logging/logback/base.xml"/><appendername="OTEL"class="io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender"></appender><rootlevel="INFO"><appender-refref="CONSOLE"/><appender-refref="OTEL"/></root></configuration>
  1. 配置
@ComponentclassInstallOpenTelemetryAppenderimplementsInitializingBean{privatefinalOpenTelemetry openTelemetry;InstallOpenTelemetryAppender(OpenTelemetry openTelemetry){this.openTelemetry = openTelemetry;}@OverridepublicvoidafterPropertiesSet(){OpenTelemetryAppender.install(this.openTelemetry);}}
@ComponentclassTraceIdFilterimplementsWebFilter{privatefinalTracer tracer;TraceIdFilter(Tracer tracer){this.tracer = tracer;}@OverridepublicMono<Void>filter(ServerWebExchange exchange,WebFilterChain chain){String traceId =getTraceId();if(traceId !=null){ exchange.getRequest().mutate().header("X-Trace-Id", traceId).build();}return chain.filter(exchange);}private@NullableStringgetTraceId(){TraceContext context =this.tracer.currentTraceContext().context();return context !=null? context.traceId():null;}}

实现一个接口

@RestControllerpublicclassTestController{@GetMapping("/test")publicMono<String>test(){returnMono.just("Hello World!");}}

多运行几次接口

在这里插入图片描述


效果

在这里插入图片描述


在这里插入图片描述

Read more

Spring Cloud Alibaba 2026 最新实战手册

Spring Cloud Alibaba 2026 最新实战手册

✨道路是曲折的,前途是光明的! 📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记! 🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流! 📚 目录 * 一、引言:微服务架构的新篇章 * 二、Spring Cloud Alibaba 核心架构 * 三、环境搭建与项目初始化 * 四、核心组件实战 * 五、微服务治理最佳实践 * 六、性能优化与监控 * 七、总结与展望 一、引言:微服务架构的新篇章 1.1 为什么选择 Spring Cloud Alibaba? 在云原生时代,微服务架构已成为企业级应用的主流选择。Spring Cloud Alibaba 作为国内领先的微服务解决方案,凭借以下优势脱颖而出: Spring Cloud Alibaba 优势 生态完善 中文文档丰富 阿里生产验证

By Ne0inhk

C++与Go的匿名函数编程区别对比

一、语法结构 c++:[捕获列表](参数) -> 返回类型 { 函数体 }            参数和返回类型 支持auto 推导 go  :func(参数) 返回类型 { 函数体 }。             参数和返回类型 需要显式指定。 二、外部变量捕获机制 c++:显式指定捕获哪个变量,显式指定 值捕获[=] 还是引用捕获[&] go  : 自动闭包捕获‌(隐式引用捕获) 三、并发控制 1. 函数调用 c++: 需手动线程管理(std::thread) go  : 直接 go func() 启动协程 2. 数据竞争防护 c++: 依赖外部同步(如互斥锁) go  : 通过

By Ne0inhk
【DeepSeek R1部署至RK3588】RKLLM转换→板端部署→局域网web浏览

【DeepSeek R1部署至RK3588】RKLLM转换→板端部署→局域网web浏览

本文为DeepSeek R1 7B 以qwen为底座的LLM在瑞芯微RK3588 SoC上的完整部署流程,记录从开发板驱动适配烧录开始,到最终的开发板终端访问模型和局域网web访问模型的完整流程,有不足之处希望大家共同讨论。 文章目录 * 一、项目背景介绍 * 二、所需工具介绍 * 1.硬件工具 * 1.X86 PC虚拟机Ubuntu20.04 * 2. 准备NPU驱动为0.9.8的RK3588开发板 * 2.软件工具 * 三、获取.safetensors模型权重 * 四、safetensors转RKLLM * 1.转换环境搭建 * 2.模型转换 * 五、RKLLM模型板端部署及推理 * 六、集成开源gradio工具实现web访问 一、项目背景介绍 先来介绍下项目背景吧,目前有一个空闲的firefly出厂的搭载瑞芯微RK3588 SoC的arm64开发板,样式如图所示: 博主之前主要进行CV领域的模型的RK开发板部署,对于LLM和VLM的接触并不算多,但现在大模型是趋势所向,并且瑞芯微及时的完成了针对各开源

By Ne0inhk