首页 > 其他分享 >SpringCloud-ZipKin搭建保姆级教程

SpringCloud-ZipKin搭建保姆级教程

时间:2023-09-22 22:23:27浏览次数:41  
标签:COMMENT 教程 quot SpringCloud zipkin ALTER ZipKin TABLE id

服务链路追踪

一、服务追踪说明

微服务架构是通过业务来划分服务的,使⽤REST调⽤。对外暴露的⼀个接⼝,可能需要 很多个服务协同才能完成这个接⼝功能,如果链路上任何⼀个服务出现问题或者⽹络超 时,都会形成导致接⼝调⽤失败。

随着业务的不断扩张,服务之间互相调⽤会越来越复杂,它们之间的调⽤关系也许如下:

随着服务的越来越多,对调⽤链的分析会越来越复杂。

二、Zipkin

1、ZipKin是⼀个开放源代码的分布式跟踪系统,由Twitter公司开源,它致⼒于收集服务的 定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。它 的理论模型来⾃于 Google Dapper 论⽂。 2、每个服务向 ZipKin 报告计时数据,ZipKin 会根据调⽤关系通过 ZipKin UI ⽣成依赖关系 图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过⼀个 Web 前端轻松的收 集和分析数据,例如⽤户每次请求服务的处理时间等,可⽅便的监测系统中存在的瓶 颈

三、搭建zipkin服务器

1、创建SpringBoot项⽬(版本2.1.x)

2、添加依赖

<dependency>
   <groupId>io.zipkin.java</groupId>
   <artifactId>zipkin-server</artifactId>
   <version>2.11.10</version>
</dependency>
<!--zipkin界⾯-->
<dependency>
   <groupId>io.zipkin.java</groupId>
   <artifactId>zipkin-autoconfigure-ui</artifactId>
   <version>2.11.10</version>
</dependency>

3、在启动类添加 @EnableZipkinServer 注解

@SpringBootApplication
@EnableZipkinServer
public class ZipkinApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZipkinApplication.class, args);
    }
}

4、配置yml

spring:
  application:
    name: zipkin
server:
  port: 9411
management:
  endpoints.web.exposure.include: '*'
  metrics.web.server.auto-time-requests: false

四、服务中Sleuth配置

1、在服务应⽤中添加Sleuth依赖

<!-- spring-cloud-sleuth-zipkin -->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-sleuth-zipkin</artifactId>
   <version>2.0.2.RELEASE</version>
</dependency>

2、在服务应⽤中配置yml

spring:
  application:
    name: goods-provider
  zipkin:
    enabled: true
    base-url: 'http://localhost:9411'
  sleuth:
    sampler:
      probability: 0.1

五、zipkin服务数据存储

1、创建数据库数据表

CREATE TABLE IF NOT EXISTS zipkin_spans (
  `trace_id` BIGINT NOT NULL, 
  `id` BIGINT NOT NULL, 
  `name` VARCHAR(255) NOT NULL, 
  `parent_id` BIGINT, 
  `debug` BIT(1), 
  `start_ts` BIGINT COMMENT & quot; Span.timestamp(): epoch micros used for endTs query 
  and to implement TTL & quot;, 
  `duration` BIGINT COMMENT & quot; Span.duration(): micros used for minDuration 
  and maxDuration query & quot;
) ENGINE = InnoDB ROW_FORMAT = COMPRESSED; 
ALTER TABLE 
  zipkin_spans 
ADD 
  UNIQUE KEY(`trace_id`, `id`) COMMENT & quot; ignore insert on duplicate & quot;; 
ALTER TABLE 
  zipkin_spans 
ADD 
  INDEX(`trace_id`, `id`) COMMENT & quot; for joining with zipkin_annotations & quot;; 
ALTER TABLE 
  zipkin_spans 
ADD 
  INDEX(`trace_id`) COMMENT & quot; for getTracesByIds & quot;; 
ALTER TABLE 
  zipkin_spans 
