当前位置: 首页 > news >正文

ELK traceId实现跨服务日志追踪

ELK怎么实现跨服务日志追踪,Trace-Id 具体实现方案及代码_kibana关联其他服务器的日志-CSDN博客

ELK+MDC追踪日志 ---- SpringCloud实现传递_elk的mdc-CSDN博客 

SpringBoot之HandlerInterceptor拦截器的使用 ——(一)-CSDN博客

 

在使用ELK(Elasticsearch, Logstash, Kibana)进行日志管理时,通过traceId实现日志跟踪是一种常见的做法。traceId可以帮助我们在分布式系统中追踪请求的完整链路。通过Spring的HandlerInterceptor,我们可以在请求进入时生成traceId,并将其传递到日志中。

实现思路

  1. 生成traceId:在请求进入时生成一个唯一的traceId,并将其存储在MDC(Mapped Diagnostic Context)中。

  2. 传递traceId:在请求处理过程中,确保traceId能够传递到各个组件和日志中。

  3. 清理traceId:在请求处理完成后,清理MDC中的traceId,避免内存泄漏。

代码实现

1. 创建TraceIdInterceptor

首先,我们需要创建一个HandlerInterceptor实现类,用于在请求进入时生成traceId,并在请求完成后清理traceId

java

复制

import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;@Component
public class TraceIdInterceptor implements HandlerInterceptor {private static final String TRACE_ID = "traceId";@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 生成唯一的traceIdString traceId = UUID.randomUUID().toString();// 将traceId放入MDCMDC.put(TRACE_ID, traceId);return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 请求完成后清理MDC中的traceIdMDC.remove(TRACE_ID);}
}
2. 注册TraceIdInterceptor

接下来,我们需要将TraceIdInterceptor注册到Spring的拦截器链中。

java

复制

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate TraceIdInterceptor traceIdInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(traceIdInterceptor);}
}
3. 配置日志输出traceId

在日志配置文件中,配置日志输出格式,确保traceId能够被打印出来。以logback.xml为例:

xml

复制

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%X{traceId}] %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="STDOUT" /></root>
</configuration>

运行 HTML

在这个配置中,%X{traceId}会从MDC中获取traceId并输出到日志中。

4. 在代码中使用traceId

在业务代码中,你可以通过MDC获取traceId,并将其传递到其他服务或日志中。

java

