微服务架构已经是一个很通用的系统架构,常见的技术栈如下图所示,这张架构图基本涵括了当前微服务体系下的各种技术栈,可能不同的技术栈有不同的开源实现。

链路追踪介绍

对于一个大型的几十个,几百个微服务构成的微服务架构系统,通常会遇到下面的一系列问题。

  • 如何串联整个调用链路,快速定位问题?

  • 如何澄清各个微服务之间的依赖关系?

  • 如何进行各个微服务接口的性能分析?

  • 如何追踪各个业务流程的调用处理顺序?

Skywalking介绍

Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。 Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。

链路追踪框架对比

目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的Dapper实现的

功能和技术方案对比

  • Zipkin是Twitter开源的调用链路分析工具,目前基于Spingcloud sleuth得到了广泛的应用,特点是轻量,部署简单。

  • Pinpoint一个韩国团队开源的产品,运用了字节码增强技术,只需要在启动时添加启动参数即可,对代码无侵入,目前支持Java和PHP语言,底层采用HBase来存储数据,探针收集的数据粒度非常细,但性能损耗大,因其出现的时间较长,完成度也很高,应用的公司较多

  • Skywalking是本土开源的基于字节码注入的调用链路分析以及应用监控分析工具,特点是支持多种插件,UI功能较强,接入端无代码侵入。

  • CAT是由国内美团点评开源的,基于Java语言开发,目前提供Java、C/C++、Node.js、Python、Go等语言的客户端,监控数据会全量统计,国内很多公司在用,例如美团点评、携程、拼多多等,CAT跟下边要介绍的Zipkin都需要在应用程序中埋点,对代码侵入性强。

性能对比

模拟了三种并发用户,500,750,1000,使用JMeter测试,每个线程发送30个请求,设置间隔时间为10ms,使用采用频率为1,即100%。下面是性能测试报告:

从上表可以看出,在三种链路监控组件中,skywalking探针对吞吐量影响最小,zipkin对吞吐量影响适中,pinpoint的探针对吞吐量影响最大。对于内存和cpu的使用,都差不多,相差在10%之内。

Skywalking介绍

Skywalking架构

SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。

  • 探针 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式.
  • 平台后端, 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。 你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统 自定义聚合分析。
  • 存储 通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现。
  • UI 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

Skywalking功能介绍

  • 多种监控手段,可以通过语言探针和service mesh获得监控的数据
  • 支持多重语言的自动探针,包括JAVA, .NET Core和NodeJS
  • 轻量高效,无需大数据平台和大量的服务器资源
  • 模块化,UI ,存储,集群管理都有多种机制可选
  • 支持告警
  • 优秀的可视化解决方案

环境搭建

  • Skywalking agent和业务端绑定在一起,负责收集各种监控数据
  • Skywalking oapservice是负责处理监控数据,接受agent的数据并存储在数据库中,接受来自UI的请求,查询监控数据。
  • Skywalking UI提供给用户,展现各种监控数据和告警。

Skywalking目录结构

Skywalking告警

2 安装Skywalking服务器

下载skywalking:

Downloads | Apache SkyWalking

这里我用的是8.5.0版本的

第1步 默认skywalking不支持gateway服务,我们需要在agent/options-plugins下的gateway的jar复制到/agent/plugins

它的默认端口号是8080,如果想自己修改,可以修改apache-skywalking-apm-bin\webapp下的

webapp.yml

 第2步 启动skywalking

双击/bin/start.bat

 此时会弹出两个黑窗口,如果有一个启动失败则会关闭失败的窗口,必须保证两者都开着

不要关闭黑窗口,最小化即可

logs下可以查看启动日志

3 IDEA集成使用agent

开发环境IDEA中使用探针配置即可集成使用agent,我们把 apache-skywalking-apm-bin 放到本地D:/safety/springcloud目录下,此时我们使用探针配置为3个项目分别配置agent

# 客户端需要的jar所在位置
-javaagent:D:/safety/springcloud/apache-skywalking-apm-bin/agent/skywalking-agent.jar
# 客户端服务名称
-Dskywalking.agent.service_name=springcloud-order
# skywalking地址
-Dskywalking.collector.backend_service=localhost:11800

注意:路径有一部分需要变更为自己存放文件的位置

将上面配置复制到IDEA中,且删除注释:

11800是oapservice集群的端口号,9999是UI服务的端口号 

此时启动IDEA,并访问 http://localhost:9999/效果如下:

跟上边设置的名称对应

3.1 生产环境使用agent

生产环境使用,因此我们需要将agent和每个项目的jar包上传到服务器上,上传apache-skywalking-apm-bin 至/softwares ,再将 工程\hailtaxi-parent中的项目打包,并分别上传到服务器上,如下三个工程:

