分布式链路跟踪sleuth(zipkin+kafka+elasticsearch)

前沿

sleuth也不是一个新鲜的东西,说白了就是一个APM的一个浓缩版,spring Cloud Sleuth为 spring Cloud提供了分布式跟踪的解决方案,它大量借用了Google Dapper、 Twitter Zipkin和 Apache HTrace的设计

构建了ELK的日志系统和监控系统这两个能够快速的发现系统中的问题,但是由于微服务架构中系统众多,系统之间的交互还比较复杂,在产生了大量的日志之后,可以帮助我们定位问题,但是在紧急情况下难以帮助我们快速,是快速的定位和解决问题,这个就调用链的设计初衷,在微服务中,调用链比较长的时候,如果出现问题,很容易出现踢皮球的情况,这种情况下,打开调用链,一看,谁的就是谁的不说不闹,多好。
市面上比较常见的APM有:pinpoint,Twitter的zipkin,美团的Cat,Google的Dapper,这里值得表扬美团,继续和金服的pk吧,最牛的还是Google,他发表了一篇Dapper就有好多公司去研究,最终形成自己的产品,不由的让我想起他的GFS,bigTable在大数据前期google为大数据所做的贡献,向慷慨的人致敬,懂得分享的人最可爱,嗯,对···进入正题

sleuth

简单说一下调用链的东西TraceID 链路ID 在整个调用链中这个东西是不变的
SpanId 步骤ID 经过一个node就会变
ParentSpanID 很同意理解,这个spanId是从哪个span来的,这个设计很重要的

复杂的东西spring boot已经给我们封装好了
#######sleuth客户端
在需要跟踪的微服务中pom.xml加上


            org.springframework.cloud
            spring-cloud-starter-sleuth
        
        
            org.springframework.cloud
            spring-cloud-sleuth-zipkin
        

在application.yml中添加

spring:
  zipkin:
        base-url: http://sleuth server的ip:端口
  sleuth:
       sampler:
          percentage: 1     ##这个是收集比例,1表示100%shouji ,全部收集
sleuth服务端

pom.xml添加


            io.zipkin.java
            zipkin-autoconfigure-ui
        
        
            io.zipkin.java
            zipkin-server
        

并且在启动类上添加

@EnableZipkinServer

客户端和服务端都启动,进入到zipkin服务端


分布式链路跟踪sleuth(zipkin+kafka+elasticsearch)_第1张图片
image.png

可以根据时间,服务名称去查询,点击可查看调用链详情

zipkin+kafka+ES

因为现在zipkin的调用数据都是存在内存中的,一旦zipkin server重启,则意味着之前的都没有了,在这并发高的,一会就把内存挤爆了,所以最终zipkin的数据是要持久化的,要么mysql,这里采用ES,毕竟在大数据检索面前ES比mysql好很多很多
还有在页面请求量大的时候zipkin和ES直接联通存数据,肯定会阻塞,这里就用kafka来解决这个问题

pom.xml需要引入


            org.springframework.cloud
            spring-cloud-starter-sleuth
        

        
            org.springframework.cloud
            spring-cloud-sleuth-zipkin-stream
        

        
            org.springframework.cloud
            spring-cloud-stream-binder-kafka
            1.3.1.RELEASE
        

application.yml添加

spring:
    cloud:
      stream:
        kafka:
          binder:
            brokers: kafkaIP:9092
            zkNodes: zkIP:2181
zipkin:
  storage:
    type: elasticsearch
    elasticsearch:
      cluster: elasticsearch
      hosts: http://ESIP:9200
      index: zipkin
      index-shards: 5
      index-replicas: 1

再次启动,加入数据,观察ES-head


分布式链路跟踪sleuth(zipkin+kafka+elasticsearch)_第2张图片
ES-head

已经将调用链存进去了,这里要感谢spring 将调用链集成,方便我们应用

望指正,不吝赐教

你可能感兴趣的:(分布式链路跟踪sleuth(zipkin+kafka+elasticsearch))