复制

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {private static final Logger logger = LoggerFactory.getLogger(MyController.class);@GetMapping("/test")public String test() {// 获取traceIdString traceId = MDC.get("traceId");logger.info("Processing request with traceId: {}", traceId);return "Hello, World!";}
}

总结

通过上述步骤,我们实现了一个简单的traceId日志跟踪系统。HandlerInterceptor在请求进入时生成traceId并将其放入MDC,在请求完成后清理MDC。日志配置确保traceId能够被输出到日志中,从而方便我们在ELK中追踪请求的完整链路。

扩展

  • 分布式系统中的traceId传递:在微服务架构中,traceId需要在服务之间传递。可以通过HTTP头、消息队列等方式传递traceId

  • 异步任务中的traceId:在异步任务中,traceId可能会丢失。可以通过自定义线程池或使用TaskDecorator来确保traceId在异步任务中传递。

通过这些扩展,你可以在更复杂的系统中实现全链路的日志跟踪。

 

相关文章:

ELK traceId实现跨服务日志追踪

ELK怎么实现跨服务日志追踪&#xff0c;Trace-Id 具体实现方案及代码_kibana关联其他服务器的日志-CSDN博客 ELKMDC追踪日志 ---- SpringCloud实现传递_elk的mdc-CSDN博客 SpringBoot之HandlerInterceptor拦截器的使用 ——&#xff08;一&#xff09;-CSDN博客 在使用ELK&a…...

【开源项目-爬虫】Firecrawl

看到其他项目引用了这个项目 Firecrawl 用免费额度试了一下&#xff0c;这个项目和之前的 https://r.jina.ai/ 很像&#xff08;类似的还有 https://www.scrapingbee.com/&#xff1f;&#xff09;&#xff0c;将爬取到的网页转换为 markdown 格式&#xff0c;这样大语言模型用…...

波特率、比特率、传信率、传码率......

去年搞过一段时间的无线通信&#xff0c;当时我脑子里真的是一团乱麻&#xff0c;本身咱也不是学通信的&#xff0c;咱是学机械出身的&#xff0c;后面又搞电&#xff0c;反正对于通信这一块就不是很懂&#xff0c;后面也慢慢搞出来了一点小东西&#xff0c;但是对于一些细节还…...

用户模块——redis工具类

1. Redis工具类与基础配置 1.1 什么是Redis&#xff0c;为什么使用它&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对存储数据库&#xff0c;通常用于缓存数据、存储会话信息等场景。它的主要优点是速度快&#xff0c;支持多种数…...

Synology 部署的 WordPress 無法升級至最新版本時,可以透過以下改良版指南進行排查和解決。

當 Synology 部署的 WordPress 無法升級至最新版本時&#xff0c;可以透過以下改良版指南進行排查和解決。我對內容進行了補充和重新組織&#xff0c;希望能幫助你更高效地處理這類問題&#xff1a; 權限相關問題處理 檢查文件和目錄權限&#xff1a; 確保 WordPress 安裝目錄…...

012-Benchmark

Benchmark 以下是一篇关于Google Benchmark库的全面介绍及使用指南&#xff0c;包含完整C代码示例和核心功能覆盖&#xff1a; Google Benchmark&#xff1a;C 性能基准测试指南 一、库简介 Google Benchmark 是一个专为 C 设计的微基准测试库&#xff0c;用于精确测量代码片…...

百某田网任务脚本

自动化操作百田游戏的任务脚本,特别是用于完成每日任务和积分兑换的功能。 主要功能 任务管理: 脚本通过定时任务查询并执行每天的任务,自动完成任务并兑换积分。 每个任务通过调用do_list()和do_task()函数来查询和完成。 多账号支持: 支持多个账号的登录和管理,账号信息…...

使用纯CSS 实现 侧边栏 拖拽效果

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、效果实现原理二、代码演示三.简单解释下样式四 完整的DEMO总结 前言 有不少需求是要拖动改变侧边栏宽高的&#xff0c;以下就是在不适用js ,只使用css 的情…...

c语言笔记 函数入门

c语言的函数就是用来实现某种功能的&#xff0c;如果说我们的程序代码都写在main函数中&#xff0c;这样会显得很难读懂&#xff0c;而且代码太长过于冗余&#xff0c;显得没有质量。所以我们可以把一些功能用分函数的方法实现功能独立分开&#xff0c;实现c程序的工整还有方便…...

运维新手入门——线缆的使用(Beginner‘s Guide to Operations and Maintenance - Cable Usage)

运维新手入门——线缆的使用 近期不断的有朋友问到线缆的传输距离&#xff0c;我们每天都在与线缆打交道&#xff0c;清楚了解线缆的使用才能在项目中得心应手&#xff0c;我们之前有提到过。 本期我们一起再来总结下常用的线缆传输距离。 01&#xff09; 网线&#xff1a;超…...

JS—闭包:3分钟从入门到放弃

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–基础定义三–闭包的运行机制四–闭包实战应用场景五–内存泄漏预防指南六–最佳实践总结 二. 基础定义 闭包&#xff1a;能够访问外部函数作用域的函数&#xff0c;以及其词法环境的组合。举个老生常谈栗…...

python pandas模块

python pandas模块 终于也到介绍pandas的时候了&#xff0c;python中用于处理data的一个lib 从wiki中找到的关于pandas的介绍&#xff0c;如下&#xff0c; Original author(s) Wes McKinney Developer(s) Community Initial release 11 January 2008; 17 years ago [citatio…...

系统部署【信创名录】及其查询地址

一、信创类型 &#xff08;一&#xff09;服务器&#xff1a; 1.华为云 2.腾讯云 3.阿里云 &#xff08;二&#xff09;中央处理器&#xff08;CPU&#xff09;&#xff1a; 1.海思&#xff0c;鲲鹏920服务器 &#xff08;三&#xff09;中间件 1.人大金仓 &#xff0…...

docker-compose部署MongoDB分片集群

前言 MongoDB 使用 keyFile 进行 节点间身份验证,我们需要先创建一个 keyFile 并确保所有副本集的节点使用相同的 keyFile。 openssl rand -base64 756 > mongo-keyfile chmod 400 mongo-keyfiledocker-compose部署分片集群 无密码方式 # docker-compose-mongodb.yml s…...

博奥龙Nanoantibody系列IP专用抗体

货号名称BDAA0260 HRP-Nanoantibody anti Mouse for IP BDAA0261 AbBox Fluor 680-Nanoantibody anti Mouse for IP BDAA0262 AbBox Fluor 800-Nanoantibody anti Mouse for IP ——无轻/重链干扰&#xff0c;更高亲和力和特异性 01Nanoantibody系列抗体 是利用噬菌体展示纳…...

CTFshow 【WEB入门】信息搜集 【VIP限免】 web1-web17

CTFshow 【 WEB入门】、【VIP限免】 web1 ----源码泄露 首先第一步&#xff0c;看源代码 web2----前台JS绕过 简单点击查看不了源代码&#xff0c;可以强制查看 比如 Ctrl Shift ICtrl U或者在url前加一个view-source: view-source:http://79999ca1-7403-46da-b25b-7ba9…...

css 知识点整理

1.css 层叠样式表 中的 inherit、initial、unset 关键字适用属性类型行为逻辑典型场景inherit所有属性强制继承父级值统一子元素样式initial所有属性重置为规范初始值清除自定义或继承样式unset所有属性自动判断继承或重置简化全局样式重置或覆盖 2. sass 常用语法 2.1、变量…...

02.Kubernetes 集群部署

Kubernetes 集群部署 Kubernetes 相关端口 1. Kubernetes 集群组件运行模式 独立组件模式 除 Add-ons 以外&#xff0c;各关键组件以二进制方式部署于节点上&#xff0c;并运行于守护进程&#xff1b;各 Add-ons 以 Pod 形式运行 静态 Pod 模式 控制平面各组件以静态 Pod …...

支持向量机(SVM)原理与应用

背景 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种经典的监督学习算法&#xff0c;广泛应用于分类和回归问题。SVM以其强大的数学基础和优异的性能在机器学习领域占据了重要地位。本文将详细介绍SVM的原理、核函数的作用以及如何在Python中使用SVM解决…...

【文献阅读】SPRec:用自我博弈打破大语言模型推荐的“同质化”困境

&#x1f4dc;研究背景 在如今的信息洪流中&#xff0c;推荐系统已经成为了我们生活中的“贴心小助手”&#xff0c;无论是看电影、听音乐还是购物&#xff0c;推荐系统都在努力为我们提供个性化的内容。但这些看似贴心的推荐背后&#xff0c;其实隐藏着一个严重的问题——同质…...

【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?

查看 WPS 的输入静态地理数据方法总结 方法 1:使用 gdal_translate 将二进制数据转换为 GeoTIFFgdal_translate 工具概述使用 gdal_translate 将二进制数据转换为 GeoTIFF方法 2:使用 ncdump 查看 geo_em.dXX.nc方法 3:使用 Python xarray + matplotlib 可视化 geo_em.dXX.n…...

介绍如何使用RDDM(残差噪声双扩散模型)进行知识蒸馏

下面为你详细介绍如何使用RDDM&#xff08;残差噪声双扩散模型&#xff09;进行知识蒸馏&#xff0c;从而实现学生RDDM模型的一步去噪。这里假定你已经有了RDDM模型&#xff0c;并且使用PyTorch深度学习框架。 整体思路 数据准备&#xff1a;加载训练数据并进行必要的预处理。…...

【lf中的git实战】

1)开发分支 develop 2)各种功能分支 author/feature_func 3)release分支 4)合并author/feature_func到develop author/feature_func 到 develop时: cd develop git merge --squash author/feature_func 5)develop合并到author/feature_func时: cd author/feature_func g…...

