全链路追踪spring-cloud-sleuth-zipkin

浮生半日      2022-04-16     269

关键词:

微服务架构下 多个服务之间相互调用,在解决问题的时候,请求链路的追踪是十分有必要的,鉴于项目中采用的spring cloud架构,所以为了方便使用,便于接入等

项目中采用了spring cloud sleuth + zipkin 。现总结如下:

    spring cloud sleuth + zipkin  总共分为几个角色:

        1、信息上传(上传方式:RABBIT、KAFKA,WEB)

        2、信息存储(mysql、es 等)

        3、信息展示 (web查询界面)

     测试环境中采用了最简单 client端通过http上传到server,server存储到mysql中

一、client端

      加入依赖

      compile('org.springframework.cloud:spring-cloud-starter-zipkin')

      增加配置:     

spring:
  zipkin:
  enabled: true
  base-url: http://zipkin-server
  sender:
    type: web
sleuth:
  sampler:
    percentage: 1.0

         客户端采用type:web方式,上传到 base-url:zipkin-server (zipkin-server 注册到Euraka可以实现多个实例的负载均衡)采样频率 percentage: 1.0 (即100%上传)

二、server端

        1)引入依赖:

compile('io.zipkin.java:zipkin-server')
compile('io.zipkin.java:zipkin-autoconfigure-ui')
compile('io.zipkin.java:zipkin-autoconfigure-storage-mysql')

        2)增加EnableZipkinServer 注解:

1 @EnableEurekaClient
2 @SpringBootApplication
3 @EnableZipkinServer
4 public class ZipkinServerApplication {
5     public static void main(String[] args) {
6         SpringApplication.run(ZipkinServerApplication.class, args);
7     }
8 }

      3)初始化数据库:

CREATE TABLE IF NOT EXISTS zipkin_spans (
  `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  `trace_id` BIGINT NOT NULL,
  `id` BIGINT NOT NULL,
  `name` VARCHAR(255) NOT NULL,
  `parent_id` BIGINT,
  `debug` BIT(1),
  `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
  `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';

CREATE TABLE IF NOT EXISTS zipkin_annotations (
  `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
  `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
  `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
  `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
  `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
  `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
  `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
  `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
  `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
  `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';

CREATE TABLE IF NOT EXISTS zipkin_dependencies (
  `day` DATE NOT NULL,
  `parent` VARCHAR(255) NOT NULL,
  `child` VARCHAR(255) NOT NULL,
  `call_count` BIGINT,
  `error_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

     4)配置数据库 (略)

     5)为了控制访问权限, 采用Spring security最简单的basic认证

Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${visit.username}")
    private String userName;
    @Value("${visit.password}")
    private String password;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/health").permitAll()
                .antMatchers("/zipkin").hasRole("ADMIN")
                .anyRequest().authenticated()
                .and()
                .httpBasic();


    }

     6)将服务发布到k8s集群中,同是采用 NodePord方式 暴露端口出去,不用通过网关就可以访问

  三、信息查询

      1、主页 可以按条件过滤

        

        可以按条件进行过滤~ 请求路径方法 等,这里最重要的是可以网关中加入自定义 tag 例如手机号 用户号等自定义信息 ~  

       2、详细信息服务之间的调用链路

            

 

      

node.js应用全链路追踪技术——[全链路信息获取]

全链路追踪技术的两个核心要素分别是 全链路信息获取 和 全链路信息存储展示。Node.js应用也不例外,这里将分成两篇文章进行介绍;第一篇介绍Node.js应用全链路信息获取, 第二篇介绍Node.js应用全链路信息存储展示。一、N... 查看详情

springcloudsleuth+zipkin实现服务追踪

...。官方文档地址如下:http://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.1.RELEASE/single/spring-cloud-sleuth.html一些概念:Span,Span是 查看详情

前后端多语言跨云部署,全链路追踪到底有多难?

简介: 链路追踪的价值在于“关联”,终端用户、后端应用、云端组件(数据库、消息等)共同构成了链路追踪的轨迹拓扑大图。这张拓扑覆盖的范围越广,链路追踪能够发挥的价值就越大。而全链路追踪就... 查看详情

字节码基于javaagent的全链路监控五-threadlocal链路追踪(代码片段)

1.概述转载:基于JavaAgent的全链路监控五《ThreadLocal链路追踪》Google开源的Dapper链路追踪组件,并在2010年发表了论文《Dapper,aLarge-ScaleDistributedSystemsTracingInfrastructure》,这篇文章是业内实现链路追踪的标杆和理论基础&#x... 查看详情

