Spring Cloud Alibaba 实战(十三) - Sleuth调用链监控
本文概要:大白话剖析调用链监控原理,然后学习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)
Elasticsearch的下载安装参阅
Elasticsearch 实战(三) - Mac OS上安装和启动Elasticserch, KibanaZipkin提供了很多的环境变量

配置环境变量,即可把数据存入ES
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-sleuth
- [Spring Cloud Alibaba从入门到进阶]
Spring Cloud Alibaba 实战(十三) - Sleuth调用链监控的更多相关文章
- 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...
- Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)
目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashboar ...
- Spring Cloud Alibaba(8)---Feign服务调用
Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...
- Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现
服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos. 一.Sp ...
- Spring Cloud Alibaba 实战(十二) - Nacos配置管理
本章主要内容是:使用Nacos管理配置以及实现配置管理的原因,配置如何管理以及动态刷新和最佳实现总结,最后是Nacos配置刷新原理解读 该技术类似于Spring Cloud Config 1 配置管理 ...
- Spring Cloud Alibaba 实战(十一) - Spring Cloud认证授权
欢迎关注全是干货的技术公众号:JavaEdge 本文主要内容: 如何实现用户认证与授权? 实现的三种方案,全部是通过画图的方式讲解.以及三种方案的对比 最后根据方案改造Gateway和扩展Feign ...
- Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin
前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战 Springboot: 2.1.8.RELEASE SpringCloud: Greenwich.SR2 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战 在阅读本文前,建议先阅读<Spring Cloud Alibaba | Sentinel:分布式系 ...
随机推荐
- 修改IE默认页的指向
方法一: 1.打开IE浏览器 → 单击 工具 → Internet选项 2.填上你要设置的主页网址 3.重启IE浏览器,成功设置主页 方法二: 1.按住键盘"win+r" → 输入 ...
- 聊聊JS的二进制家族:Blob、ArrayBuffer和Buffer
事实上,前端很少涉及对二进制数据的处理,但即便如此,我们偶尔总能在角落里看见它们的身影. 今天我们就来聊一聊前端的二进制家族:Blob.ArrayBuffer和Buffer 概述 Blob: 前端的一 ...
- 面试题-JS中的作用域相关问题
对象类型: 原始数据类型存储的是值,而对象类型存储的是地址(指针).下面的这个例子就比较有意思了. 先看题: function test(person) { person.age = 26 perso ...
- Kubernetes基本概念和术语之《Master和Node》
Kubernetes中的大部分概念如Node.Pod.Replication Controller.Service等都可以看作一种“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的k ...
- 获取本地计算机名称和Ip地址
using System.Net; Dns.GetHostName();//获取本地计算机主机名 IPAddress[] IP = Dns.GetHostAddresses(Dns.GetHostNa ...
- Redis Cluster 的数据分片机制
上一篇<分布式数据缓存中的一致性哈希算法> 文章中讲述了一致性哈希算法的基本原理和实现,今天就以 Redis Cluster 为例,详细讲解一下分布式数据缓存中的数据分片,上线下线时数据迁 ...
- MySql 5.7.28 安装注意事项
刚好最近用到了5.7,所以顺便整理记录一下,5.7与5.6的区别是5.7不可以使用空密码直接登录 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mys ...
- test-hellow world!
//for C #include<stdio.h> int main() { printf("hellow world!"); return 0; } #for pyt ...
- [译]C# 7系列,Part 2: Async Main 异步Main方法
原文:https://blogs.msdn.microsoft.com/mazhou/2017/05/30/c-7-series-part-2-async-main/ 你大概知道,C#语言可以构建两种 ...
- 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构
目录 实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构 准备环境: 准备软件版本: 主机名修改用以区分 数据库服务器 实现数据库二进 ...