ADD 
  INDEX(`name`) COMMENT & quot; for getTraces 
  and getSpanNames & quot;; 
ALTER TABLE 
  zipkin_spans 
ADD 
  INDEX(`start_ts`) COMMENT & quot; for getTraces ordering 
  and range & quot;; CREATE TABLE IF NOT EXISTS zipkin_annotations (
    `trace_id` BIGINT NOT NULL COMMENT & quot; coincides with zipkin_spans.trace_id & quot;, 
    `span_id` BIGINT NOT NULL COMMENT & quot; coincides with zipkin_spans.id & quot;, 
    `a_key` VARCHAR(255) NOT NULL COMMENT & quot; BinaryAnnotation.key 
    or Annotation.value if type == -1 & quot;, 
    `a_value` BLOB COMMENT & quot; BinaryAnnotation.value(), 
    which must be smaller than 64KB & quot;, 
    `a_type` INT NOT NULL COMMENT & quot; BinaryAnnotation.type() 
    or -1 if Annotation & quot;, 
    `a_timestamp` BIGINT COMMENT & quot; Used to implement TTL; Annotation.timestamp 
    or zipkin_spans.timestamp & quot;, 
    `endpoint_ipv4` INT COMMENT & quot; Null when Binary / Annotation.endpoint is null & quot;, 
    `endpoint_ipv6` BINARY(16) COMMENT & quot; Null when Binary / Annotation.endpoint is null, 
    or no IPv6 address & quot;, 
    `endpoint_port` SMALLINT COMMENT & quot; Null when Binary / Annotation.endpoint is null & quot;, 
    `endpoint_service_name` VARCHAR(255) COMMENT & quot; Null when Binary / Annotation.endpoint is null & quot;
  ) ENGINE = InnoDB ROW_FORMAT = COMPRESSED; 
ALTER TABLE 
  zipkin_annotations 
ADD 
  UNIQUE KEY(
    `trace_id`, `span_id`, `a_key`, `a_timestamp`
  ) COMMENT & quot; Ignore insert on duplicate & quot;; 
ALTER TABLE 
  zipkin_annotations 
ADD 
  INDEX(`trace_id`, `span_id`) COMMENT & quot; for joining with zipkin_spans & quot;; 
ALTER TABLE 
  zipkin_annotations 
ADD 
  INDEX(`trace_id`) COMMENT & quot; for getTraces / ByIds & quot;; 
ALTER TABLE 
  zipkin_annotations 
ADD 
  INDEX(`endpoint_service_name`) COMMENT & quot; for getTraces 
  and getServiceNames & quot;; 
ALTER TABLE 
  zipkin_annotations 
ADD 
  INDEX(`a_type`) COMMENT & quot; for getTraces & quot;; 
ALTER TABLE 
  zipkin_annotations 
ADD 
  INDEX(`a_key`) COMMENT & quot; for getTraces & quot;; CREATE TABLE IF NOT EXISTS zipkin_dependencies (
    `day` DATE NOT NULL, 
    `parent` VARCHAR(255) NOT NULL, 
    `child` VARCHAR(255) NOT NULL, 
    `call_count` BIGINT
  ) ENGINE = InnoDB ROW_FORMAT = COMPRESSED; 
ALTER TABLE 
  zipkin_dependencies 
ADD 
  UNIQUE KEY(`day`, `parent`, `child`);

2、pom依赖

<!-- zipkin-storage-mysql-v1 -->
<dependency>
 <groupId>io.zipkin.zipkin2</groupId>
 <artifactId>zipkin-storage-mysql-v1</artifactId>
 <version>2.11.12</version>
</dependency>
<!--mysql驱动-->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.47</version>
</dependency>

3、配置yml

spring:
  application:
    name: zipkin
  datasource:
    username: root
    password: admin123
    driver-class-name: com.mysql.jdbc.Driver
    url: 'jdbc:mysql://localhost:3306/zipkin'
zipkin:
  storage:
    type: mysql
   