Java实现Consul/Nacos根据GPU型号、显存余量执行负载均衡

Java实现Consul/Nacos根据GPU型号、显存余量执行负载均衡 步骤一&#xff1a;服务端获取GPU元数据 1. 添加依赖 在pom.xml中引入Apache Commons Exec用于执行命令&#xff1a; <dependency><groupId>org.apache.commons</groupId><artifactId>comm…...

编译支持 RKmpp 和 RGA 的 ffmpeg 源码

一、前言 RK3588 支持VPU硬件解码&#xff0c;需要rkmpp进行调用&#xff1b;支持2D图像加速&#xff0c;需要 RGA 进行调用。 这两个库均能通过 ffmpeg-rockchip 进行间接调用&#xff0c;编译时需要开启对应的功能。 二、依赖安装 编译ffmpeg前需要编译 rkmpp 和 RGA&#xf…...

布隆过滤器(Bloom Filter)

布隆过滤器是一种概率型数据结构&#xff0c;用于快速判断一个元素是否可能在集合中存在。它的核心特点是&#xff1a; 节省空间&#xff1a;相比哈希表&#xff0c;布隆过滤器占用的存储空间非常小。高效查询&#xff1a;查询时间复杂度为 (O(k))&#xff0c;其中 (k) 是哈希…...

2025-03-10 学习记录--C/C++-C语言 易错点 大总结

