目录
内容是在我球的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
信息:
原理:
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