Zipkin服务追踪

  • Zipkin
  • Brave
Zipkin
  • 开源的分布式实时数据追踪系统 distributed tracking system,基于 google dapper 系统的论文设计而来,由twitter开发开源
  • 主要功能 聚集各个异构系统的实时监控数据,追踪微服务架构下的系统延时问题
  • zipkin以trace结构表示对一次请求的追踪,每个trace分为许多有依赖关系的span(处理请求过程中的子服务)
  • 由四个模块组成
  1. 收集器 – 搜集各系统报告的追踪数据
  2. 数据存储 --可以放在内存中 开启后默认Cassandra,支持mysql,elasticsearch
  3. 查询 --向其他服务提供数据查询的能力
  4. Web界面 UI 默认图形化的能力
  • 安装环境和集成包
修改本机环境 jdk

JAVA_HOME
D:\Program Files\Java\jdk1.7.0_75
D:\Program Files\Java\jdk1.8.0_40

JRE_HOME
D:\Program Files\Java\jre7
D:\Program Files\Java\jdk1.8.0_40\jre


将集成包安装到mvn本地厂库

mvn install:install-file -Dfile=brave-dubbo-1.0.0-SNAPSHOT.jar  -DgroupId=io.zipkin.brave  -DartifactId=brave-dubbo -Dversion=1.0.0-SN
APSHOT -Dpackaging=jar

  • 使用zipkin
java -jar  zipkin-server-2.10.4-exec.jar
  • 指定使用elasticsearch作为数据存储
java -jar zipkin-server-2.10.4-exec.jar --STORAGE_TYPE=elasticsearch --DES_HOSTS=http://localhost:9200 > 1.log &

elasticsearch 中默认索引名 zipkin:span-yyyy-mm-dd
Brave 3.X版本 -----Zipkin for java
  • zipkin 提供用来装备java程序的类库

  • 提供 面向 Standard Servlet,Spring MVC ,Http Client,JAX RS,Jersey,Resteasy和mysql等接口的装备能力
    (装备—想zipkin报告数据 ),能够让基于以上框架的应用支持zipkin,Brave也提供简单接口方便扩展和定制。

  • 使用Brave 3.X版本

Brave.Builder builder = new Brave.Builder("serviceName");

Brave.brave = builder.build();

serviceName 为服务名

++如上监控数据以日志形式 打印的到控制台++

HttpSpanCollector 负责将数据发送给zipkin服务端
Brave.Builder builder = new Brave.Builder("serviceName");
builder.spanCollector(HttpSpanCollector.create(this.zipkinHost, new EmptySpanCollectorMetricsHandler())).traceSampler(Sampler.create(rate)).build();
Brave.brave = builder.build();
  • Brave 与 Spring 集成
网上已有一些集成好的,采用 BraveFactoryBean 方式实现单例模式

使用的时候 xml 如下配置
<bean id="brave" class="com.github.kristofa.brave.dubbo.BraveFactoryBean" p:serviceName="truceProvider" p:zipkinHost="http://localhost:9411/" p:rate="1.0" />

  • 原理
和Dubbo服务请求透传ID的原理是一样的,都是通过Dubbo 
扩展的 filter 内往RpcContext里放traceId SpanID等实现。
RpcContext.getContext().setAttachment

brave 完成了 透传ID和发送数据到zipkin服务端 的功能

[外链图片转存失败(img-HGDfny5g-1562924173538)(http://ox0rewbep.bkt.clouddn.com/blog/180808/0I70IjII1f.png?imageslim)]

[外链图片转存失败(img-gDbOqLU7-1562924173540)(http://ox0rewbep.bkt.clouddn.com/blog/180808/halh5cEG6J.png?imageslim)]

[外链图片转存失败(img-8DtntBWS-1562924173541)(http://ox0rewbep.bkt.clouddn.com/blog/180808/2GE7dbg0hI.png?imageslim)]

Brave 5.2 版本 -----Zipkin for java
Brave 模块brave-instrumentation-dubbo-rpc

Dubbo rpc 调用追踪原理


   Client Span                                                Server Span
┌──────────────────┐                                       ┌──────────────────┐
│                  │                                       │                  │
│   TraceContext   │           Http Request Headers        │   TraceContext   │
│ ┌──────────────┐ │          ┌───────────────────┐        │ ┌──────────────┐ │
│ │ TraceId      │ │          │ X─B3─TraceId      │        │ │ TraceId      │ │
│ │              │ │          │                   │        │ │              │ │
│ │ ParentSpanId │ │ Extract  │ X─B3─ParentSpanId │ Inject │ │ ParentSpanId │ │
│ │              ├─┼─────────>│                   ├────────┼>│              │ │
│ │ SpanId       │ │          │ X─B3─SpanId       │        │ │ SpanId       │ │
│ │              │ │          │                   │        │ │              │ │
│ │ Sampled      │ │          │ X─B3─Sampled      │        │ │ Sampled      │ │
│ └──────────────┘ │          └───────────────────┘        │ └──────────────┘ │
│                  │                                       │                  │
└──────────────────┘                                       └──────────────────┘

TracingFilter.java 详解

属性:tracer extractor injector

功能:如上图

伪代码
如果是 client端
    如果tracer内没有父span
        创建一个新span
    有
        创建一个子span
如果是 server端
    rpc调用信息 是否有追踪信息(TraceContext)
        有则 放入 span中,放入Tracer中
         
        没有 则Tracer 创建新的追踪信息
    
         
                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值