标签:COMMENT,教程,quot,SpringCloud,zipkin,ALTER,ZipKin,TABLE,id
From: https://www.cnblogs.com/sun-10387834/p/17723511.html

相关文章

  • springCloud
     一、Eureka服务注册与发现 eureka是ap原则,注重服务的可用性(不会挂,只是数据可能会不一致)zookeeper是cp原则,注重数据的一致性(当一个接点挂了,在几分钟内就不能访问了) 一、创建eureka的server服务端1、创建eureka注意pom.xml文件中的spring-boot的版本要与spring-cl......
  • 无涯教程-JavaScript - LARGE函数
    描述LARGE函数返回数据集中的第k个最大值。您可以使用此功能根据其相对地位选择一个值。语法LARGE(array,k)争论Argument描述Required/OptionalArrayThearrayorrangeofdataforwhichyouwanttodeterminethek-thlargestvalue.RequiredKTheposition......
  • 无涯教程-JavaScript - LOGEST函数
    描述在回归分析中,计算适合您数据的指数曲线,并返回描述该曲线的值数组。由于此函数返回值数组,因此必须将其作为数组公式输入。语法LOGEST(known_y's,[known_x's],[const],[stats])争论Argument描述Required/OptionalKnown_y's在关系y=b*m^x中,您已经知......
  • 无涯教程-JavaScript - GAMMA.DIST函数
    描述GAMMA.DIST函数返回伽马分布。您可以使用此功能来研究可能具有偏斜分布的变量。伽马分布通常用于排队分析。语法GAMMA.DIST(x,alpha,beta,cumulative)争论Argument描述Required/OptionalXThevalueatwhichyouwanttoevaluatethedistribution.RequiredAlp......
  • (新版)抖音最近很火的游戏直播:挤地铁教程+源码+软件
    抖音最近很火的游戏直播:挤地铁教程+源码+软件先上车先吃肉,卡好后带货,卖号,引私域,接星途广告,接小程序广告,带小游戏赚收益均可     免费下载压缩包,提取码:9jbw......
  • Docker教程1-引言 2-简介 3-安装
    1引言本章内容:为什么要使用容器、容器有什么作用、在哪里可以使用容器。1.1糟糕的过去应用程序是企业的核心。大多数应用程序都在服务器上运行。过去我们只能在每台服务器上运行应用程序。Windows和Linux不具备在同一台服务器上安全可靠地运行多个应用程序的技术。每当企业......
  • 无涯教程-JavaScript - F.INV函数
    描述F.INV函数返回F概率分布的倒数。如果p=F.DIST(x...),则F.INV(p...)=x。F分布可用于比较两个数据集变异程度的F检验。语法F.INV(probability,deg_freedom1,deg_freedom2)争论Argument描述Required/OptionalProbabilityAprobabilityassociatedwiththeF......
  • 完整教程:使用SPRING BOOT实现大文件断点续传及文件校验
    一、简介随着互联网的快速发展,大文件的传输成为了互联网应用的重要组成部分。然而,由于网络不稳定等因素的影响,大文件的传输经常会出现中断的情况,这时需要重新传输,导致传输效率低下。为了解决这个问题,可以实现大文件的断点续传功能。断点续传功能可以在传输中断后继续传输,而不需......
  • 红黑树简明教程
    前言红黑树是一种性能非常优秀的有序数据结构,一般用于在内存中实现有序列表/集合/字典/优先队列等,在各大语言的标准函数库,操作系统中的任务调度、定时器等场景下有着广泛的应用。然而,红黑树也是一种以复杂闻名的数据结构,实现时需要考虑的情况非常之多,以至于“手撕红黑树”......
  • 无涯教程-JavaScript - FISHER函数
    描述FISHER函数返回x处的Fisher变换。这种转换产生的功能通常呈正态分布而不是倾斜。使用此功能对相关系数执行假设检验。语法FISHER(x)争论Argument描述Required/OptionalXAnumericvalueforwhichyouwantthetransformation.RequiredNotesFisher变换的等......