SpringCloud从入门到放弃之链路追踪二(Sleuth+Zipkin+Kafka+Logstash)

1.概述

上文讲述了链路追踪的基础知识以及整合Sleuth+Zipkin+MySQL将链路追踪数据存储到了MySQL,但在实际的生产环境中,一般不会直接存储到MySQL,因为服务数量较多,链路调用较为复杂,会在短时间内产生大量日志,直接存入MySQL会存在性能问题。面对庞大的日志数量存储问题,现在比较成熟的处理方式是存储到数据库(mongoDB、ELK等)或文件中,且要与正在运行的系统环境分离。本文将演示将链路追踪数据利用消息中间件Kafka实现数据稳定输入到Logstash之中。

2.链路数据存储

本文展示的是将链路追踪数据存入到Kafka,进而转存到Logstash之中。主要的架构图如下所示:
在这里插入图片描述
业务服务包括Micro-service1、Micro-service2和Micro-service3,这三个服务配置zipkin的地址以及发送链路追踪数据的方式为Kafka,配置成功且服务启动成功后,若服务内发生调用,则会推送链路追踪数据到Kafka。logstash配置文件中配置了监听指定服务器指定topic的数据(这个topic也就是我们存放链路数据的topic),logstash会获取topic内的日志信息,并按照指定格式过滤,然后推送到Elasticsearch,最后结合Kibana可以对Elasticsearch的链路数据进行可视化展示。
首先需要安装Kafka、Logstash,安装Logstash的同时建议安装Elasticsearch+Kibana,方便搜索查看日志信息。由于本文只做演示,因此安装了单机版的Kafka,安装教程可查看我之前的博客:Kafka从入门到放弃之CentOS中安装并配置Kafka。ELK(Elasticsearch+Logstash+Kibana)的安装可以查看下面的参考文献1,环境版本可根据自己需要进行选择,我这里安装的是6.8.19版本。

注意:Elasticsearch+Logstash+Kibana三个的版本需要一致,否则可能会出现异常。

2.1 配置变更

zipkin本身支持使用Kafka来收集链路追踪数据,因此在上文的环境中,只需修改部分配置文件即可,配置文件变更部分如下:

spring.zipkin.base-url=http://192.168.228.130:9411/
#链路数据发送方式(KafkaRabbitMQWeb、activeMQ)web表示采用http请求发送
spring.zipkin.sender.type=kafka
spring.zipkin.kafka.topic=zipkin
#数据采集样本率(1.0表示所有请求都采集)
spring.sleuth.sampler.probability=1.0
#kafka配置(你Kafka安装配置的地址)
spring.kafka.bootstrap-servers=192.168.228.130:9092
#消息发送失败重试次数
spring.kafka.producer.retries=3

#earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
#latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
#none topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
spring.kafka.consumer.auto-offset-reset=latest

2.1 Kafka

kafka和ELK的单机环境均安装成功之后,先启动Kafka,同时启动我们编写的测试服务,此时会有日志信息存储到Kafka中,可以利用如下指令查看Kafka指定topic下的实时消息:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic zipkin --from-beginning

执行成功之后可以看到下图内容:
在这里插入图片描述

2.2 Logstash

由于logstash需要从kafka中读取数据,因此需要进行配置。在logstash的安装目录下,找到config文件夹,新增配置文件logstash_from_kafka.conf,具体配置内容如下:

input {
  kafka {
    #kafka安装地址和端口
    bootstrap_servers => "192.168.228.130:9092"
    group_id => "zipkin"
    #kafka链路追踪的topic
    topics => ["zipkin"]
    decorate_events => true
    codec => json
  }
}
  filter {
    ruby {
      code => "event.set('timestamp',event.get('@timestamp').time.localtime + 8*60*60)"
    }
    ruby {
      code => "event.set('timestamp',event.get('timestamp'))"
    }
    mutate {
      remove_field => ['timestamp']
    }
  }
output {
  elasticsearch {
    hosts => ["192.168.228.130:9200"]
    index => "kafkalog"
  }
}

上述配置文件的主要作用是从kafka读取topic为zipkin的链路追踪数据,filter中配置是对日志内容进行了一个时间戳转换,转化为亚太地区时间,output中配置了日志输出路径,输出到elasticsearch,index为kafkalog。
logstash的启动命令如下:

nohup ./bin/logstash -f ./config/logstash_from_kafka.conf &

logstash启动成功后如下图所示:
在这里插入图片描述

