Sleuth + Zipkin

一、sleuth配置

每一个需要被追踪踪迹的微服务工程都引入依赖坐标

<!--链路追踪-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

每一个微服务都修改application.yml配置文件,添加日志级别

#分布式链路追踪
logging:
 level:
 	org.springframework.web.servlet.DispatcherServlet: debug
 	org.springframework.cloud.sleuth: debug

请求到来时,我们在控制台可以观察到 Sleuth 输出的⽇志(全局 TraceId、SpanId等)。
在这里插入图片描述
这样的⽇志⾸先不容易阅读观察,另外⽇志分散在各个微服务服务器上,接下来我们使⽤zipkin统⼀聚合轨迹⽇志并进⾏存储展示。

二、结合 Zipkin 展示追踪数据

Zipkin 包括Zipkin Server和 Zipkin Client两部分,Zipkin Server是⼀个单独的服务,Zipkin Client就是具体的微服务。

Zipkin Server 构建

pom.xml

<!--zipkin-server的依赖坐标-->
 <dependency>
	 <groupId>io.zipkin.java</groupId>
	 <artifactId>zipkin-server</artifactId>
	 <version>2.12.3</version>
	 <exclusions>
		 <!--排除掉log4j2的传递依赖,避免和springboot依赖的⽇
		志组件冲突-->
		 <exclusion>
		 <groupId>org.springframework.boot</groupId>
		 <artifactId>spring-boot-starterlog4j2</artifactId>
		 </exclusion>
	 </exclusions>
 </dependency>
 <!--zipkin-server ui界⾯依赖坐标-->
 <dependency>
	 <groupId>io.zipkin.java</groupId>
	 <artifactId>zipkin-autoconfigure-ui</artifactId>
	 <version>2.12.3</version>
 </dependency>

⼊⼝启动类

@SpringBootApplication
@EnableZipkinServer // 开启Zipkin Server功能
public class ZipkinServerApplication9411 {
 	
 	public static void main(String[] args) {
		SpringApplication.run(ZipkinServerApplication9411.class,args);
 	}
}

application.yml

server:
 port: 9411
management:
 	metrics:
 		web:
 			server:
 				auto-time-requests: false # 关闭⾃动检测请求

Zipkin Client 构建(在具体微服务中修改)

pom中添加 zipkin 依赖

<dependency>
	 <groupId>org.springframework.cloud</groupId>
 	<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

application.yml 中添加对zipkin server的引⽤

spring:
	 application:
	 	name: lagou-service-autodeliver
	 zipkin:
	 	base-url: http://127.0.0.1:9411 # zipkin server的请求地址
	 	sender:
	 	# web 客户端将踪迹⽇志数据通过⽹络请求的⽅式传送到服务端,另外还有配置
	 	# kafka/rabbit 客户端将踪迹⽇志数据传递到mq进⾏中转
	 		type: web
	 sleuth:
	 	sampler:
	 # 采样率 1 代表100%全部采集 ,默认0.1 代表10% 的请求踪迹数据会被采集
	 # ⽣产环境下,请求量⾮常⼤,没有必要所有请求的踪迹数据都采集分析,对于⽹络包括server端压⼒都是⽐较⼤的,可以配置采样率采集⼀定⽐例的请求的踪迹数据进⾏分析即可
	 		probability: 1

另外,对于log⽇志,依然保持开启debug状态

追踪数据Zipkin持久化到mysql

mysql中创建名称为zipkin的数据库,并执⾏如下sql语句(官⽅提供)

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,
 `remote_service_name` VARCHAR(255),
 `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',
 PRIMARY KEY (`trace_id_high`, `trace_id`, `id`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8
COLLATE utf8_general_ci;
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(`remote_service_name`)
COMMENT 'for getTraces and getRemoteServiceNames';
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 and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT
'for getTraces and autocomplete values';
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,
 PRIMARY KEY (`day`, `parent`, `child`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8
COLLATE utf8_general_ci;

pom⽂件引⼊相关依赖

<dependency>
 <groupId>io.zipkin.java</groupId>
 <artifactId>zipkin-autoconfigure-storagemysql</artifactId>
 <version>2.12.3</version>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 </dependency>
 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid-spring-bootstarter</artifactId>
 <version>1.1.10</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-tx</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 </dependency>

修改配置⽂件,添加如下内容

spring:
 datasource:
	 driver-class-name: com.mysql.jdbc.Driver
	 url: jdbc:mysql://localhost:3306/zipkin?
	useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
	 username: root
	 password: 123456
	 druid:
		 initialSize: 10
		 minIdle: 10
		 maxActive: 30
		 maxWait: 50000
# 指定zipkin持久化介质为mysql
zipkin:
 storage:
 	type: mysql

启动类中注⼊事务管理器

@Bean
public PlatformTransactionManager txManager(DataSource dataSource) {
 	return new DataSourceTransactionManager(dataSource);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值