sleuth+zipkin详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/singgel/article/details/89853346

目录

sleuth:

源码:

信息:

原理:

采样率:

附加信息:

zipkin

源码:

信息:

原理:

Log plugins

实现

作用:

性能:

缺点:

参考资料:


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


sleuth:

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

源码:

https://github.com/spring-cloud/spring-cloud-sleuth

信息:

https://spring.io/projects/spring-cloud-sleuth

原理:

调用侧请求中加入额外的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这种传统的方法来实现。

源码:

https://github.com/apache/incubator-zipkin

信息:

https://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:

http://docs.springcloud.cn/user-guide/sleuth/

https://miao1007.github.io/gitbook/eureka/third/sleuth-log-collector.html

https://wu-sheng.github.io/me/articles/metrics-tracing-and-logging

https://yq.aliyun.com/articles/78128?spm=a2c4e.11153940.blogrightarea78144.12.bc0e5f00k57Xv3

http://www.ityouknow.com/springcloud/2018/02/02/spring-cloud-sleuth-zipkin.html

zipkin:

https://zipkin.io/pages/architecture.html

dapper:

https://ai.google/research/pubs/pub36356

elk:

https://www.elastic.co/cn/blog/a-practical-introduction-to-logstash

猜你喜欢

转载自blog.csdn.net/singgel/article/details/89853346