微服务常用日志追踪方案:Sleuth + Zipkin + ELK

在微服务架构中,一个用户请求往往需要经过多个服务的协同处理。为了有效追踪请求的完整调用链路,需要一套完整的日志追踪方案。Sleuth + Zipkin + ELK 组合提供了完整的解决方案

  • Sleuth:生成和传播追踪ID
  • Zipkin:收集、存储和可视化追踪数据
  • ELK:集中存储和检索业务日志
  • MDC:实现日志与追踪上下文的关联

1.组件介绍

组件一:Spring Cloud Sleuth

自动生成唯一的TraceID和SpanID,通过HTTP头或消息中间件在服务间传播这些ID,与MDC集成,将追踪信息注入日志

yaml 复制代码
spring:
  sleuth:
    sampler:
      probability: 1.0 # 采样率,1.0表示100%采样
    propagation:
      type: B3 # 使用Zipkin的B3传播协议

组件二:Zipkin

收集各服务上报的追踪数据,存储调用链路信息,提供可视化界面展示调用链路和耗时

服务 → 上报数据 → Zipkin Collector → Storage → Zipkin UI

存储选项:开发环境使用内存,正式环境推荐配置为Elasticsearch

yaml 复制代码
spring:
  zipkin:
    base-url: http://zipkin-server:9411
    sender:
      type: web # 使用HTTP方式上报

组件三:ELK Stack (Elasticsearch + Logstash + Kibana)

Elasticsearch用于存储和索引日志数据 ,Logstash用于收集、过滤和转发日志,Kibana用于可视化查询和分析日志。确保日志中包含TraceID,便于通过TraceID关联业务日志和调用链路

2.完整请求链路示例

  • 用户请求到达服务A,生成TraceID: abc123,生成SpanID: def456

  • 服务A调用服务B,携带HTTP头: X-B3-TraceId=abc123, X-B3-ParentSpanId=def456,服务B生成新SpanID: ghi789

  • 日志输出

matlab 复制代码
服务A日志: [abc123,def456,order-111] INFO ... 创建订单开始
服务B日志: [abc123,ghi789,order-111] INFO ... 库存扣减开始
  • 调用链路信息上报Zipkin,业务日志发送到ELK
  • 通过Zipkin发现异常服务,通过TraceID在ELK中查找相关日志,通过业务ID追踪特定业务对象全链路
相关推荐
qq_1777673721 分钟前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
m0_7400437325 分钟前
【无标题】
java·spring boot·spring·spring cloud·微服务
小程故事多_801 小时前
深度搜索Agent架构全解析:从入门到进阶,解锁复杂问题求解密码
人工智能·架构·aigc
●VON2 小时前
React Native for OpenHarmony:项目目录结构与跨平台构建流程详解
javascript·学习·react native·react.js·架构·跨平台·von
Gary董2 小时前
高并发的微服务架构如何设计
微服务·云原生·架构
ujainu3 小时前
Flutter + OpenHarmony 实战:《圆环跳跃》——完整游戏架构与视觉优化
flutter·游戏·架构·openharmony
爬山算法3 小时前
Hibernate(74)如何在CQRS架构中使用Hibernate?
java·架构·hibernate
香芋Yu4 小时前
【大模型教程——第二部分:Transformer架构揭秘】第2章:模型家族谱系:从编码器到解码器 (Model Architectures)
深度学习·架构·transformer
像少年啦飞驰点、5 小时前
零基础入门 Spring Boot:从“Hello World”到可部署微服务的完整学习路径
java·spring boot·微服务·编程入门·后端开发
从此不归路5 小时前
Qt5 进阶【13】桌面 Qt 项目架构设计:从 MVC/MVVM 到模块划分
开发语言·c++·qt·架构·mvc