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

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解 * 0. 前言 * 1. 传统机器学习与人工智能 * 2. 人工神经网络基础 * 2.1 人工神经网络组成 * 2.2 神经网络的训练 * 3. 前向传播 * 3.1 计算隐藏层值 * 3.2 执行非线性激活 * 3.3 计算输出层值 * 3.4 计算损失值 * 3.5 实现前向传播 * 4. 反向传播 * 4.1 反向传播流程 * 4.2 梯度下降 * 4.3 实现梯度下降算法 * 4.4 使用链式法则实现反向传播 * 5. 合并前向传播和反向传播 * 6. 神经网络训练过程总结

By Ne0inhk
《发现了一种本地AI服务远程管理难题与一种加密隧道解决方案!》

《发现了一种本地AI服务远程管理难题与一种加密隧道解决方案!》

现在用着开源大语言模型、Stable Diffusion这类AI工具的人越来越多了,不少开发者都选在自己家或者公司的本地硬件上搭AI服务,比如带显卡的台式机、Linux服务器,还有NAS设备都行。这么弄确实能完全自己掌控隐私,数据也全在自己手里,但麻烦事儿也来了:怎么才能安全又方便地从外面的网络远程访问、管理这些本地的AI服务呢? 以前常用的端口映射办法吧,不安全;要搭VPN的话,步骤又太复杂,一般人搞不定。今天咱们就聊聊用P2P虚拟组网技术做的那种简单好用的解决办法。 本地部署AI后,常见的远程访问需求包括: 1. 状态监控:在外查看服务的CPU/GPU占用、日志和运行状态。 2. 交互操作:远程使用WebUI(如ChatGPT-Next-Web、Stable Diffusion WebUI)进行推理或生图。 3. 文件管理:安全地传输生成的文件或更新模型。 直接通过公网IP+端口暴露服务,相当于将内网服务置于公网扫描之下,极易成为攻击目标。而商用远程桌面软件通常延迟较高,且不适合长期后台服务管理。 一种思路:如果构建加密的虚拟局域网呢? 理想的方案是,让远程设

By Ne0inhk

使用 Rufus 制作启动盘安装 Windows 与 Ubuntu 系统全流程教程(图文详解+避坑指南)

适用对象:电脑小白、系统维护人员、装机爱好者 适用系统:Windows 10/11、Ubuntu、Deepin、Kali Linux 等 作者:顶云爱好者 更新时间:2025 年 10 月 文章目录  一、前言:为什么选择 Rufus?  二、准备工作  三、下载与启动 Rufus  四、使用 Rufus 制作启动盘  1. 制作 Windows 安装启动盘 ① 选择镜像文件 ② 选择分区方案 ③ 文件系统 ④ 点击 “开始(Start)”  2. 制作 Ubuntu 启动盘 ① 下载镜像 ② 打开

By Ne0inhk
Flutter 三方库 google_maps_flutter 的鸿蒙化适配指南 - 实现全球化地图能力集成、支持多样化标记与多模式渲染逻辑

Flutter 三方库 google_maps_flutter 的鸿蒙化适配指南 - 实现全球化地图能力集成、支持多样化标记与多模式渲染逻辑

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 google_maps_flutter 的鸿蒙化适配指南 - 实现全球化地图能力集成、支持多样化标记与多模式渲染逻辑 前言 在进行 Flutter for OpenHarmony 的全球化(Global)应用开发时,google_maps_flutter 是集成地理位置服务的首选。虽然在中国大陆市场,高德、百度地图更为常用,但对于需要出海、面向全球鸿蒙用户的开发者来说,适配 Google Maps 至关重要。本文将探讨如何在鸿蒙系统下利用该库的核心能力构建强大的地图应用。 一、原理解析 / 概念介绍 1.1 基础原理 google_maps_flutter 采用了典型的“外置渲染(External Rendering)”模式。

By Ne0inhk