SpringCloud Sleuth 链路追踪介绍


placeholder image
admin 发布于:2023-01-31 11:03:19
阅读:loading

基础介绍

Spring Cloud Sleuth为Spring Cloud的分布式跟踪解决方案提供API,它集成了OpenZipkin Brave(分布式跟踪工具库)可以根据请求收集时间数据和跟踪接口服务的执行流程,关联和传播跟踪上下文。Spring Cloud Sleuth能够跟踪您的请求和消息,以便您可以将通信与相应的日志条目关联起来,还可以将跟踪信息导出到外部系统以可视化延迟。

说点个人理解的意思:当微服务的接口请求较多的时候,各个微服务模块存在于不同的进程下,通过Log日志的形式将从请求入口开始来启动链路,当各个服务属于不同进程时,开启子链路,各个服务将链路数据推送至Zipkin解析的数据容器中,由Zipkin复杂数据的展示查看。链路追踪的特点是跨服务进程,改写Log组件,增加日志输出的链路信息。

部署Zipkin

Zipkin是一个分布式跟踪系统,它帮助收集解决服务架构中的延迟问题所需的定时数据。功能包括数据的收集和查找。如果日志文件中有跟踪ID,则可以直接跳转到它。否则,您可以根据服务、操作名称、标签和持续时间等属性进行查询。将为您总结一些有趣的数据,例如花费在服务上的时间百分比,以及操作是否失败。应用程序需要被“检测”以向Zipkin报告跟踪数据。这通常意味着配置跟踪程序或检测库。向Zipkin报告数据最流行的方式是通过HTTP或Kafka,尽管还有许多其他选择,如Apache ActiveMQ, gRPC和RabbitMQ。提供给UI的数据存储在内存中,或者持久地存储在受支持的后端,如Apache Cassandra或Elasticsearch或MySQL。

zipkin官网地址“https://zipkin.io/”,可以在“https://github.com/openzipkin/zipkin”页查看该源码项目,下载zipkin-server方式如下:

image.png

下载的最新版本为zipkin-server-2.24.0-exec.jar,该文件是一个可执行jar,可以通过java -jar直接启动服务来体验一下,参考启动脚本和启动结果如下:

image.png

image.png

仔细看应该能看到这是直接在Windows主机上打开运行的,实际我把它放置在Linux的139机器/app/zipkin目录,并重命名“zipkin.jar”,同时将一个简单的启动命令写入sh文件中,启动命令使用MySQL数据库来持久化数据,可以直接方便启动,启动参考脚本如下:

#!/bin/sh

if [ ! -d "./logs" ]; then 
    mkdir logs
fi 

#按天输出
nohup java -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow 
      -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/java_heapdump.hprof -XX:-UseLargePages -Xloggc:./logs/java_gc.log 
      -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation 
      -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -jar zipkin.jar 
      --STORAGE_TYPE=mysql --MYSQL_HOST=192.168.244.1 --MYSQL_TCP_PORT=3306 --MYSQL_USER=root 
      --MYSQL_PASS=123456 --MYSQL_DB=chendd-zipkin >> ./logs/nohup `date +%Y-%m-%d`.out 2>&1 &

项目集成

(1)以Gateway项目为例,首先在pom.xml增加spring-cloud-starter-sleuth、spring-cloud-sleuth-zipkin两个坐标;

(2)在application.yml中增加sleuth和zipkin的集成配置,参考如下:

spring:
  sleuth:
    reactor:
      #在2020.0.0中,已将默认网关反应器检测模式更改为manual,
      #ON_EACH-用跟踪表示形式包装每个Reactor运算符。在大多数情况下,传递跟踪上下文。此模式可能会导致性能急剧下降。
      #ON_LAST-将最后一个Reactor运算符包装在跟踪表示中。在某些情况下传递跟踪上下文,
      #因此访问MDC上下文可能不起作用。此模式可能会导致中等性能下降。
      #MANUAL-以最小侵入性的方式包装每个Reactor,而无需通过跟踪上下文。由用户决定
      # 源码中ON_EACH、ON_LAST均被标记已过期,将在4.0版本中移除
      instrumentation-type: DECORATE_ON_EACH
    sampler:
      probability: 1.0 #采样百分比,100%
  #zipkin
  zipkin:
    base-url: http://192.168.244.139:9411/ #zipkin server地址
    discovery-client-enabled: false #让nacos把它当成普通的url,不作为服务名

(3)日志文件不需要做任何改动,即便是在自定义了日志输出格式,也不需要调整,它会自动在日志格式的日志级别后增加用于追踪记录数据的三段参数,参考运行日志如下:

image.png

(4)使用zipkin控制台查询的页面效果如下:

image.png

其它说明

(1)由于不愿意投入过多的时间来深入掌握Sleuth和Zipkin这块的链路追踪技术,所以这块的技术知识掌握的非常浅薄,比如集群环境如何部署和应用;

(2)正式使用环境应使用性能更高的Kafka消息队列,本例采用的MySQL;

(3)同样是示例,配置文件的抽样比率是100%,实际不需要这么高;

(4)相关项目的配置集成可见源码“https://gitee.com/88911006/chendd-spring-cloud”下的gateway、nacos-client、open feign模块;


 点赞


 发表评论

当前回复:作者

 评论列表


留言区