2.3 Kibana查看数据

利用上述查看实时消息的指令,可以看到链路追踪数据被不断写入Kafka,部分消息截图如下:
在这里插入图片描述
logstash从Kafka中读取数据,在kibana中的显示如下图所示:
在这里插入图片描述

3.小结

1.ELK安装时,版本需要保持一致;
2.在配置链路追踪数据输出到Kafka时,需要将配置Kafka地址及topic等信息,默认topic为zipkin;
3.kibana在关联Logstash时,需要先在management目录下进行index的关联;
4.本文测试代码见附录。

4.参考文献

1.https://www.jianshu.com/p/4304e60353f4
2.https://www.bilibili.com/video/BV1tB4y1A7iA

5.附录

1.https://gitee.com/Marinc/spring-boot-sleuth-zipkin.git

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以帮助开发人员在微服务架构中追踪请求的流程和调用链路。它通过为每个请求生成唯一的跟踪ID和跨服务的调用ID来实现这一目标。这些ID可以用于跟踪请求的流程和调用链路,从而帮助开发人员快速诊断和解决问题。Spring Cloud Sleuth还提供了一些可视化工具,如Zipkin,可以帮助开发人员更好地理解和分析跟踪数据。 ### 回答2: SpringCloud Sleuth是一个基于日志的分布式跟踪方案,它可以用于解决微服务架构下的分布式系统的链路追踪问题。在分布式系统中,一个请求经常会穿越多个服务,从而会形成一条复杂的链路,如果有一台或多台机器对此进行记录,那么将能够轻松地查看和理解一个请求的完整路径。这些信息能够帮助我们更快地定位问题所在,提高系统可靠性和稳定性。 Sleuth使用了Zipkin的架构和数据模型,通过在每个请求的Header中添加Trace Id和Span Id来实现链路追踪。Trace Id表示整个请求链路,Span Id表示每一个服务的一个简单步骤。使用这两个 Id,我们就可以将整个链路追踪下来,使得对请求的监测、记录和分析变得更加容易。 Sleuth结合了Spring Cloud日志管理和Zipkin的功能,能够自动收集各个微服务的请求跟踪信息,并将其发送到Zipkin服务器进行聚合分析,视图展现。通过Sleuth的ChainInvoker,可以实现对所有链路的统一管理。当一条请求跨越多个服务时,Sleuth会为每个服务实例生成唯一的spanId,并将这个spanId沿用到下一个服务实例,从而使得整条链路保留了完整的信息。此外,Sleuth还支持基于日志的采样策略和数据比较高效的存储,保证了高性能的分布式链路追踪Sleuth的主要应用场景是微服务架构下的链路跟踪和性能监控。微服务架构中有大量的服务,服务之间的关系错综复杂,因此链路追踪对于排查问题、优化性能非常重要。Sleuth能够方便地实现链路追踪和监测,并帮助我们快速定位问题所在,提高系统的可靠性和稳定性。 ### 回答3: Spring Cloud Sleuth 链路追踪是 Spring Cloud 微服务架构中的一项重要的功能模块。通过 Sleuth 链路追踪,我们可以跟踪整个分布式系统中的请求链路,从而了解每个操作所花费的时间、调用的服务以及调用顺序。在微服务架构中,服务调用会涉及到多个服务之间的协作,使用 Sleuth 链路追踪可以帮助我们很好地理解系统在内部的调用过程。 Sleuth 链路追踪的原理是在每个服务的请求中添加唯一的追踪 ID,通过这个追踪 ID,Sleuth 可以实现将每个请求相关的服务调用串联起来,形成完整的请求链路。追踪 ID 通常被称为 Trace ID,它作为请求的一部分,从前端发起请求的服务开始一直传递到最后一个服务。 通过 Sleuth 链路追踪,我们可以了解每个调用的服务名和 IP 地址,以及请求的耗时情况,在调试分布式系统时非常实用。此外,Sleuth 还支持将链路追踪信息集成到日志系统中,从而更好地协助开发人员进行故障排查。 Sleuth 链路追踪还提供了 Zipkin 集成,Zipkin 是一个开源的分布式链路追踪系统,可以将链路数据可视化显示,并提供了一些分析工具,帮助开发人员更好地理解系统的调用情况。 总之,Spring Cloud Sleuth 链路追踪是一个非常实用的工具,可以帮助我们更好地理解分布式系统中服务调用的情况,有效地解决微服务架构中的复杂度和故障排查的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值