前后端多语言跨云部署,全链路追踪到底有多难?

简介:完整的全链路追踪可以为业务带来三大核心价值:端到端问题诊断,系统间依赖梳理,自定义标记透传。作者|涯海全链路追踪的价值链路追踪的价值在于“关联”,终端用户、后端应用、云端组件(... 查看详情

可视化全链路日志追踪

...然基于追踪能力完善了日志的串联,但更聚焦于调用链路,也难以直接应用于高效的业务追踪。本文介绍了可视化全链路日志追踪的新方案,它以业务链路为载 查看详情

前后端多语言跨云部署,全链路追踪到底有多难?

简介:链路追踪能覆盖全部关联IT系统,能够完整记录用户行为在系统间调用路径与状态的最佳实践方案。完整的全链路追踪可以为业务带来三大核心价值:端到端问题诊断,系统间依赖梳理,自定义标记透传... 查看详情

spring-cloud-sleuth简单使用

快速开始一、导入依赖<!--链路追踪start--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth</artifactId><version>2.0.0.RELEASE</versi 查看详情

前后端多语言跨云部署,全链路追踪到底有多难?(代码片段)

简介: 链路追踪能覆盖全部关联IT系统,能够完整记录用户行为在系统间调用路径与状态的最佳实践方案。完整的全链路追踪可以为业务带来三大核心价值:端到端问题诊断,系统间依赖梳理,自定义标记透... 查看详情

前后端多语言跨云部署,全链路追踪到底有多难?(代码片段)

简介: 完整的全链路追踪可以为业务带来三大核心价值:端到端问题诊断,系统间依赖梳理,自定义标记透传。作者|涯海全链路追踪的价值链路追踪的价值在于“关联”,终端用户、后端应用、云端组件ÿ... 查看详情

全链路追踪spring-cloud-sleuth-zipkin

...架构下多个服务之间相互调用,在解决问题的时候,请求链路的追踪是十分有必要的,鉴于项目中采用的springcloud架构,所以为了方便使用,便于接入等项目中采用了springcloudsleuth+zipkin。现总结如下:   springcloudsleuth+z... 查看详情

如何用阿里云实行全链路数据追踪

...助畅捷通构建了用户体验感知、业务安全合规、用户业务链路追踪、成本预算的使用场景,实现了对用户、业务、成本、安全等方面的全维度感知,使得运维效率提升了30%。在日常生活中,遇到电脑卡、迟缓等问题&#x... 查看详情

链路追踪之sleuth全生命周期分析(代码片段)

...DDD重构后,所有依赖重新整理,试运行期间发现链路追踪的抓取信息不够丰富,就翻下原来的项目源码,再看下对应的改造下。环境依赖kafkaelasticsearch7.10.0(jdk11)Kibana7.10zipkinserversleuth随着微服务的应用&#x... 查看详情

微服务实践之全链路追踪(sleuth,zipkin)详解-springcloud(2021.0.x)-4(代码片段)

...的注明出处可自由转载出自:shusheng007文章目录前言链路追踪理论SpringCloud的实现方案Zipkin服务引入依赖配置使用总结源码前言本文将介绍微服务架构中关于链路追踪相关组件Sleuth与Zipkin的在SpringCloud入门使用。链路追踪为什... 查看详情

skywalking全链路追踪使用说明

1、背景与需求:        随着业务规模的不断增大,系统的复杂度也越来越高,我们的软件架构也进入了分布式的阶段,服务按照不同的维度进行拆分,那么一次请求可能横跨多个服务模块、项目,依... 查看详情

rocketmqxopentelemetry分布式全链路追踪最佳实践

...如果出现了问题或错误,很难快速定位到根因。分布式全链路追踪技术则可以帮助我们解决这个问题,它能够跟踪和记录请求在系统中的传输过程,并提供详细的性能和日志信息,使得开发人员能够快速诊断和定位问题。对于分... 查看详情

skywalking全链路追踪使用说明

...动或者异常。而传统的日志监控等方式无法很好满足调用链路跟踪,排查问题等需求,这就导致定位/诊断服务异常变得异常复杂。        因此面对复杂的调用链路,我们需要一款全链路追踪工具,帮助我们... 查看详情

dubbo3高级特性「框架与服务」rpc全链路调用追踪参数传递(opentracing)

上一节【RPC调用上下文的介绍】中建立了全链路调用的环境中必需的环境信息,例如应用名、调用的ip、等其他信息属性等。本节主要会建立相关的特性说明通过Dubbo中的Attachment在服务消费方和提供方之间隐式传递参数。使用场... 查看详情