您当前的位置: 首页 >  微服务

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

微服务链路追踪springcloud Sleuth + Zipkin实战(二)

qq_34412985 发布时间:2021-02-09 21:04:29 ,浏览量:0

简介:微服务的诞生,带来了大量的便利,随之而来的还有大量问题的产生。

将一个庞大的系统切割为若干个小的系统,各个系统之间相互调用,共同协调完成系统功能。然而在复杂的调用链中如果出现了一些问题,比如一条调用链路错误,如何快速定位错误源,一条调用链路响应缓慢,如何快速定位其中延迟高的服务呢?这将是我们需要解决的问题。

Zipkin 是什么? Zipkin 分布式跟踪系统,它可以帮助收集时间数据。并通过用户易于理解的方式展现给用户(说人话就是链路追踪中的服务端,用于收集和展示数据)。

zipkin涉及几个概念(可以不用管)

1. Span:基本工作单元,一次链路调用创建一个span,通过一个64位ID标识它,  span通过还有其他的数据,例如描述信息,时间戳,key-value对的(Annotation)tag信息,parent-id等,其中parent-id  可以表示span调用链路来源,通俗的理解span就是一次请求信息。

2. Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识。

3. Annotation: 注解,用来记录请求特定事件相关信息(例如时间),通常包含四个注解信息。

4. BinaryAnnotation:提供一些额外信息,一般已key-value对出现。

Spring Cloud Sleuth 是什么?

Spring Cloud Sleuth主要功能就是在分布式系统中提供链路追踪解决方案,并且兼容支持了 zipkin(说人话就是链路追踪中的客户端,用于向zipkin提供数据)。

sleuth与Zipkin关系?

spring cloud提供了spring-cloud-sleuth-zipkin来方便集成zipkin实现(指的是Zipkin Client,而不是Zipkin服务器),该jar包可以通过spring-cloud-starter-zipkin依赖来引入。

zipkin服务器搭建。

官方提供了现成的jar包以供使用,下面是jar包个人网盘地址。无聊自己像搭建也可以去试试,和Eureka,Zuul搭建方式类似。

链接:https://pan.baidu.com/s/1wUbVnNIV3Ii0TEP-eEahIg  提取码:dw2b 

使用方法:

执行命令:java -jar zipkin-server-2.21.4-exec.jar 运行此 spring boot 工程。

客户端使用。

客户端对象为需要被监控的微服务。

  1. 导入依赖

    org.springframework.cloud spring-cloud-starter-zipkin

  2. 配置application.yml文件

    spring:   application:       name: service1   zipkin:       base-url: http://localhost:9411 #zipkin服务器地址   sleuth:      sampler:         probability: 1.0 # sleuth采样率,默认为0.1,值越大收集越及时,但性能影响也越大

      配置application.properties文件:

#zipkin服务器地址 spring.zipkin.base-url=http://localhost:9411 #sleuth采样率,默认为0.1,值越大收集越及时,但性能影响也越大 spring.sleuth.sampler.probability=1.0

默认的存储方式:默认采用的是内存进行存储,也不能进行持久化,这在生产环境显然是不现实的。

zipkin服务使用mysql存储日志

1. 创建数据库,创建表:官方可以找到数据库与表的创建语句。

create database zipkin; 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', 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(`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;

 

2. 加参数启动zipkin。

java -DSTORAGE_TYPE=mysql -DMYSQL_HOST=localhost -DMYSQL_USER=root -DMYSQL_PASS=123 -DMYSQL_DB=zipkin -jar .\zipkin-server-2.21.4-exec.jar

linux后台运行:java -DSTORAGE_TYPE=mysql -DMYSQL_HOST=localhost -DMYSQL_USER=root -DMYSQL_PASS=123 -DMYSQL_DB=zipkin -jar .\zipkin-server-2.21.4-exec.jar &

官方参数解释: `MYSQL_DB`: The database to use. Defaults to "zipkin". `MYSQL_USER` and `MYSQL_PASS`: MySQL authentication, which defaults to empty string. `MYSQL_HOST`: Defaults to localhost `MYSQL_TCP_PORT`: Defaults to 3306 `MYSQL_MAX_CONNECTIONS`: Maximum concurrent connections, defaults to 10 `MYSQL_USE_SSL`: Requires `javax.net.ssl.trustStore` and `javax.net.ssl.trustStorePassword`, defaults to false.

zipkin服务使用ElasticSerach存储日志

1. 搭建elasticSearch服务器 2. 加参数启动zipkin java -DSTORAGE_TYPE=elasticsearch -DDES_HOSTS=http://localhost:9200 -jar zipkin-server-2.21.4-exec.jar

 

zipkin使用效果(名称取得有点随意,不过不要紧)

页面访问的url:http://localhost:9411

调用链列表

调用成功的调用链详情

 

调用失败的调用链详情

 

 

调用失败服务详情

 

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0441s