SpringCloud-ZipKin搭建保姆级教程

springcloud,zipkin,搭建,保姆,教程 · 浏览次数 : 18

小编点评

**一、服务追踪说明微服务架构** 服务追踪是将多个微服务的调用关系记录下来,以便在分析和调试过程中理解系统行为。由于服务之间互相连接,因此追踪调用关系变得复杂。 **二、Zipkin1、Zipkin是哪个?** Zipkin 是一个开源的分布式跟踪系统,用于收集微服务的计时数据。它可以帮助您解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。 **三、配置ymlspring: application中的配置** `zipkin` 是一个配置属性,用于指定 Zipkin 的配置。例如,您可以设置 Zipkin 的服务器地址、端口号和 storage 类型。 **四、pom依赖** 以下是 Zipkin 和 MySQL 的依赖项: * Zipkin:io.zipkin.zipkin2 * MySQL:io.zipkin.zipkin2 和 mysql-connector-java **五、其他重要信息** * Zipkin 可以使用多种数据库,包括 MySQL 和内存。 * 它支持多种调用关系类型,包括请求、响应和依赖。 * 它可以用于各种应用场景,例如日志收集、性能分析和错误追踪。

正文

服务链路追踪

一、服务追踪说明

微服务架构是通过业务来划分服务的,使⽤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
 
 

与SpringCloud-ZipKin搭建保姆级教程相似的内容:

SpringCloud-ZipKin搭建保姆级教程

服务链路追踪 一、服务追踪说明 微服务架构是通过业务来划分服务的,使⽤REST调⽤。对外暴露的⼀个接⼝,可能需要 很多个服务协同才能完成这个接⼝功能,如果链路上任何⼀个服务出现问题或者⽹络超 时,都会形成导致接⼝调⽤失败。 随着业务的不断扩张,服务之间互相调⽤会越来越复杂,它们之间的调⽤关系也许如下

SpringCloud解决feign调用token丢失问题

背景讨论 feign请求 在微服务环境中,完成一个http请求,经常需要调用其他好几个服务才可以完成其功能,这种情况非常普遍,无法避免。那么就需要服务之间的通过feignClient发起请求,获取需要的 资源。 认证和鉴权 一般而言,微服务项目部署环境中,各个微服务都是运行在内网环境,网关服务负责请

[转帖]springcloud nacos配置

配置文件中的nacos配置,discovery和config配置项 版本: 2.3.2.RELEASE Hoxton.SR9

SpringCloud-Config配置中心搭建保姆级教程

一、分布式配置中⼼ 在使⽤微服务架构开发的项⽬中,每个服务都有⾃⼰的配置⽂件(application.yml),如果将每个服务的配置⽂件直接写在对应的服务中,存在以下问题: 1. 服务开发完成之后,需要打包部署,配置⽂件也会打包在jar⽂件中,不便于项⽬部署之后的配置修改(在源码中修改——重新打包—

SpringCloud-Gateway搭建保姆级教程

一、网关介绍 1、什么是网关? 使⽤服务⽹关作为接⼝服务的统⼀代理,前端通过⽹关完成服务的统⼀调⽤ 2、⽹关可以⼲什么? 路由:接⼝服务的统⼀代理,实现前端对接⼝服务的统⼀访问 过滤:对⽤户请求进⾏拦截、过滤(⽤户鉴权)、监控 限流:限制⽤户的访问流量 3、常⽤的⽹关 Nginx Spring Cl

SpringCloud-Hystrix服务熔断与降级工作原理&源码

在生活中,如果电路的负载过高,保险箱会自动跳闸,以保护家里的各种电器,这就是熔断器的一个活生生例子。在Hystrix中也存在这样一个熔断器,当所依赖的服务不稳定时,能够自动熔断,并提供有损服务,保护服务的稳定性。在运行过程中,Hystrix会根据接口的执行状态(成功、失败、超时和拒绝),收集并统计这些数据,根据这些信息来实时决策是否进行熔断。

SpringCloud搭建保姆级教程

一、搭建服务注册与发现中⼼ 使⽤Spring Cloud Netflix 中的 Eureka 搭建服务注册与发现中⼼ 1、创建SpringBoot应用添加依赖 1、spring web 2、eureka server 2、配置服务注册与发现中⼼ ## 设置服务注册与发现中⼼的端⼝ server: p

微服务使用openfeign调用单点的会话失效问题

# 项目Springcloud,认证中心方式实现SSO使用开源框架Sa-Token >本身的单独访问每个客户端服务的单点就没有问题。然后单点通过Fegin调用就不好使了! ##### 主要使用的Sa-Token的微服务单点功能 ##### 使用的依赖如下 ```xml cn.dev33 sa-tok

2023最新IntellJ IDEA诺依SpringCloud开发部署文档(保姆级别)

[TOC] # 若依RuoYi v3.6.2部署文档 ## 一、环境构建 | 软件名称 | 版本 | 相关文章推荐 | | | | | | Git | 13.5.0 | [https://www.cnblogs.com/liuyangfirst/p/15996063.html](https://ww

服务链路追踪 —— SpringCloud Sleuth

Sleuth 简介 随着业务的发展,系统规模变得越来越大,微服务拆分越来越细,各微服务间的调用关系也越来越复杂。客户端请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,几平每一个请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整