博客
关于我
SpringCloud--09服务链路追踪Sleuth
阅读量:683 次
发布时间:2019-03-17

本文共 3173 字,大约阅读时间需要 10 分钟。

在微服务架构中,链路追踪是必不可少的功能。一个分布式系统通常包含多个服务单元,服务之间通过调用链连接。当发生错误或异常时,追踪这些异常并定位问题变得异常重要。为了实现服务调用链路的追踪,Spring Cloud Sleuth是一个强大的工具,它能够整合Zipkin等链路追踪组件,帮助开发者跟踪服务请求的全生命周期。

Spring Cloud Sleuth与Zipkin集成

Spring Cloud Sleuth提供了对Zipkin客户端的集成,允许开发者轻松实现链路数据的采集与存储。以下是实现Zipkin客户端的步骤:

  • 添加依赖

    在项目的POM文件中添加Spring Cloud Sleuth和Zipkin的依赖:

    org.springframework.cloud
    spring-cloud-starter-zipkin
    2.0.3.RELEASE
  • 配置Zipkin客户端

    在配置文件中(例如application.yml)添加以下配置:

    spring:  sleuth:    sampler:      probability: 1.0  zipkin:    base-url: http://localhost:9411
  • 启动服务

    确保所有服务(如Eureka注册中心、Zipkin服务器、用户服务和网关服务)都已正确启动,并确保各服务之间的通信正常。

  • 使用RabbitMQ传输链路数据

    为了提高链路数据传输的效率和可靠性,可以将Zipkin客户端与RabbitMQ结合使用:

  • 配置RabbitMQ发送器

    在Zipkin客户端的POM文件中添加RabbitMQ依赖:

    org.springframework.cloud
    spring-cloud-stream-binder-rabbit
    1.1.1.RELEASE
  • 修改Zipkin客户端配置

    在配置文件中设置RabbitMQ的发送配置:

    spring:  sleuth:    sampler:      probability: 1.0  zipkin:    sender:      type: rabbit    rabbitmq:      host: localhost      port: 5672      username: guest      password: guest
  • 启动消息队列服务

    确保RabbitMQ服务已启动,并能够接收来自Zipkin客户端的消息。

  • 将链路数据持久化到MySQL

    为了避免链路数据的丢失,可以选择将数据持久化存储到数据库中:

  • 创建数据库表

    使用MySQL创建以下表结构:

    CREATE TABLE zipkin_spans (    trace_id_high BIGINT DEFAULT 0 COMMENT '用于标识128位的trace_id',    trace_id BIGINT NOT NULL,    id BIGINT NOT NULL,    name VARCHAR(255) NOT NULL,    parent_id BIGINT,    debug BIT(1),    start_ts BIGINT COMMENT '记录事件的时间戳',    duration BIGINT COMMENT '记录事件的持续时间') ENGINE=INNODB ROW_FORMAT=COMPRESSED;CREATE TABLE zipkin_annotations (    trace_id_high BIGINT DEFAULT 0,    trace_id BIGINT NOT NULL,    span_id BIGINT NOT NULL,    a_key VARCHAR(255) NOT NULL COMMENT '注解的键',    a_value BLOB COMMENT '注解的值',    a_type INT NOT NULL COMMENT '注解的类型',    a_timestamp BIGINT,    endpoint_ipv4 INT COMMENT '接口的IP地址',    endpoint_ipv6 BINARY(16) COMMENT '接口的IPv6地址',    endpoint_port SMALLINT COMMENT '接口的端口',    endpoint_service_name VARCHAR(255) COMMENT '接口的服务名称') ENGINE=INNODB ROW_FORMAT=COMPRESSED;CREATE TABLE zipkin_dependencies (    day DATE NOT NULL,    parent VARCHAR(255) NOT NULL,    child VARCHAR(255) NOT NULL,    call_count BIGINT) ENGINE=INNODB ROW_FORMAT=COMPRESSED;
  • 配置Zipkin服务器

    修改Zipkin服务器的启动命令,添加MySQL持久化配置:

    java -jar zipkin-server-2.2.0-exec.jar \    --zipkin.collector.rabbitmq.addresses=localhost:5672 \    --zipkin.collector.rabbitmq.username=guest \    --zipkin.collector.rabbitmq.password=guest \    --STORAGE_TYPE=mysql \    --MYSQL_DB=springboot \    --MYSQL_USER=root \    --MYSQL_PASS=****** \    --MYSQL_HOST=localhost \    --MYSQL_TCP_PORT=3306
  • 验证数据存储

    启动服务并发送请求,检查数据库中是否有链路数据存储成功。

  • 集集成Elasticsearch存储链路数据

    在高并发场景下,使用Elasticsearch可以有效存储链路数据,并通过Kibana进行数据可视化:

  • 配置Elasticsearch客户端

    在项目的POM文件中添加Elasticsearch依赖:

    org.elasticsearch.client
    spring-data-elasticsearch
    1.3.2
  • 修改Zipkin客户端配置

    在配置文件中设置Elasticsearch的存储配置:

    spring:  data:    elasticsearch:      cluster-nodes: http://localhost:9300      replication-alias: my-index
  • 启动Elasticsearch服务

    确保Elasticsearch服务和Kibana服务已启动,并导入链路数据进行可视化。

  • 通过以上方法,可以实现链路数据的高效采集、传输和持久化,从而为微服务架构提供强大的调试和监控能力。

    转载地址:http://sghhz.baihongyu.com/

    你可能感兴趣的文章
    第01问:MySQL 一次 insert 刷几次盘?
    查看>>
    libvirtd:内部错误:Failed to apply firewall rule
    查看>>
    优先级队列2
    查看>>
    TiKV 源码解析系列文章(十三)MVCC 数据读取
    查看>>
    1900分图论 : 1183E1 LCA + Kruskal
    查看>>
    (建议收藏)计算机网络:传输层概述、UDP协议与可靠传输协议习题解析与拓展
    查看>>
    Android 开发常用的工具类(更新ing)
    查看>>
    EasyUI的简单介绍
    查看>>
    HTTP 错误 500.21 - Internal Server Error 发布网站遇到这个错误
    查看>>
    初次安装webpack之后,提示安装webpack-cli
    查看>>
    使用FileZilla,FTP登录出现错误:FileZilla状态: 不安全的服务器,不支持 FTP over TLS
    查看>>
    Hbase压力测试
    查看>>
    StreamReader & StreamWriter
    查看>>
    C#中的类、方法和属性
    查看>>
    Python爬虫训练:爬取酷燃网视频数据
    查看>>
    Python数据分析入门(十九):绘制散点图
    查看>>
    Callable中call方法和Runnable中run方法的区别
    查看>>
    Linux yum提示Loaded plugins错误的解决方法
    查看>>
    Netty的体系结构及使用
    查看>>
    xshell解决文本粘贴格式错误
    查看>>