服务治理spring cloud Admin/链路跟踪 ZipKin

2023-11-01

1.Spring Boot Admin

Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI

1.1 简介

Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,提供如下功能:

  • 显示 name/id 和版本号
  • 显示在线状态
  • Logging 日志级别管理
  • JMX beans 管理
  • Threads 会话和线程管理
  • Trace 应用请求跟踪
  • 应用运行参数信息,如:
    • Java 系统属性
    • Java 环境变量属性
    • 内存信息
    • Spring 环境属性

Spring Boot Admin 是由服务端和客户端组成,在 微服务 项目中,Spring Boot Admin 作为 Server 端,其他的要被监控的应用作为 Client 端,基于这种的配置如下步骤

1.2 server端

1.2.1.1 添加依赖
	<!--eureka 客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!--标注当前工程spring Boot Admin 是服务端的依赖
            需要引入版本号,此依赖不归springcloud管理
        -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.0.1</version>
        </dependency>
1.2.1.2 配置yml
server:
  port: 7500
spring:
  application:
    name: shop-admin
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka
1.2.1.3 启动类
@SpringBootApplication
@EnableDiscoveryClient
//标注当前工程师Admin服务端
@EnableAdminServer
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class);
    }
}

配置到这里,服务端配置完毕

1.2.2 Client端

1.2.2.1 添加依赖
<!--Admin客户端依赖-->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.0.1</version>
        </dependency>
        <!--提供当前工程的状态等信息的包,同时提供refresh刷新功能,帮助我们进行自动的更新-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
1.2.2.2 添加配置
# refresh 自动刷新 配置文件发生改变 客户端自动获取配置信息  刷新,健康信息,具体的内容
management.endpoints.web.exposure.include=refresh,health,info
# 展示健康的详细信息
management.endpoint.health.show-details= ALWAYS
1.2.2.3 启动服务

http://localhost:7500

在这里插入图片描述

Spring Cloud Discovery

如果我们的项目中使用了 Spring Cloud,那么我们其实并不用通过 SBA Client 来向 SBA 注册,而是让 SBA 通过注册中心(Eureka、Consul 等)来发现服务。这里以 Eureka 作为注册中心来说明。

在admin-client中只需要改变引入的依赖,其他不需要改变。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<!--<dependency>-->
    <!--<groupId>de.codecentric</groupId>-->
    <!--<artifactId>spring-boot-admin-starter-client</artifactId>-->
    <!--<version>2.0.1</version>-->
<!--</dependency>-->

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.链路跟踪

2.1简介

随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位服务故障点,以对症下药。于是就有了分布式系统调用跟踪的诞生。

现今业界分布式服务跟踪的理论基础主要来自于 Google 的一篇论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,使用最为广泛的开源实现是 Twitter 的 Zipkin,为了实现平台无关、厂商无关的分布式服务跟踪,CNCF 发布了布式服务跟踪标准 Open Tracing。国内,淘宝的“鹰眼”、京东的“Hydra”、大众点评的“CAT”、新浪的“Watchman”、唯品会的“Microscope”、窝窝网的“Tracing”都是这样的系统。

2.2 Spring Cloud Sleuth

一般的,一个分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展示。根据系统大小不同,每一部分的结构又有一定变化。譬如,对于大规模分布式系统,数据存储可分为实时数据和全量数据两部分,实时数据用于故障排查(troubleshooting),全量数据用于系统优化;数据收集除了支持平台无关和开发语言无关系统的数据收集,还包括异步数据收集(需要跟踪队列中的消息,保证调用的连贯性),以及确保更小的侵入性;数据展示又涉及到数据挖掘和分析。虽然每一部分都可能变得很复杂,但基本原理都类似。
在这里插入图片描述
服务追踪的追踪单元是从客户发起请求(request)抵达被追踪系统的边界开始,到被追踪系统向客户返回响应(response)为止的过程,称为一个“trace”。每个 trace 中会调用若干个服务,为了记录调用了哪些服务,以及每次调用的消耗时间等信息,在每次调用服务时,埋入一个调用记录,称为一个“span”。这样,若干个有序的 span 就组成了一个 trace。在系统向外界提供服务的过程中,会不断地有请求和响应发生,也就会不断生成 trace,把这些带有span 的 trace 记录下来,就可以描绘出一幅系统的服务拓扑图。附带上 span 中的响应时间,以及请求成功与否等信息,就可以在发生问题的时候,找到异常的服务;根据历史数据,还可以从系统整体层面分析出哪里性能差,定位性能优化的目标。