C语言 易错点 大总结 一、strlen(strs) 使用错误 ⭐️ 若strs 是一个指针数组&#xff08;const char* strs[]&#xff09;&#xff0c;则不可用strlen(strs) 计算 strs 的长度&#xff0c;因为 strlen 是用于计算 字符串 的长度&#xff0c;而不是数组的长度。 解决方法 &…...

康谋应用 | 基于多传感器融合的海洋数据采集系统

在海洋监测领域&#xff0c;基于无人艇能够实现高效、实时、自动化的海洋数据采集&#xff0c;从而为海洋环境保护、资源开发等提供有力支持。其中&#xff0c;无人艇的控制算法训练往往需要大量高质量的数据支持。然而&#xff0c;海洋数据采集也面临数据噪声和误差、数据融合…...

SpringMVC (二)请求处理

目录 章节简介 一 请求处理&#xff08;初级&#xff09; eg:请求头 二 请求处理&#xff08;进阶&#xff09; eg:请求体 三 获取请求头 四 获取Cookie 五 级联封装 六 使用RequestBoby封装JSON对象 七 文件的上传 八 获取整个请求 HttpEntity 九 原生请求 Spring…...

数据结构——单链表list

前言&#xff1a;大家好&#x1f60d;&#xff0c;本文主要介绍数据结构——单链表 目录 一、单链表 二、使用步骤 1.结构体定义 2.初始化 3.插入 3.1 头插 3.2 尾插 3.3 按位置插 四.删除 4.1头删 4.2 尾删 4.3 按位置删 4.4按值删 五 统计有效值个数 六 销毁…...

课程《Deep Learning Specialization》

在coursera上&#xff0c;Deep Learning Specialization 课程内容如下图所示&#xff1a; Week2 assignment, Logistic Regression....

低版本 Linux 系统通过二进制方式升级部署高版本 Docker

​ 一、背景&#xff1a; 在一些 Linux 系统中&#xff0c;由于系统自带的软件源版本较低&#xff0c;或者因网络、权限等限制无法直接通过源文件来升级到最新版本的 Docker。这种情况下&#xff0c;采用二进制方式升级部署高版本 Docker 就成为一种有效的解决方案。下面将详…...

线索二叉树构造及遍历算法

线索二叉树构造以及遍历算法 线索二叉树&#xff08;中序遍历版&#xff09;构造线索二叉树构造双向线索链表遍历中序线索二叉树 线索二叉树&#xff08;中序遍历版&#xff09; 中序遍历找到对应结点的前驱&#xff08;土方法&#xff09; #mermaid-svg-eunGO5d2GhjLxCn5 {fo…...

3. 自定义类型****

目录 1. 内存对齐&#xff08;必考&#xff09; 如何计算&#xff1f; 为什么要内存对齐&#xff1f; 2. 联合 2.1 联合的定义 2.2 联合的特点 1. 内存对齐&#xff08;必考&#xff09; 结构体内存对齐是一个特别热门的考点。 如何计算&#xff1f; 第一个成员在与结构…...

Redis Sentinel (哨兵模式)深度解析:构建高可用分布式缓存系统的核心机制

一、传统主从复制的痛点 在分布式系统架构中&#xff0c;Redis 作为高性能缓存和数据存储解决方案&#xff0c;其可用性直接关系到整个系统的稳定性。传统的主从复制架构虽然实现了数据冗余&#xff0c;但在面临节点故障时仍存在明显缺陷&#xff1a; ​手动故障转移&#xf…...

deepseek本地部署

deepseek本地部署 哈喽,兄弟们!大家可以想象一下,如果有一个超级聪明的人机大脑,能帮你解答任何问题,从复杂的数学难题到编程代码,再到那些让你头疼的写作任务,它都能轻松搞定。这不是科幻电影里的场景,而是DeepSeek带来的现实奇迹!DeepSeek,这个名字听起来就充满了…...

责任链模式的C++实现示例

核心思想 责任链模式是一种行为设计模式&#xff0c;允许多个对象都有机会处理请求&#xff0c;从而避免请求的发送者与接收者之间的耦合。请求沿着处理链传递&#xff0c;直到某个对象处理它为止。 解决的问题 ​解耦请求发送者与处理者&#xff1a;请求的发送者无需知道具…...

【蓝桥杯python研究生组备赛】003 贪心

题目1 股票买卖 给定一个长度为 N 的数组&#xff0c;数组中的第 i 个数字表示一个给定股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。 注意&#xff1a;你不能同时参与多笔交易&…...

Banana Pi 与瑞萨电子携手共同推动开源创新:BPI-AI2N

