sleuth+zipkin详解

309 阅读3分钟

目录

sleuth:

源码:

信息:

原理:

采样率:

附加信息:

zipkin

源码:

信息:

原理:

Log plugins

实现

作用:

性能:

缺点:

参考资料:


内容是在我球的docs上直接复制过来的,懒得写两份,资源缺少的留言,我发你


sleuth:

spring-cloud-starter-sleuth: 英文名是侦探,它的功能是在项目中自动为日志加入Tag与序列号

源码:

github.com/spring-clou…

信息:

spring.io/projects/sp…

原理:

调用侧请求中加入额外的Span序列号等上下文信息放入Header中(通过注入Feign定制Client实现)

被调用侧通过全局Filter模拟AOP记录执行情况,计算执行情况与耗时,并存入定制的ByteBoundedQueue队列中,然后通过HTTP等将信息异步发送到Zipkin收集器中

Zipkin收集器通过UI显示调用详情

 

其中添加了如下组件

    • TraceFeignClient: 请求端注入的FeignClient,为Request的Header添加SpanID, TraceID等信息
    • TraceFilter: 接收端注入的定制Filter,它将解析Request中的Header,执行业务,计算耗时,最终算出一个完整的JSON格式的Span,通过队列异步发送到收集器ZipKin中
    • ZipKin: 日志收集器,读取JSON格式的SPAN信息,并存储与展示

采样率:

如果使用spring-cloud-sleuth-zipkin或spring-cloud-sleuth-stream,PercentageBasedSampler是默认的(默认值是0.1),你可以使用spring.sleuth.sampler.percentage配置输出

附加信息:

用户可以使用span tags定制关键字,为了限制span数据量,一般一个HTTP请求只会被少数元数据标记,例如status code、host以及URL,用户可以通过配置spring.sleuth.keys.http.headers(一系列头名称)添加request headers。

 

zipkin

来自Twitte的分布式日志收集工具,分为上传端(spring-cloud-starter-zipkin,集成到项目中)与服务端(独立部署,默认将数据存到内存中)

注意: Zipkin仅对RPC通信过程进行记录,注意它与业务代码日志是无关的,如果你希望找到一款LogAppender来分析所有Log4j留下的日志,那么建议还是使用Kakfa+ELK这种传统的方法来实现。

源码:

github.com/apache/incu…

信息:

zipkin.io/

原理:

Zipkin Server主要包括四个模块:
(1)Collector 接收或收集各应用传输的数据
(2)Storage 存储接受或收集过来的数据,当前支持Memory,MySQL,Cassandra,ElasticSearch等,默认存储在内存中。
(3)API(Query) 负责查询Storage中存储的数据,提供简单的JSON API获取数据,主要提供给web UI使用
(4)Web 提供简单的web界面

 

Log plugins

实现

logback指定数据源和数据格式(此处有坑,一般不会直接将日志发送至es,而是保存至本地备份)

<appender name="STASH"
 class="net.logstash.logback.appender.LogstashTcpSocketAppender">
 <destination>127.0.0.1:5000</destination>

 <encoder
 class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
 <providers>
 <mdc /> <!-- MDC variables on the Thread will be written as JSON fields -->
 <context /> <!--Outputs entries from logback's context -->
 <version /> <!-- Logstash json format version, the @version field in the output -->
 <logLevel />
 <loggerName />

 <pattern>
 <pattern>
 {"serviceName": "****-service"}
 </pattern>
 </pattern>

 <threadName />
 <message />
 <logstashMarkers />
 <stackTrace />
 </providers>
 </encoder>
</appender>

 

作用:

统计网络延时:

sr减去cs时间戳便可得到网络延迟(意味着路由端也要接入springcloud)

服务端处理时间:

ss减去sr时间戳便可得到服务端需要的处理请求时间

cs:Client Sent

sr:Server Received

ss:Server Sent

cr:Client Received

性能:

 

缺点:

1.在springcloud中强依赖与spring-cloud-starter-zipkin

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
对于没有pom未引用的,dependencies中无trace

2.zipkin只能统计接口级别的信息。

 

参考资料:

sleuth:

docs.springcloud.cn/user-guide/…

miao1007.github.io/gitbook/eur…

wu-sheng.github.io/me/articles…

yq.aliyun.com/articles/78…

www.ityouknow.com/springcloud…

zipkin:

zipkin.io/pages/archi…

dapper:

ai.google/research/pu…

elk:

www.elastic.co/cn/blog/a-p…