Spring Cloud Sleuth为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。此外Sleuth可以帮助我们:

  • 耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时;
  • 可视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;
  • 链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。

spring cloud sleuth可以结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展示数据。

这是Spring Cloud Sleuth的概念图:
在这里插入图片描述

2.3 ZipKin

Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。

Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下来的测试为方便直接采用In-Memory方式进行存储,生产推荐Elasticsearch。

2.4.1 server端

2.4.1.1项目依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--eureka 客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!--zipkin 服务端依赖-->
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
            <version>2.11.8</version>
        </dependency>
        <!--zipkin ui-->
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
            <version>2.11.8</version>
        </dependency>
2.4.1.2 配置文件
server:
  port: 7900
spring:
  application:
    name: shop-zipkin
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka
#zipkin启动报错无法访问的解决方法
management:
  metrics:
    web:
      server:
        auto-time-requests: false
2.4.1.3 启动类
@SpringBootApplication
@EnableDiscoveryClient
//标注是链路跟踪的服务端
@EnableZipkinServer
public class ZipKinApplication {

    public static void main(String[] args) {
        
        SpringApplication.run(ZipKinApplication.class);
    }

}

配置完成后依次启动示例项目:spring-cloud-eurekazipkin-server项目。刚问地址:http://localhost:7900/zipkin/可以看到Zipkin后台页面
在这里插入图片描述

2.4.2 客户端

2.4.2.1 加入依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

Spring应用在监测到Java依赖包中有sleuth和zipkin后,会自动在RestTemplate的调用过程中向HTTP请求注入追踪信息,并向Zipkin Server发送这些信息。

2.4.2.2 配置文件

同时配置文件中添加如下代码:

 # 指定了Zipkin服务器的地址
spring.zipkin.base-url= http://localhost:9000
 # 代表zipkin 记录请求的百分比 1 : 100%
spring.sleuth.sampler.probability= 1.0

pring.zipkin.base-url指定了Zipkin服务器的地址,spring.sleuth.sampler.percentage将采样比例设置为1.0,也就是全部都需要。

Spring Cloud Sleuth有一个Sampler策略,可以通过这个实现类来控制采样算法。采样器不会阻碍span相关id的产生,但是会对导出以及附加事件标签的相关操作造成影响。 Sleuth默认采样算法的实现是Reservoir sampling,具体的实现类是PercentageBasedSampler,默认的采样比例为: 0.1(即10%)。不过我们可以通过spring.sleuth.sampler.percentage来设置,所设置的值介于0.0到1.0之间,1.0则表示全部采集。

2.4.3 进行验证

客户端添加zipkin后,依次启动

通过外部请求访问Zuul网关,Zuul网关去调用eureka-server对外提供的服务。帮助我们记录请求。
在这里插入图片描述
在这里插入图片描述

如果请求失败,会直接显示请求失败的原因,帮助我们快速的定位错误,解决问题