2025年3月11日&#xff0c; Banana Pi 开源硬件平台很高兴宣布&#xff0c;与全球知名半导体解决方案供应商瑞萨电子&#xff08;Renesas Electronics&#xff09;正式达成技术合作关系。此次合作标志着双方将在开源技术、嵌入式系统和物联网等领域展开深度合作&#xff0c;为全…...

【算法工具】HDL: 基于摘要统计数据的高维连锁不平衡分析软件

## 前言 在基因组研究中&#xff0c;连锁不平衡(Linkage Disequilibrium, LD)分析是理解遗传变异之间关联的关键步骤。然而&#xff0c;当面对高维数据时&#xff0c;传统分析方法往往面临巨大计算挑战。今天为大家介绍一款强大的工具——HDL (High-Dimensional Linkage diseq…...

虚拟展览馆小程序:数字艺术与文化展示的新形式探索

虚拟展览馆小程序:数字艺术与文化展示的新形式探索 一、传统展览的痛点:物理空间的局限与数字化的必然 在传统的艺术与文化展览中,观众往往需要跨越地理距离、排队数小时才能进入展馆,而许多珍贵展品因保护需求无法长期展出。数据显示,全球90%以上的博物馆藏品常年沉睡于…...

docker 搭建alpine下nginx1.26/mysql8.0/php7.4环境

docker 搭建alpine下nginx1.26/mysql8.0/php7.4环境 docker-compose.yml services:mysql-8.0:container_name: mysql-8.0image: mysql:8.0restart: always#ports:#- "3306:3306"volumes:- ./etc/mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro- ./var/log…...

java项目之基于ssm的在线学习系统(源码+文档)

项目简介 在线学习系统实现了以下功能&#xff1a; 该系统可以实现论坛管理&#xff0c;通知信息管理&#xff0c;学生管理&#xff0c;回答管理&#xff0c;教师管理&#xff0c;教案管理&#xff0c;公告信息管理&#xff0c;作业管理等功能。 &#x1f495;&#x1f495;作…...

macOS 安装配置 iTerm2 记录

都说 macOS 里替换终端最好的就是 iTerm2 &#xff0c;这玩意儿还是开源的&#xff0c;所以就也根风学习一下&#xff0c;但全是英文的挺麻烦&#xff0c;所以这里记录一下自己的设置&#xff0c;以最简单的安装及设置为主&#xff0c;想要更酷炫、更好看的还请自己百度吧&…...

矩阵分析-浅要理解(深度学习方向)

梯度分析与最优化 在深度学习的任务中&#xff0c;我们所期望的是训练一个神经网络&#xff0c;使得预测结果与真实标签之间的误差最小化&#xff0c;这可以近似看作是一个提供梯度下降等优化找到全局最优解的凸优化问题。 奇异值分解 在信息工程领域&#xff0c;对数据处理的…...

Odoo 18 中的自动字段和预留字段

Odoo 18 中的自动字段和预留字段 作为一个开源平台&#xff0c;Odoo 的价值在于其使用和开发的灵活性、可扩展性和经济性。虽然 Odoo 本身主要用 Python 和 JavaScript 编写&#xff0c;但其作为开源 ERP 系统的价值超越了特定编程语言的范畴&#xff0c;为各行各业的企业提供了…...

【操作系统安全】任务1:操作系统部署

目录 一、VMware Workstation Pro 17 部署 二、VMware Workstation 联网方式 三、VMware 虚拟机安装流程 四、操作系统介绍 五、Kali 操作系统安装 六、Windows 系统安装 七、Windows 系统网络配置 八、Linux 网络配置 CSDN 原创主页&#xff1a;不羁https://blog.csd…...

Linux:自动化构建-make/Makefile

1.背景 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重新编译&#xff0c;甚至于进行更复杂的功能操作…...

maven wrapper的使用

写在前面 考虑这样的场景&#xff0c;张三创建了一个maven项目使用了3.9版本&#xff0c;当李四下载下来去开发配置的却是3.6版本&#xff0c;此时李四就不得不再去配置一个3.9版本的maven&#xff0c;为了解决这个问题&#xff0c;maven引入了maven wrapper的机制&#xff08…...

DB-GPT-0.7版本win11安装,最新版本,安装方式变更了

之前两天折腾要死&#xff0c;只因为安装了旧版本问题太多&#xff0c;现在安装最新版本 快速开始_V0.7.0 语雀 DB-GPT 0.7.0 部署教程 - yyhhyys blog DB-GPT 0.7.0 与 DeepSeek 集成使用指南 - yyhhyys blog 首先代码结构换了&#xff0c;python包管理工作也换了&#xf…...