Springboot 2.0.x 引入链路跟踪Sleuth及Zipkin
Zipkin是一种分布式跟踪系统,它有助于收集解决微服务架构中得延迟问题所需的时序数据,它管理这些数据的收集和查找。
1. 架构概述
跟踪器存在于您的应用程序中,并记录有关发生的操作的时间和元数据。他们经常使用库,因此它们的使用对用户是透明的。例如,已检测的Web服务器会在收到请求时以及何时发送响应时进行记录。收集的跟踪数据称为Span。
编写仪器是为了安全生产并且开销很小。出于这个原因,它们只在带内传播ID,以告诉接收器正在进行跟踪。Zipkin带外报告已完成的跨度,类似于应用程序异步报告度量标准的方式。
例如,在跟踪操作并且需要发出传出的http请求时,会添加一些标头来传播ID。标头不用于发送操作名称等详细信息。
将数据发送到Zipkin的检测应用程序中的组件称为Reporter。记者通过几种传输之一将跟踪数据发送到Zipkin收集器,这些收集器将跟踪数据保存到存储中。稍后,API会查询存储以向UI提供数据。
Zipkin作为一个收藏家,一旦跟踪数据到达Zipkin收集器守护程序,它就会被Zipkin收集器验证,存储和索引查找。
Zipkin查询服务,一旦数据被存储和索引,我们需要一种方法来提取它。查询守护程序提供了一个简单的JSON API,用户查找和检索跟踪。
参考官网:https://zipkin.io/
2. 快速开始
本文,我们将介绍构建和启动Zipkin实例,以便在本地检查Zipkin。根据官网显示,有三种选择:使用Java、Docker或从源代码运行。
如果您熟悉Docker,这是首选的方法。如果您不熟悉Docker,请尝试通过Java或源代码运行。
Zipkin分为两端,一个是Zipkin服务端,一个是Zipkin客户端(微服务应用)。客户端会配置服务端的URL地址,一旦服务间调用的时候,会被配置在微服务里面的Sleuth的监听器监听,并生成相应的Trace和Span信息发送给服务端。
发送的方式主要有两种,一种是Http报文的方式,还有一种是消息总线的方式如:RabbitMQ
我们这边采用的是Http报文的方式。
Zipkin服务端构建
1. 引入依赖
解析:主要引入两个Jar:zipkin-server、zipkin-autoconfigure-ui,其中对应的版本为:2.12.2。
zipkin-server 本身包含了 log4j,如果系统已经引入log4j包,为了避免冲突,需要在此处将本jar包去除。
<!-- zipkin-->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>${zipkin.version}</version>
</dependency>
<!-- 引入zipkin-server 图形化界面 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>${zipkin.version}</version>
<scope>runtime</scope>
</dependency>
server:
port: 10011
spring:
application:
name: sipsd-zipkin-server
#================================eureka客户端基础配置==============================
eureka:
instance:
preferIpAddress: true
ipAddress: 127.0.0.1
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 10
instanceId: ${spring.cloud.client.ipAddress}:${server.port}
client:
service-url:
defaultZone: http://127.0.0.1:20001/eureka/
healthcheck:
enabled: true
management:
metrics:
web:
server:
auto-time-requests: false
注:如果配置文件中没有添加“management.metrics.web.server.auto-time-requests=false”,默认为 开启自动检测请求
在启动zipkin-server过程中,会报以下问题:
java.lang.IllegalArgumentException: Prometheus requires that all meters with the same name have the same set of tag keys. There is already an existing meter containing tag keys [method, status, uri]. The meter you are attempting to register has keys [exception, method, status, uri].
解决方案:
a、配置文件中增加:management.metrics.web.server.auto-time-requests=false设置为false,默认为true
b、重写WebMvcTagsProvider,目的是去掉 WebMvcTags.exception(exception)
4. 启动zipkin-server服务
package com.sinosoft;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import zipkin2.server.internal.EnableZipkinServer;
/**
* @ClassName: ZipkinApplication
* @Description: 调用链服务启动入口
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableZipkinServer
public class ZipkinApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinApplication.class, args);
}
}
Zipkin客户端构建
1. 引入依赖
<!-- zipkin 调用链 spring-cloud-starter-zipkin 已经包含了 spring-cloud-starter-sleuth-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin </artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
2. 配置文件
# 调用链 Sleuth + ZipKin
server:
port: 7013
spring:
application:
name: sipsd-zipkin-client2
zipkin:
base-url: http://127.0.0.1:10011/ #指定zipkin的服务器
locator:
discovery:
enabled: true #支持通过服务发现定位主机名
sleuth:
web:
client:
enabled: true
sampler:
probability: 1.0 #0.1-1.0 1.0采样率为100%,采集服务的全部追踪数据
#================================eureka客户端基础配置==============================
eureka:
instance:
preferIpAddress: true
ipAddress: 127.0.0.1
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 10
instanceId: ${spring.cloud.client.ipAddress}:${server.port}
client:
service-url:
defaultZone: http://127.0.0.1:20001/eureka/
healthcheck:
enabled: true
Zipkin效果展示
zipkin服务端及客户端启动之后,访问:http://localhost:10011/zipkin
分享到:
相关推荐
「Java分享客栈」随时用随时翻:微服务链路追踪之zipkin搭建.doc
Linux系统下环境搭建zipikin集群,图文版本,易懂易操作。
spring cloud zipkin服务链路跟踪server相关jar包,下载完成之后使用java -jar zipkin-server-2.12.9-exec.jar方式运行,就能启动zipkin-server,不建议自己搭建zipkin-server
windows环境搭建调用链监控 spring cloud+es+kafka+zipkin
上一篇我们了解了Zipkin的基础知识以及Zipkin的服务端搭建。 在使用过程中很多同学发现了他的秘密,Zipkin模式将数据保存在内存中,当我们重启后,追踪数据便会丢失。其实,Zipkin也支持将追踪数据保存到MySql或者...
zipkin-server 端工具,主要是爲了顯示web端的可見。是比較好的zookeeper可視化工具,部署和搭建也是比較簡單的
在搭建Spring Cloud Sleuth+Zipkin服务链路追踪之前,提一下一个版本问题,在SpringBoot2.0之前的版本,Zipkin服务端,也就是可视化界面,需要自己新建项目引入依赖搭建,如同搭建eureka注册中一样;但是在...
在 Spring Boot 2.0 版本之后,官方已不推荐自己搭建Zipkin服务端了,而是直接提供了编译好的 jar 包。2020 - 09 - 28
主要介绍了SpringCloud可视化链路追踪系统Zipkin部署过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
基于springCloud+zipkin+zull网关搭建的一套企业级微服务框架 集成很多基础功能,适合有一定微服务基础的同学参考和研究
不需要积分!不需要积分!不需要积分!SpringCloud 搭建链路监控用到,周阳老师的课程给的链接失效,需要的可以从这里直接下载
Spring Cloud Config:配置管理工具,目前支持本地存储、Git以及Subversion,可以实现应用配置的外部化存储,支持客户端配置...Zipkin:为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。
搭建SpringCloud微服务脚手架,学习SpringCloud微服务整合nginx、zuul gateway、Hystrix、Robbin、eureka、zipkin、stream、feign、config、redis、fastdfs、elk等组件,搭建完整一套微服务解决方案
目前分布式链路追踪系统基本都是根据谷歌的《Dapper大规模分布式系统的跟踪系统》这篇论文发展而来,主流的有zipkin,pinpoint,skywalking,cat,jaeger等。 本次APM系统选型主要对比pinpoint和skywalking。直接...
微服务调用链系统学习笔记,涉及产生背景,Zipkin框架介绍,环境搭建,SpringCloud整合Zipkin,Zipkin的原理,ZipKin的json文件解释
开发环境搭建linux和mac下可在项目根目录下执行./install.sh快速构建开发环境。如要了解具体的步骤,请看如下文档。具体步骤如下:克隆代码库: git clone https://github.com/zhoutaoo/SpringCloud.git安装公共库到...
构建server-zipkin 64 会员服务 65 订单服务 65 Swagger2API接口管理 65 课题引入 65 传统的API文档编写存在以下几个痛点: 66 Swagger具有以下优点 66 Swagg er 2.0 集成配置 66 Maven依赖信息 66 ...
各个项目进行一个简单的搭建,并使用docker部署,目前包含的项目有Eureka、Ribbon、Feign、Hystrix、Hystrix Dashboard、Turbine聚合监控、Zuul、SpringBootAdmin等Spring Config 、OAuth2未集成进来,但是在我的...
Spring Cloud微服务开发实践系列文章,详细介绍了微服务开发流程。 部分内容如下: 1、Spring Cloud介绍 2、Spring Boot 的设计理念和简单实践 ...15、Zipkin 介绍与实践 16、Nacos 基础用法 17微服务常见面试题分析
使用时麻烦将Nacos,ZipKin,Sentinel等组件自行搭建使用,本人服务器性能较差 存储在Nacos中的配置文件在https://github.com/stalary/pf-config 需要自行启动两个本人开源的服务 lightmq(使用lightmq.stalary.com...