还会帮助我们生成微服务之间相互调用的拓扑图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务治理spring cloud Admin/链路跟踪 ZipKin 的相关文章

  • Sentinel 流量控制

    上篇 Nacos 配置中心 目录 Sentinel 介绍 官方介绍 https sentinelguard io zh cn docs introduction html Sentinel 部署 服务改造 Sentinel 关键概念 流控规
  • Spring Cloud微服务项目实战笔记(二)是什么推动了单体应用到微服务架构的演进?

    首先对比的是单体应用 一个有问题 大家都完蛋 重新回滚到上一版本 开发测试沟通成本也大 微服务架构的优势 每个微服务是一个小的完整单位 独立的代码库数据库 自己去快速迭代功能 快速迭代 快速回滚 资源利用大大提高 大幅降低协作成本 高可用
  • 面试官问:微服务的4种部署策略有哪些,什么区别?

    在项目迭代的过程中 不可避免需要 上线 上线对应着部署 或者重新部署 部署对应着修改 修改则意味着风险 目前有很多部署发布的技术 这儿将常见的做一个总结 上面所说难免有些抽象 举一个情景例子 加入你是微博项目负责人员 现在新版本较原来的老版
  • Nacos配置文件 Param ‘serviceName‘ is illegal, serviceName is blank

    今天学习NACOS配置文件时 报错Param serviceName is illegal serviceName is blank 但是我在bootstrap yml文件中配置了服务名 父工程引入的依赖版本为最新的2021 1
  • Spring Boot 2.x整合微信支付项目实战

    资料 zip 第 1 章项目介绍和前期准备 1 1 SpringBoot整合微信支付开发在线教育视频站点介绍 ts 1 2 中大型公司里面项目开发流程讲解 ts 1 3 在线教育站点需求分析和架构设计 ts 1 4 在线教育后台数据库设计
  • B站S11破亿直播在线稳定性保障秘籍——演讲实录

    英雄联盟 S11全球总决赛 决赛中国战队夺冠 赛事直播盛况空前 观赛人数破亿 B站作为英雄联盟2021全球总决赛直播独家版权方不仅在整个比赛过程中保证了直播整体总体运行的平稳 还抗住了超预期的流量 如此大型的直播活动 B站究竟是如何保障系统
  • 全链路压测的“谜”

    前言 对于性能测试来说 全链路压测肯定跑不了的 在昨天上午的 GIAC全球互联网架构大会 上 网易云就进行了全链路压测的议题 对于有性能测试的公司来说 面试往往会被问到什么是全链路压测 如何有效的开展全链路压测等等 我今天也只是高屋建瓴 站
  • 【项目实战】大文件断点续传,搞起

    今天给大家分享的又是一篇实战文章 也是最近私活里遇到的 万能的互联网给了我办法 分享一下 背景 最近接到一个新的需求 需要上传2G左右的视频文件 用测试环境的OSS试了一下 上传需要十几分钟 再考虑到公司的资源问题 果断放弃该方案 一提到大
  • 高校评优评奖管理系统

    这是一个高校评优评奖管理系统 供大家参考学习 不懂的地方可以联系本人 1 管理员登陆 学生申请 管理员后台 评优记录 数据维护 信息统计 系统设置 学生申报 微信 17777665965 QQ 1161724197
  • JWT快速入门及所需依赖

    目录 1 JWT 1 1什么是JWT 1 2JWT的构成 jwt的头部 payload signature 1 3JWT快速入门案例 2Jwt认证 微服务 2 1微服务下统一权限认证 2 2应用认证 3 无状态的JWT令牌如何实现续签功能
  • K8s微服务从0到1入门及命令实战

    写在前面 本文主要介绍k8s的核心概念 基础语法 常用命令和常用操作 Kubernetes介绍 Kubernetes是一种流行的开源容器编排和管理系统 它的目标是简化部署 扩展和管理容器化应用程序 Kubernetes最初由Google开发
  • 为分布式做准备吧——远程调用服务(RPC)和基于消息的通信(Message Queue)对比

    文章目录 系统结构 功能特点 应用 系统结构 RPC Message Queue 调用方式 Consumer lt gt Provider Sender lt gt Queue lt gt Receiver 调用对象 Consumer调用的
  • nacos 安装并配置外部数据库

    参考链接 nacos 安装并配置外部数据库 亲测2 0 1 2 0 3 有效 zwb 121 博客园 Nacos 快速开始 下载链接 https github com alibaba nacos releases 启动服务器 Linux U
  • Springboot项目在Jenkins+Docker中实现自动化部署

    Springboot项目在Jenkins Docker中实现自动化部署 一 环境准备 1 项目开发环境 2 Jenkins docker运行环境 二 Docker安装 三 Jenkins安装 四 创建一个Springboot项目 1 使用I
  • SpringCloud-服务注册与发现

    服务注册与发现 前面我们没有服务注册中心 也可以服务间调用 为什么还要服务注册 当服务很多时 单靠代码手动管理是很麻烦的 需要一个公共组件 统一管理多服务 包括服务是否正常运行 等 Eureka用于 服务注册 目前官网已经停止更新 1 Eu
  • 微服务+Jenkins 简单的linux自动部署脚本

    No 1 启停脚本 bin bash 加载配置 避免获取不到java home source etc profile SERVICE HOME 项目路径 SERVICE NAME 服务名称 cd SERVICE HOME SERVICE N
  • Ribbon负载均衡策略DynamicServerListLoadBalancer的ServerListFilter解读

    一 DynamicServerListLoadBalancer在类图中的位置 二 DynamicServerListLoadBalancer源码解读 1 关键代码请见注释 2 源码位置 ribbon master ribbon loadba
  • 10 微服务流程规范篇:高速迭代的研发过程需要怎样的规范?

    上一课时 我讲解了微服务质量保障体系的全景概览 本课时我主要讲解流程规范 高速迭代的研发过程需要怎样的规范呢 业务流程阶段 众所周知 产品研发是为业务服务的 在深入讲解产品研发流程之前 我们先整体看下业务流程 分为 3 个阶段 产品研发阶段
  • GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

    这章是接上一章 使用 RPC包 序列化中没有详细去讲 因为这一块需要看的和学习的地方很多 并且这一块是RPC中可以说是最重要的一块 也是性能的重要影响因子 今天这篇主要会讲其使用方式 文章目录 Protocol Buffers V3 背景以
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个

