本文概要:大白话剖析调用链监控原理,然后学习Sleuth,Zipkin,然后将Sleuth整合Zipkin,最后学习Zipkin数据持久化(Elasticsearch)以及Zipkin依赖关系图

  • 实战至此,基本功能已经全部实现

1 剖析调用链监控原理

如果我们的项目出现异常了,怎么办呢?

1.1 问题定位需求

◆ 跨微服务的API调用发生异常,要求快速定位(比如5分钟以内)出问题出在哪里,该怎么办?

◆ 跨微服务的API调用发生性能瓶颈,要求迅速定位(比如5分钟以内)出系统瓶颈,该怎么办?

对于这两种情况,传统方式很难解决,需要调用链监控工具排查(有点类似于Linux内核的调用栈日志哦)

调用链监控工具可谓分布式项目维护的必备工具!

1.2 监控的基本原理

  • 譬如说,对于本项目,监控如下请求

  • 定义如下4个时间节点

  • 在DB中维护了一张自关联型数据trace表: 唯一标识,父spanid,服务名称,调用的API,四个时间节点的阶段,数据发生的时间戳



    如此一来,正常情况下,一次调用,DB会生成四条数据,即可知道哪个阶段发生问题!

2 优雅地使用 Sleuth

2.1 何为 Sleuth

  • 官方定位 : Sleuth是一 个Spring Cloud的分布式跟踪解决方案

    讲人话就是调用链监控工具的客户端

2.2 术语条目

Span (跨度)

Sleuth的基本工作单元,它用一个64位的id唯一标识。

除ID外,span还包含其他数据,例如描述、时间戳事件、键值对的注解(标签)、span ID、span父ID等。

前面我们DB中的一条数据就是一个span

trace (跟踪)

一组span组成的树状结构称为trace

即DB中完整的四条数据

Annotation (标注)

● CS ( Client Sent客户端发送)

客户端发起一一个请求,该annotation描述了span的开始。

●SR ( Server Received服务器端接收)

服务器端获得请求并准备处理它。

●SS( Server Sent服务器端发送)

该annotation表明完成请求处理(当响应发回客户端时)。

●CR( Client Received客户端接收)

span结束的标识。客户端成功接收到服务器端的响应。

2.3 为用户中心整合Sleuth

  • 添加依赖





    然后直接启动服务即可

3 Zipkin搭建与整合

3.1 何为Zipkin

Zipkin是Twitter开源的分布式跟踪系统,主要用来收集系统的时序数据,从而追踪系统的调用问题

3.2 搭建 Zipkin Server

Zipkin Server的 API兼容性(微服务通过集成reporter模块,从而Zipkin Server通信) 非常好,对于Spring Cloud Greenwich,Zipkin Server只需安装2.x即可。

  • 下载 : Zipkin官方的Shell下载最新版本
curl -sSL https://zipkin.io/quickstart.sh | bash -s
之后 java -jar启动

可看到也是一个SpringBoot应用



  • 查看9411端口
http://localhost:9411/zipkin/

  • 添加依赖,由于zipkin已经包含sleuth,所以移除那个依赖







    抽样是为了减少性能损失,默认是只上报0.1的trace数据

    调用请求后,zipkin:





  • 由于该请求客户端是浏览器,而其没有集成sleuth,不上报zipkin,所以不显示

4 整合Zipkin之后Nacos报错解决

5 为所有微服务整合Zipkin

对内容中心和网关都按照前面用户中心的步骤整合即可

6 Zipkin数据持久化(Elasticsearch)

STORAGE_TYPE=elasticsearch ES_HOSTS=localhost:9200
java -jar zipkin.jar

7 依赖关系图

  • 一般情况下,是不会显示依赖图的

  • 对此,官方有给出说明

  • 使用了ES就需要使用zipkin-dependencies
  • Zipkin Dependencies使用Elasticsearch的环境变量
  • 开始下载
curl -sSL https://zipkin.io/quickstart.sh
| bash -s io.zipkin.dependencies:zipkin-dependencies:LATEST zipkin-dependencies.jar
  • 启动
STORAGE_TYPE=elasticsearch ES_HOSTS=localhost:9200 java -jar zipkin-dependencies.jar

  • 现在就展示依赖图了!实际可以配置定时任务

Zipkin Dependencies指定分析日期

