springcloud--zipkin--rabbitmq

zipkin-server整合springboot,在整合的过程中,发现一直启动都是报错,度娘查了下,原来是zipkin再做版本的升级过程中做了很大的改动,导致引用springboot会有冲突。本人解决了很久依旧没有效果。
后来发现从spring Cloud为F版本开始,已经不需要自己构建Zipkin Server了,只需要下载jar运行即可。

java -jar zipkin-server-2.12.9-exec.jar

springcloud整合sleuth、zipkin进行链路跟踪
sleuth主要功能是在分布式系统中提供追踪解决方案,并且兼容支持了zipkin(提供了链路追踪的可视化功能)
zipkin原理:在服务调用的请求和响应中加入ID,表明上下游请求的关系。
    利用这些信息,可以可视化地分析服务调用链路和服务间的依赖关系。
sleuth是对zipkin的封装,对应Span,Trace等信息的生成、接入http request,以及向Zipkin server发送采集信息等全部自动化完成。
目前主流的链路追踪组件有:google的Dapper,Twitter的zipkin和阿里的Eagleeye(鹰眼)。
一、zipkin服务搭建
不用自己手动搭建直接下载jar进行启动即可

cd ./
java -jar zipkin-server-2.19.2-exec.jar

二、服务搭建,进行模拟链路调用
项目目录结构
cz-spring-cloud-nacos
|—order-service
|—pay-service
|—user-service
项目用的是阿里的nacos作为服务的注册中心,当然也是可以用erueka、zookeeper等,如需要可以自行组装。
引入依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<!-- 依赖链路跟踪 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

关键配置:

zipkin:
    service:
      name: ${spring.application.name}@${spring.cloud.client.ip-address}:${server.port}
    sender:
      type: web
  sleuth:
    sampler:
      probability: 1

配置说明:

  1. zipkin.service.name:服务名称
  2. zipkin.sender.type:
  3. sletuh.sampler.probability:采样的百分比,默认的为0.1,在默认的时候偶尔在zipkin服务员界面中会采集不到数据,需要改为100%采样。
    除了改上面的配置还可以用代码的形式进行更改采样的百分比,代码如下:
//100%的来采集日志,和在配置文件中配置spring.sleuth.sampler.percentage=1是一样的
@Bean
public AlwaysSampler defaultSampler(){
  return new AlwaysSampler();
}

但这样每个请求都会向zipkin server发送http请求,通信效率低,造成网络延迟
  而且所用的追踪信息都在内存中保存,重启zipkin server后信息丢失
  针对以上的问题的解决方法:
    a 采用socket或高效率的通信方式
    b 采用异步方式发送信息数据
    c 在客户端和zipkin之间增加缓存类的中间件,如redis,mq等,即时zipkin server重启过程中,客户端依然可以将数据发送成功
3、启动,访问
http://127.0.0.1:18985/pay/order/do
会看到控制台输出的多了不少信息

2019-12-26 15:11:17.263  INFO [pay-service@192.168.220.1:18985,f98f2250df0a1c78,e16a043df64fde19,false] 20420 --- [io-18985-exec-1] s.c.a.AnnotationConfigApplicationContext : Refreshing SpringClientFactory-user-service: startup date [Thu Dec 26 15:11:17 CST 2019]; parent: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@39a2bb97

主要包含4部分信息:
[pay-service@192.168.220.1:18985,f98f2250df0a1c78,e16a043df64fde19,false]
这一串数据里包含四个部分
appname - 应用程序名称
traceId - 追踪系统中的唯一标识
spanId - 具体操作的唯一标识
exportable - 是否日志要导出到Zipkin,这里是false信息将不会输出到zipkin中
改进:
由于上面改为100%采样会存在一些问题,故要进行相应的改进,采用rabbitmq中间件作为媒介。
一、zipkin服务器

java -jar zipkin-server-2.19.2-exec.jar --RABBIT_ADDRESSES=localhost:5672 --RABBIT_USER=guest --RABBIT_PASSWORD=guest --RABBIT_VIRTUAL_HOST=/

二、客户端,
1、修改依赖,只需要添加rabbitmq的依赖即可,网上有人说要依赖spring-cloud-sleuth-zipkin-stream,这个只在以前的版本是可以,但是在最新版本已经不推荐使用了

<!-- 配置服务链路追踪 -->
 <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency> 
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
</dependency>

2、yml配置,其他项目的配置都是一样的。

spring: 
 rabbitmq: #配置mq消息队列
  host: localhost 
  port: 5672 
  username: guest 
  password: guest
  zipkin:
    service:
      name: ${spring.application.name}@${spring.cloud.client.ip-address}:${server.port}
    sender:
      type: rabbit
  sleuth:
    sampler:
      probability: 1

所需资料下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Spring Cloud 中集成 Log4j2 日志框架,可以通过添加以下依赖项来实现: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j.version}</version> </dependency> ``` 然后在 `application.properties` 文件中添加以下配置: ``` spring.cloud.stream.bindings.output.destination=myTopic spring.sleuth.sampler.probability=1.0 logging.level.org.springframework.cloud.stream=DEBUG logging.level.org.springframework.integration=DEBUG logging.level.org.springframework.amqp=DEBUG spring.cloud.stream.bindings.input.destination=myTopic spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest spring.zipkin.baseUrl=http://localhost:9411 ``` 这里的配置包括了日志的级别以及 Sleuth 和 Zipkin 的配置。最后,可以使用以下代码来测试日志输出: ```java @Slf4j @RestController @RequestMapping("/api") public class DemoController { @GetMapping("/test") public String test() { log.debug("This is a debug message"); log.info("This is an info message"); log.warn("This is a warning message"); log.error("This is an error message"); return "Test"; } } ``` 如果一切顺利,你应该能够在控制台看到输出的日志信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值