当前位置: 首页 > backend >正文

Sleuth+Zipkin 服务链路追踪

微服务架构中,为了更好追踪服务之间调用,实现时间分析,性能瓶颈分析,故障排查,因此有必要搭建链路追踪。下面简单介绍下实现的过程。

一.引入依赖

<!-- 链路追踪 zipkin已经集成有sleuth,不需要再单独引入sleuth-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId><version>2.2.1.RELEASE</version>
</dependency>

 如果各个微服务都需要追踪,项目中拥有comon模块,各个微服务都引入common依赖,可以将上面的依赖配置在common模块的maven配置文件中,否则各个微服务都需要引入上面的依赖。

二.在application.properties或application.yml配置sleuth和zipkin

# 配置zipkin进行服务链路追踪
spring.zipkin.base-url=http://192.168.56.10:9411/
spring.zipkin.sender.type=web
# # 关闭服务发现,否则 Spring Cloud 会把 zipkin 的 url 当做服务名称
spring.zipkin.discovery-client-enabled=false
# 设置抽样采集率为100%,默认为 0.1,即10%
spring.zipkin.sender.sampler.probability=1

完成配置,启动项目后,控制台出现类似这样的3个逗号:INFO [gulimall-product,,,]  则表示配置成功,访问项目各个节点服务,打开zipkin,就可以看到调用链路详情了。

如果引入了zipkin启动失败,提示下面的异常enableRedisKeyspaceNotificationsInitializer

则是引入的spring-boot-starter-data-redis和spring-cloud-starter-zipkin不兼容。

ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration: Invocation of init method failed; nested exception is org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException:  io.lettuce.core.tracing.BraveTracing$BraveTracer.nextSpan(BraveTracing.java:259) ~[lettuce-core-5.2.1.RELEASE.jar:5.2.1.RELEASE] at io.lettuce.core.tracing.BraveTracing$BraveTracer.nextSpan(BraveTracing.java:266) ~[lettuce-core-5.2.1.RELEASE.jar:5.2.1.RELEASE] at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:392) ~[lettuce-core-5.2.1.RELEASE.jar:5.2.1.RELEASE] at io.lettuce.core.protocol.CommandHandler.write(CommandHandler.java:353) ~[lettuce-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]

解决办法,将spring-boot-starter-data-redis中的lettuce-core剔除掉,使用jedis来操作redis:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>

zipkin 默认是将数据存储在内存中,在生产环境上如果想实现数据持久化,可考虑将数据存储在mysql数据库,Cassandra,或Elasticsearch 中,考虑链路数据的特殊性或日后数据量庞大,存储在mysql查询缓慢,推荐存储到Elasticsearch 。

(一)Zipkin 数据持久化相关的官方文档地址如下:https://github.com/openzipkin/zipkin#storage-component。

(二)使用 Elasticsearch 作为Zipkin 的存储数据库的官方文档如下: elasticsearch-storage: https://github.com/openzipkin/zipkin/tree/master/zipkin-server#elasticsearch-storage zipkin-storage/elasticsearch https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/elasticsearch

通过 docker 的方式 docker run --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.56.10:9200 openzipkin/zipkin-dependencies

http://www.xdnf.cn/news/553.html

相关文章:

  • 四级英语备考指南
  • 信息量、香农熵、交叉熵、KL散度总结
  • PowerBi中DATEDIFF怎么使用?
  • vue3 中 iframe 多页面切换导致资源刷新的问题解决
  • 从句详细解析
  • 群晖威联通飞牛等nas如何把宿主机硬盘挂接到可道云docker容器中
  • 【Envi遥感图像处理】016:如何下载NOAA AVHRR GIMMS 全球数据集?
  • 结构体详解
  • (10)VTK C++开发示例 --- 点和线之间的距离
  • 【入门】数字之和为13的整数
  • Doris,新一代实时数仓核心基础设施
  • 数据防泄漏:企业信息安全的重要防线
  • Datawhale AI春训营学习
  • PHP框架在大规模分布式系统中的适用性如何?
  • deekseak 本地windows 10 部署步骤
  • ACM ICPC算法基础包括哪几类
  • Withholding Tax(预扣所得税)-前台操作 Part 1
  • System.in 详解
  • 【笔记】网络安全管理
  • 嵌入式单片机开发 - Keil MDK 编译与烧录程序
  • c++中的类有关概念
  • 精益数据分析(6/126):深入理解精益分析的核心要点
  • 五分钟学会如何基本使用JJWT!!!
  • Java虚拟机面试题:垃圾收集(下)
  • 3.基础开发工具
  • CLIP赋能视频分析:时空侧网络调优,行人属性识别效率革命
  • Java—— 常见API介绍 第二期
  • C++/Python实现RGB和HSI相互转换
  • Linux——firewalld防火墙(笔记)
  • 深度学习语音识别