【弄nèng - SpringCloud】应用篇 —— 整合Zipkin【Finchley版】
文章目录
- 1. Zipkin简介
- 2.术语
- N. 插一杠子
- N.1 下载Zipkin-server jar
- N.2 启动jar
- 3. 使用
- 3.1 it-zipkin-server
- 3.2 gateway-service
- 3.3 user-service
- 3.4 eureka-service
- 4. 测试
- 5. 源码
- 项目推荐
Spring Cloud:分布式服务跟踪,整合Zipkin【Finchley版】,实测跟Dalston版没啥区别。
参考地址传送门1
参考地址传送门2
参考地址传送门3
参考地址传送门4
注意:本文是http传送数据方式,生产不建议使用,建议使用消息队列传送数据,es存储数据,kibana展示数据。
1. Zipkin简介
Zipkin 是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper 的论文设计而来,由 Twitter公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统延时问题。各个微服务需要进行装备(instrument)以向 Zipkin 报告数据。Zipkin 的用户界面可以呈现一幅关联图表,以显示有多少被追踪的请求通过了每一层应用。Zipkin 以 Trace 结构表示对一次请求的追踪,又把每个 Trace 拆分为若干个有依赖关系的 Span。在微服务架构中,一次用户请求可能会由后台若干个服务负责处理,那么每个处理请求的服务就可以理解为一个 Span(可以包括 API 服务,缓存服务,数据库服务以及报表服务等)。当然这个服务也可能继续请求其他的服务,因此 Span 是一个树形结构,以体现服务之间的调用关系。Zipkin 的用户界面除了可以查看 Span 的依赖关系之外,还以瀑布图的形式显示了每个 Span 的耗时情况,可以一目了然的看到各个服务的性能状况。打开每个 Span,还有更详细的数据以键值对的形式呈现,而且这些数据可以在装备应用的时候自行添加。
2.术语
- Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址)
span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。 - Trace:一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。
- Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束
- cs - Client Sent -客户端发起一个请求,这个annotion描述了这个span的开始
- sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络延迟
- ss - Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服务端需要的处理请求时间
- cr - Client Received -表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳便可得到客户端从服务端获取回复的所有所需时间
将Span和Trace在一个系统中使用Zipkin注解的过程图形化:
下图显示了系统中的Span和Trace,以及Zipkin注释:
N. 插一杠子
SpringCloud Finchley版本,sleuth + zipkin 不需要自己搭建zipkin server 了,直接下载jar启动即可
N.1 下载Zipkin-server jar
传送门
N.2 启动jar
普通启动
java -jar zipkin-dependencies.jar
使用ES数据源启动
$ STORAGE_TYPE=elasticsearch ES_HOSTS=host1,host2 java -jar zipkin-dependencies.jar
# To override the http port, add it to the host string
$ STORAGE_TYPE=elasticsearch ES_HOSTS=host1:9201 java -jar zipkin-dependencies.jar
可以配置相关参数,详情参见官网,地址传送门
3. 使用
下面我们自己搭建zipkin-server,可以不用自己搭建,参见:插一杠子。
本文的案例主要有三个工程 it-zipkin-server, gateway-service, user-service。
SpringBoot 2.0.4
SpringCloud Finchley
3.1 it-zipkin-server
构建zipkin服务,我使用es存储数据,要是不用es存储可以把pom和es配置干掉
1. POM依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itcloud</groupId><artifactId>it-zipkin-server</artifactId><version>0.0.1-SNAPSHOT</version><name>it-zipkin-server</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>Finchley.SR1</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-server</artifactId><version>2.11.4</version></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-ui</artifactId><version>2.11.4</version></dependency><!-- 使用es存储数据--><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId><version>2.4.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2. 启动类
启动类添加@EnableZipkinServer
3. YML配置
server:port: 9411spring:application:name: app#解决The bean 'characterEncodingFilter', defined in class path resource [zipkin/autoconfigure/ui/ZipkinUiAutoConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/HttpEncodingAutoConfiguration.class] and overriding is disabled.Action:main:allow-bean-definition-overriding: true#解决IllegalArgumentException: Prometheus requires that all meters with the same name have the same set of tag keys.
management:metrics:web:server:auto-time-requests: false# ES配置
zipkin:storage:type: elasticsearchelasticsearch:hosts: localhost:9200cluster: elasticsearchindex: zipkinindex-shards: 1index-replicas: 1
3.2 gateway-service
1. pom依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId><version>RELEASE</version></dependency></dependencies>
2. 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class GatewayServiceApplication {public static void main(String[] args) {SpringApplication.run(GatewayServiceApplication.class, args);}
}
过滤器
给zipkin数据添加额外属性
import com.netflix.zuul.ZuulFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;@Component
public class LoggerFilter extends ZuulFilter {@AutowiredTracer tracer;@Overridepublic String filterType() {return FilterConstants.POST_TYPE;}@Overridepublic int filterOrder() {return 1000;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() {tracer.addTag("operator","admin");System.out.print(tracer.getCurrentSpan().traceIdString());return null;}
}
3. YML配置
eureka:client:serviceUrl:defaultZone: http://localhost:2222/eureka/server:port: 5000
spring:application:name: gateway-servicesleuth:sampler:percentage: 1.0zipkin:base-url: http://localhost:9411zuul:routes:api-a:path: /user-api/**serviceId: user-service
3.3 user-service
1. pom依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId><version>RELEASE</version></dependency></dependencies>
2. 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}
}
3. yaml
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/server:port: 5000
spring:application:name: gateway-servicesleuth:sampler:percentage: 1.0zipkin:base-url: http://localhost:9411zuul:routes:api-a:path: /user-api/**serviceId: user-service
4. Controller
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@GetMapping("/hi")public String hi(){return "I'm simagang";}
}
3.4 eureka-service
eureka 服务很简单了,不会的可以参考:it-eureka-server
4. 测试
访问http://localhost:9411 进入zipkin管理页面
访问http://localhost:5000/user-api/user/hi 制造数据
zipkin页面Find Traces效果
点击去详情:
es中数据
{"_index": "zipkin:span-2019-12-11","_type": "span","_id": "AW7zhUPt0NSlh9dQqPqa","_score": 1,"_source": {"traceId": "8a97983b4a324507","duration": 7868129,"localEndpoint": {"serviceName": "gateway-service","ipv4": "10.100.170.120","port": 5000},"timestamp_millis": 1576043618159,"kind": "SERVER","name": "http:/user-api/user/hi","id": "8a97983b4a324507","timestamp": 1576043618159000,"tags": {"operator": "admin","spring.instance_id": "KZX-WW-IT37613.citiccardins.com:gateway-service:5000"}}}
5. 源码
zipkin server源码地址传送门
其他源码很简单请自行实现
项目推荐
IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
IT-CLOUD-ACTIVITI6 :Activiti教程源码。博文在本CSDN Activiti系列中。
IT-CLOUD-ELASTICSEARCH :elasticsearch教程源码。博文在本CSDN elasticsearch系列中。开源项目,持续更新中,喜欢请 Star~
【弄nèng - SpringCloud】应用篇 —— 整合Zipkin【Finchley版】相关推荐
- SpringCloud F.RC2 整合Zipkin简单步骤
前言:最近在学习zipkin,看到网上资源很多,但是都和自己的项目不是很一样,所以将自己的过程码出来 1.下载zipkin.jar 启动zipkin-server (配置启动参数) 传送门: http ...
- Spring cloud(Finchley)微服务框架,sleuth整合zipkin链路追踪失效的问题
一.首先说问题: 1.springCloud在使用链路追踪组件sleuth整合zipkin的过程中链路追踪信息切都是正常: 2.微服务太多需要使用组件Config对每个微服务的的配置文件进行统一管理: ...
- SpringCloud版本Hoxton SR5 --- 第八讲:Sleuth 分布式链路跟踪 整合Zipkin + Elasticsearch持久化
传送门:SpringCloud版本Hoxton SR5 --- 第一讲:认识 先看Sleuth.Zipkin.Elasticsearch 可以完成的功能,或者说他在项目中的定位和作用. Sleuth比 ...
- 【弄nèng - Skywalking】入门篇(二)—— Skywalking集群部署
文章目录 一. 安装OAP 1.1 前置 1.2 下载 1.3 修改配置application.yml 1.4 高级部署 1.5 webapp配置 1.6 启动 二. 使用Agent 2.1 修改配置 ...
- 【弄nèng - Grafana】入门篇(十)—— Dashboard默认时间范围和刷新时间设置
文章目录 1. Dashboard通用设置 General 2. 修改Dashboard默认时间范围 3. 修改某个Panel时间 项目推荐 Dashboard修改默认时间范围 1. Dashboar ...
- Java微服务——SpringCloud实战篇2:整合Gateway、Config、Bus
Java微服务--SpringCloud实战篇2:整合Gateway.Config.Bus 如果小伙伴在阅读下列内容时,对于编写SpringCloud项目是零基础,那么请先阅读小编的另一篇博文:&qu ...
- Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】
通过上一篇<分布式服务跟踪(整合logstash)>,我们虽然已经能够利用ELK平台提供的收集.存储.搜索等强大功能,对跟踪信息的管理和使用已经变得非常便利.但是,在ELK平台中的数据分析 ...
- 集成sleuth_Spring Cloud Sleuth整合zipkin过程解析
这篇文章主要介绍了Spring Cloud Sleuth整合zipkin过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 SpringClou ...
- SpringCloud高级篇 - Nacos
SpringCloud高级篇 – Nacos 文章目录 SpringCloud高级篇 -- Nacos @[toc] 一.SpringCloud Alibaba入门简介 1.1 为什么会出现? 1.2 ...
最新文章
- 26期20180626 rpm 安装软件包的方法 yum
- 在ASP.NET MVC使用JavaScriptResult
- a byte of python图书购买_A Byte of Python
- 安卓开发文档_鸿蒙2.0,HarmonyOS开发体验!
- 贴吧粉丝怎么全部移除_教程:高达模型贴大面积的水贴纸张要如何操作
- SMI/慧荣/SM32**主控量产通用教程,PNY U盘量产!
- APP开发接口分类介绍
- 转换世界地图到球纹理图
- IDEA下配置安卓环境
- 靠谱测试人员需要团队协作能力
- 汽车维修企业管理【6】
- oa处理会签流程图_关于合同会签OA流程使用说明
- OracleRAC基本概念及入门
- 为什么我朋友的移动手机打不开我的网站却能打开www.ip138.com?
- n++和++n的区别
- Commonsense and Named Entity Aware Knowledge Grounded Dialogue Generation
- 基于CSS mask和clip-path实现切角的技巧
- 用真金做的电路板——金手指
- 什么是防火墙?服务器防火墙建议开启吗?
- 路径中的“\”和“/”以及相对路径和绝对路径
热门文章
- 汕头好的计算机学校有哪些,2021年汕头所有小学名单及排名,汕头最好的小学有哪些...
- 庄懂的TA笔记(六)<FakeEnvReflect 生锈,锈迹效果>
- 0xFEFEFEFE 处有未经处理的异常(在xx中): 0xC00001A5: 检测到无效的异常处理程序例程。
- 非易失内存技术NVDIMM
- Android 内置第三方app
- 身边有位“别人家的程序员”是什么样的体验?
- 【微信小程序】二维数组列表渲染
- HDU 2563 统计问题
- 酒店项目 酒店管理系统酒店在线预订系统
- 基于QT5实现的心率变异与心率减速力分析软件