文档章节

分布式链路跟踪系统概设

土豆_BIG
 土豆_BIG
发布于 2017/09/12 09:47
字数 538
阅读 65
收藏 4

架构示意图

架构组件选型

logstash->kafka->consumer->hbase

  • 通过AGENT生成调用链trace日志。 
  • 通过logstash采集日志到kafka。 
  • kafka负责提供数据给下游消费。 
  • 消费端解析trace信息,traceID作为rowkey,将信息插入hbase。 

实现思路

  • Trace头部定义
    • Trace-Id(每次请求的唯一标识,在请求的链路中传递)
    • Rpc-Id(调用链内部的唯一ID,还原调用顺序和调用间的嵌套关系,需要考虑的调用关系包括同步、并发、异步、一对多。)
    • Trace-Status(链路请求状态,整个链路传递,解决没被采样的异常跟踪丢失)
    • Trace-Sampled(调用链采样,因为QPS越高,需要生成的调用日志也就越高。因此,为了降低整体的输出数据量。默认全采集)
  • TraceId组成
    • 毫秒时间(时间戳,13)
    • 顺序数(4)
    • IPv4(8)
    • 进程ID(4)
  • RpcId组成
    • 默认顶级为0
    • 所有RpcId,包含所有父级RpcId(0.1.1他的父级为0.1,0.1的父级为0)
  • 系统整合
    • 针对Http
      • 利用Servlet的FIlter
      • 接收请求时,从header中获取Trace-Id、Rpc-Id、Trace-Sampled,没有则创建Trace对象,并放入ThreadLocal中。
      • 响应时,在header中设置Trace-Status,用来标识本次链路状态,解决没被采样的异常跟踪丢失
    • 针对Dubbo
      • 利用Dubbo的Filter机制
      • 客户端发起请求时,创建新的Trace,将Trace-Id、Rpc-Id、Trace-Sampled放入invocation的attachments中,执行调用,响应后打印日志
      • 服务端接收请求时,从invocation的attachments中获取Trace-Id、Rpc-Id、Trace-Sampled,执行调用,响应后打印日志
  • 数据存储HBase
    • rowkey
      • traceId+endpoint(服务端、客户端)+rpcId
    • value
      • traceType(类型:http、dubbo、redis、MQ等)
      • traceName(具体访问的url、访问的接口方法)
      • appName(应用名称)
      • localIp(本机IP)
      • remoteIp(发起远程调用服务的IP)
      • status(trace的状态)
      • size(请求大小)
      • time(耗时)
      • message(信息:默认响应状态)
    • 检索
      • 使用RowPrefixFilter根据rowkey前缀匹配所有记录

© 著作权归作者所有

共有 人打赏支持
土豆_BIG
粉丝 0
博文 5
码字总数 7234
作品 0
朝阳
私信 提问
分布式链路追踪中间件 - SOFATracer

SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的。这些日志可用于故障的快速发现,服务治理等...

匿名
05/31
0
0
各大厂分布式链路跟踪系统架构对比

随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布...

james8888
04/19
0
0
几种分布式调用链监控组件的实践与比较(一)实践

引言:最近在调研与选型分布式调用链监控组件。选了主要的三种APM组件进行了实践与比较。本来打算一篇文章写完的,篇幅太长,打算分两篇。本文主要讲下链路traceing的基本概念和几种APM组件的...

aoho
2017/11/10
0
0
告别日志查询 | 阿里云发布链路追踪服务Tracing Analysis

近日,在杭州云栖大会上,阿里云发布了链路追踪服务Tracing Analysis,成本是自建链路追踪系统的1/5或更少,可为分布式应用的开发者提供完整的调用链路还原、调用请求量统计、链路拓扑、应用...

中间件小哥
09/25
0
0
分布式调用跟踪系统架构设计与实践

0、前言 随着美团点评的业务发展,公司的分布式系统变得越来越复杂,我们亟需一个工具能够梳理内部服务之间的关系,感知上下游服务的形态。比如一次请求的流量从哪个服务而来、最终落到了哪个...

大数据之路
2015/01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
9分钟前
1
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
4
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部