启动hailtaxi-order

java -jar -javaagent:/softwares/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-order-jar -Dskywalking.collector.backend_service=localhost:11800 springcloud-gateway-1.0-SNAPSHOT.jar &

默认skywalking不会收集gateway微服务的信息,如何让他支持gateway微服务。

4 skywalking数据持久化

skywalking如果服务重新启动,链路日志消失了,因为默认在内存中保存

可以持久化存储到mysql,es存储引擎。

4.1 持久化到mysql中

1.打开\apache-skywalking-apm-bin\config下的application.yml配置文件

添加时区,修改账号密码

 2. 把mysql的驱动放入skywalking的\apache-skywalking-apm-bin\oap-libs中

 3. 自己创建数据库,无需创建表

4.重启skywalking,依旧是bin下的双击startup.bat

5 sky分析

1 Rocketbot-仪表盘

作用:查看被监控服务的运行状态。

监控面板:

1.1 APM

APM: 应用性能管理,通过各种探针采集数据,收集关键指标,同时搭配数据呈现以实现对应用程序性能管理和故障管理的系统化解决方案。

1.1.1 Global全局维度

板块描述:

services load :服务每分钟请求数s1ow services:慢响应服务,单位ms
Un-Health services (Apdex) :Apdex性能指标,1为满分。
show Endpoints:慢响应端点,单面ms
G1obal Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
G1obal Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
底部栏:展示数据的时间区间,点击可以调整

1.1.2 Service服务维度

属性描述:

service Apdex(数字):当前服务的评分
service Apdex(折线图):不同时间的Apdex评分
service Avg Response Times:平均响应延时,单位ms
G1obal Response Time Percentile:百分比响应延时
successfu1 Rate(数字):请求成功率
successfu1 Rate(折线图):不同时间的请求成功率
servce Load(数字):每分钟请求数
servce Load(折线图):不同时间的每分钟请求数
servce Instances Load:每个服务实例的每分钟请求数
show service Instance:每个服务实例的最大延时
service Instance successfu1 Rate:每个服务实例的请求成功率

1.1.3 Instance实例维度

属性描述:

service Instance Load:当前实例的每分钟请求数
service Instance successfu1 Rate:当前实例的请求成功率
service Instance Latency:当前实例的响应延时
vM CPu: jvm占用CPU的百分比
JVM Memory : VM内存占用大小,单位m
JVM GC Time : VM垃圾回收时间,包含YGC和oGC
JVM Gc count: JVM垃圾回收次数,包含YGC和oGC
JVM Thread count (ava service) : VM创建线程数量
CLR xx:类似VM虚拟机(可以直接理解成虚拟机)

1.1.4 Endpoint端点(API)维度

属性描述:

Endpoint Load in current service:每个端点的每分钟请求数
s1ow Endpoints in current service:每个端点的最慢请求时间,单位ms
successful Rate in current service:每个端点的请求成功率
Endpoint Load:当前端点每个时间段的请求数据
Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间
Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
Endpoint successfu1 Rate:当前端点每个时间段的请求成功率

1.2 DataSource展示栏

属性描述:

当前数据库:选择查看数据库指标
Database Avg Response Time:当前数据库事件平均响应时间,单位ms
Database Access successfu7 Rate:当前数据库访问成功率
Database Traffic:CPM,当前数据库每分钟请求数
Database Access Latency Percentile:数据库不同比例的响应时间,单位ms
s1ow statements :前N个慢查询,单位ms
A17 Database Loads:所有数据库中CPM排名
Un-Health Databases:所有数据库健康排名,请求成功率排名

2 拓扑图

3 追踪

属性描述:

左侧:api接口列表,红色-异常请求,蓝色-正常请求
右侧:api追踪列表,api请求连接各端点的先后顺序和时间

操作详情:可以看到底层执行语句

4 性能剖析

如果那个业务慢了可以性能剖析,非常详细

这里我们可以看到追踪里/order/buy/1/1有一步非常慢,我们可以解剖一波

1 性能剖析-->新建任务

 2 运行相应的任务,等待片刻

新建性能剖析属性描述:

服务:需要分析的服务
端点:链路监控中端点的名称,可以在链路追踪中查看端点名称监控时间:采集数据的开始时间
监控持续时间:监控采集多长时间起始监控时间:多少秒后进行采集监控间隔:多少秒采集一次
最大采集数:最大采集多少样本

5 告警

不同维度告警列表,可分为服务、端点和实例。日志收集只在8.4以上版本支持。