随机推荐

  • 水电图wp表示什么_装修水电工入门基础知识,刚入行不懂不用急?老师傅告诉你怎么做...

    装修水电工泛指室內装饰装潢水电安装工人 作为装修水电工 不但要懂得水电安装的基本技术规范 施工顺序 验收常识 在施工中 还得与硬装部分的木工 瓦工 腻子工等工种相互配合安装 及软装部分的壁纸工 布艺工等相互协作 装修水电工是技术性要求很强的
  • 11.测试代码

    测试函数 单元测试用于核实函数的某个方面没有问题 测试用例是一组单元测试 一起核实函数各种情形下的行为都符合要求 全覆盖式测试用例包含一整套单元测试 涵盖了各种可能的函数使用方式 为函数编写测试用例 可先导入模块unittest以及要测试的
  • 以下哪个不是python合法的标识符_哪个不是python合法标识符

    标识符是电脑语言中允许作为名字的有效字符串集合 Pyhon标识符规则 1 第一个字符必须是字母或是下划线 即不能以数字开 2 剩下的字符可以是字母 数字和下划线 即不能包含除了下划线以外的符号 空格 运算符 3 大小写敏感 4 Python
  • STM32单片机基础20——使用DAC输出任意指定电压

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的DAC外设 输出任意指定电压值 1 准备工作 硬件准备 开发板 首先需要准备一个开发板 这里我准备的是STM32L4的开发板 BearPi 万用表 软件准备 需要
  • kconfig常用语法,入门必看

    kconfig 1 kconfig简单介绍 Kconfig用来配置内核 它就是各种配置界面的源文件 内核的配置工具读取各个Kconfig文件 生成配置界面供开发人员配置内核 最后生成配置文件 config 2 kconfig和makefil
  • 自己用js做一个搜索栏,超级简单

    csdn很少上线 经常在掘金摸鱼 本文掘金链接https juejin cn post 7058602557987356708 言归正传 为什么要做这个小案例呢 首先我有极度严重的强迫症 对于设备交互界面的追求是越整洁越好 另外由于我的专业
  • 数分工作了三年,我干了件很酷的事情

    目录 1 开始组建微信群 2 寻找到知识星球 3 使用微信圈子 4 使用语雀 5 开始使用飞书 从17年毕业来 一直都在干数据分析的工作 和很多转行的小伙伴一样 没有对口的科班学习 摸不清数据分析具体情况 起初充满着很多迷茫 在刚开始的1年
  • System.Text.Encoding.Default.GetString()后面无法再添加字符

    项目场景 使用 System Text Encoding Default GetString 参数1 时 传入的参数1未填满空间大小 后面仍需添加字符串或字符 问题描述 当参数1未填满空间 System Text Encoding Defa
  • Android学习路线

    Android学习路线 第一阶段 Java面向对象编程 1 Java基本数据类型与表达式 分支循环 2 String和StringBuffer的使用 正则表达式 3 面向对象的抽象 封装 继承 多态 类与对象 对象初始化和回收 构造函数 t
  • 17.网络爬虫—Scrapy入门与实战

    网络爬虫 Scrapy入门与实战 Scrapy基础 Scrapy运行流程原理 Scrapy的工作流程 Scrapy的优点 Scrapy基本使用 豆瓣网为例 创建项目 创建爬虫 配置爬虫 运行爬虫 如何用python执行cmd命令 数据解析
  • 基于R语言的贝叶斯网络模型、现代贝叶斯统计学方法

    基于R语言的贝叶斯网络模型实践技术应用 贝叶斯网络不但能够统合已有的各种统计学方法 如混合回归模型 LASSO 自回归模型 隐马模型等等 而且在很大程度上能够弥补统计学模型不能够进行因果推断的缺憾 以开源的R语言为平台 通过理论和实践相结合
  • pikachu之不安全的文件下载概述

    不安全的文件下载概述 文件下载功能在很多web系统上都会出现 一般我们当点击下载链接 便会向后台发送一个下载请求 一般这个请求会包含一个需要下载的文件名称 后台在收到请求后 会开始执行下载代码 将该文件名对应的文件response给浏览器
  • 二元对数正态分布 (bivariate lognormal distribution) 的几个性质

    二元对数正态分布 bivariate lognormal distribution 的几个性质 摘要 对数正态分布 二元正态分布 bivariate normal distribution 对数正态分布的期望与方差 二元对数正态分布的协方差
  • eclipse写MAPREDUCE程序对HBase表进行操作之 IndexBuilder(对已有表建索引)

    eclipse写MAPREDUCE程序对HBase表进行操作之 IndexBuilder 对已有表建索引 开源 hbase的example mapreduce里有个类IndexBuilder是用来对已有表建索引的 其代码有一点点需要修改 j
  • ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI

    ASP NET Process Model之一 IIS 和 ASP NET ISAPI 前几天有一个朋友在MSN上问我 ASP NET 从最初的接收到Http request到最终生成Response的整个流程到底是怎样的 我觉得这个问题涉
  • java中的CondVal_转载:do...while(0)的妙用

    MTK中有很多有关do while 0 的应用 刚开始可能有很多人不太明白为什么使用do while 0 似乎不加do while 0 该部分的代码也会只执行一次 其实do while 0 是出于优化代码考虑的 do while 0 并不是
  • C# 将ComboBox设置为禁止编辑的方法

    2018年5月8日14 53 21 将ComboBox的DropDownStyle 属性设置为 DropDownList即可 Simple 简单的下拉列表框 始终显示列表 DropDown 可以编辑 与有下拉列表 默认 DropDownLi
  • 对于随机森林的通俗理解

    原文 http blog csdn net mao xiao feng article details 52728164 对于随机森林的通俗理解 一 决策树 决策树是机器学习最基本的模型 在不考虑其他复杂情况下 我们可以用一句话来描述决策树
  • Python 量化投资实战教程(4) —KDJ 策略

    量化投资系列文章 Backtrader 教程 Python 量化投资实战教程 1 Python 量化投资实战教程 2 MACD策略 26 9 Python 量化投资实战教程 3 A股回测MACD策略 Github仓库 https githu
  • 服务治理spring cloud Admin/链路跟踪 ZipKin

    1 Spring Boot Admin Spring Boot Admin 用于监控基于 Spring Boot 的应用 它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI 1 1 简介 Spring