spring cloud中的zipkin日志统计是由sleuth客户端和zipkin服务器组成。 sleuth收集客端trace,通过mq将trace发送到zipkin服务器。
zipkin 做持久化和查询展示功能。常用kafka+zk集群作为mq将信息由客户端发往服务器,elasticsearch用于trace存储。
存在以下问题:
1.大量trace发往zipkin很容易崩溃,通常不能做全量记录。
2.如果zipkin崩溃或者mq出现问题会导致trace丢失。
解决:
a.不引入mq依赖,使用日志记录调用信息。
@Bean public Reporter<Span> reporter(){ return span -> { logger.info(span.toString()); }; //输出到trace日志文件 } @Bean public Sampler sleuthTraceSampler() { return Sampler.ALWAYS_SAMPLE; } //全量记录
b.使用elk日志方案将日志导入到trace专用索引。
c.zipkin对数据包括收集和查询展示两模块。我正常配置zipkin+es,就ok了。只是没有不使用收集模块。