Skywalking-UI(三)界面说明_CodingAnHour的博客-CSDN博客_skywalking界面介绍

SpringCloud微服务-----skywalking链路追踪相关推荐

  1. 基SkyWalking实现对k8s集群中微服务的链路追踪

    1.思路如下: 1.sykwalking的安装配置(k8s集群部署配置) 2.sykwalking-agent探针的集成到微服务项目(是打成基础镜像里,然后指定参数(configMap中配置java项 ...

  2. 微服务架构-链路追踪、日志收集篇

    一.链路追踪 1.涉及的插件elasticsearch7.0.0.skywalking-oap-server:8.9.1.skywalking-ui:8.9.1.skywalking-agent 8. ...

  3. 微服务的链路追踪和流量可视化-钉钉告警

    skywalking简介 文章目录 skywalking简介 前言 一.安装 二进制安装 Skywalking:告警功能 前言 目前skywalking主要是做链路追踪和微服务流量可视化.skywal ...

  4. 微服务架构--链路追踪(Nginx篇)

    阅读提示:本文不提供链路追踪的完整解决方案,只提供Nginx层对链路追踪的支持方案! 1 背景介绍 微服务的诞生,解决了传统单体应用的很多问题,如可维护性差.扩展性差和灵活性差等问题(粗粒比较).微服 ...

  5. 【微服务】链路追踪 jaeger

    最近做了一点traces相关的工作,看了关于jaeger的一些内容,来水一篇.(艰难地保持着一月一篇) 为什么需要链路追踪 随着应用的发展,分布式是不可避免的趋势,无论是随着业务的复杂庞大由单体应用拆 ...

  6. 微服务,链路追踪,opentracing+jaeger(六)

    参考文档 opentracing详解:https://pjw.io/articles/2018/05/08/opentracing-explanations/ opentracing中文文档:http ...

  7. Sleuth + Zipkin 微服务分布式链路追踪

    在开发环境中对业务问题的排查可以debugger计算时差等问题进行处理,如果架构复杂微服务嗲用众多,这样的方式就显得鸡肋. 如何快速发现问题? 如何判断故障影响范围? 如何梳理服务依赖以及依赖的合理性 ...

  8. Github三天点击破亿,四天助力金九银十,精通SpringCloud微服务架构,成就大厂梦

    又逢"金九银十",年轻的毕业生们满怀希望与忐忑,去寻找.竞争一个工作机会.已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇.更大的平台. 然而,面试人群众多,技术 ...

  9. SpringCloud微服务(07):Zipkin组件,实现请求链路追踪

    一.链路追踪简介 1.Sleuth组件简介 Sleuth是SpringCloud微服务系统中的一个组件,实现了链路追踪解决方案.可以定位一个请求到底请求了哪些具体的服务.在复杂的微服务系统中,如果请求 ...

最新文章

  1. 骚操作:不重启 JVM,如何替换掉已经加载的类?
  2. 近期活动盘点: Call for Code编程马拉松邀请赛
  3. 人类语言的表现形式和规则
  4. service和thread的区别,何时用service,何时用thread?
  5. 14.6 设置后台线程
  6. mpandroidchart y轴从0开始_从零开始学Pytorch(十七)之目标检测基础
  7. 多元化时代敏捷软件开发的崛起与传统软件工程的延续
  8. mysql主从进行扩展_Mysql主从知识扩展部分1
  9. SAP License:SAP增强应用实例
  10. mongodb日志切割
  11. java什么会引用传递_在java中为什么很多人说有值传递和引用传递?引用传递的本质...
  12. 第五章 APP元素定位
  13. 教你Java 代码性能优化小妙招,速速来看
  14. 禁用word公式编辑器
  15. android webview打开pdf文件
  16. RHEL8.4系统镜像
  17. java 禁用迅雷_【Java】我擦!迅雷的代码结构竟然被扒了精光~
  18. 怎么读取照片上的文字?清描:一键提取,批量识别
  19. 总结今年一些公司的待遇
  20. r中将数据框中数据类型转化_R中的数据类型

热门文章

  1. 【单片机毕业设计】【mcuclub-106】智能晾衣架 | 多功能晾衣架【仿真设计】
  2. TwinCAT更改背景主题颜色
  3. Java web项目利用POI导出EXCEL表格
  4. 易优cms 模板制作教程
  5. 怎么把图片转成JPG格式
  6. alsa 驱动介绍及user层到hw层文件ioctl操作流程分析
  7. windows操作系统知识点
  8. 一文搞懂用k8s部署微服务应用
  9. UEFI开发探索32 – 有趣的图像特效
  10. forrtl: severe (174): SIGSEGV, segmentation fault occurred