#分析昨天的数据 (OS/X下的命令)
STORAGE_ TYPE=elasticsearch java -jar zipkin-dependencies.jar
`date -uv-ld +%F` #分析昨天的数据 (Linux下的命令)
STORAGE_ TYPE=elasticsearch java -jar zipkin-dependencies.jar
`date -u -d '1 day ago' +%F` #分析指定日期的数据
STORAGE TYPE=elasticsearch java -jar zipkin-dependencies.jar 2019-12-25

参考

Spring Cloud Alibaba 实战(十三) - Sleuth调用链监控的更多相关文章

  1. 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...

  2. Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashboar ...

  3. Spring Cloud Alibaba(8)---Feign服务调用

    Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...

  4. Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现

    服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos. 一.Sp ...

  5. Spring Cloud Alibaba 实战(十二) - Nacos配置管理

    本章主要内容是:使用Nacos管理配置以及实现配置管理的原因,配置如何管理以及动态刷新和最佳实现总结,最后是Nacos配置刷新原理解读 该技术类似于Spring Cloud Config 1 配置管理 ...

  6. Spring Cloud Alibaba 实战(十一) - Spring Cloud认证授权

    欢迎关注全是干货的技术公众号:JavaEdge 本文主要内容: 如何实现用户认证与授权? 实现的三种方案,全部是通过画图的方式讲解.以及三种方案的对比 最后根据方案改造Gateway和扩展Feign ...

  7. Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin

    前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...

  8. Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战

    Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战 Springboot: 2.1.8.RELEASE SpringCloud: Greenwich.SR2 ...

  9. Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战

    Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战 在阅读本文前,建议先阅读<Spring Cloud Alibaba | Sentinel:分布式系 ...

随机推荐

  1. 深入学习CSS3-flexbox布局

    学习博客:https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 学习博客:http://caibaojian.com/demo/flexbox ...

  2. JavaEE基础(06):Servlet整合C3P0数据库连接池

    本文源码:GitHub·点这里 || GitEE·点这里 一.C3P0连接池 1.C3P0简介 C3P0是一个开源的JDBC连接池,应用程序根据C3P0配置来初始化数据库连接,可以自动回收空闲连接的功 ...

  3. NodeJS4-9静态资源服务器实战_发到npm上

    登录->publish一下 ->上npm官网查看 -> 安装全局 //登录 npm login //推上去npm npm publish //全局安装 npm i -g 你的文件名

  4. JS基础知识——原型与原型链

    1.如何准确判断一个变量的数组类型 2.写一个原型链继承的例子 3.描述new一个对象的过程 4.zepto(或其他框架中如何使用原型链) 知识点: (1)构造函数 function Foo(name ...

  5. springcloud-微服务架构基础

    一 前言 学习微服务要从基础的架构学起,首先你要有个微服务的概念才能学习对吧!!如果你都不知道啥是微服务,就一头扎进去学习,你自己也觉得自己也学不会对吧.本篇文章主要让大家快速了解基础的架构分格,以便 ...

  6. JVM 学习笔记一 :JVM类加载机制

    前言: 最近在看JVM相关资料,这里记录下学习笔记,希望自己能坚持学完,打牢基础.   一.类加载过程 1,类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用 ...

  7. python连接sqlserver和MySQL实现增删改查

    参考python核心编程 编写一个用户洗牌的脚本,根据用户输入,选择连接sqlserver或者MySQL,创建数据库.表,随机生成数据,并实现增删改查. 其中,为了兼容python2和python3, ...

  8. javascript中引用传递的问题如何解决

    我们有时候会向一个方法中传入一个参数,并且对这个参数做一些处理的操作: 但是因为是引用传递,处理过后会对原有的对象造成修改,无法进行反复使用. 如例子: 两次打印的结果一模一样.这样下一个方法在继续使 ...

  9. PromiseKit基本使用及源码解析

    Promise处理一系列异步操作的应用框架,能够保证顺序执行一系列异步操作,当出错时可以通过catch捕获错误进行处理.Promise框架也是很好的诠释了swift的面相协议编程以及函数式编程 两种类 ...

  10. TP5 try{}catch{}异常捕获不到 解决办法

    问题:TP5用下面的方法, 想要获取抛出的异常捕获不到…… 错误的写法: try{ …… } catch (Exception $e) { echo $e->getMessage(); } 正确 ...