精华内容
下载资源
问答
  • 调用链监控

    千次阅读 2015-12-17 14:57:29
    Created with Raphaël 2.1.0用户请求(url/dubbo服务)用户请求(url/dubbo服务)方法B方法B方法C方法C在当前thread 中创建一个transaction,记录调用地址&开始时间在根节点上增加子节点B,记录B的开始执行时间在B节点...
    Created with Raphaël 2.1.0用户请求(url/dubbo服务)用户请求(url/dubbo服务)方法B方法B方法C方法C在当前thread 中创建一个transaction,记录调用地址&开始时间在根节点上增加子节点B,记录B的开始执行时间在B节点上增加子节点C,记录C的开始执行时间记录方法C的完成时间记录方法B的完成时间返回响应给客户端。记录transaction结束时间,添加到消息队列,TheadLocal清理
    展开全文
  • 本文概要:大白话剖析调用链监控原理,然后学习Sleuth,Zipkin,然后将Sleuth整合Zipkin,最后学习Zipkin数据持久化(Elasticsearch)以及Zipkin依赖关系图实战至此,基本功能已经全部实现1 剖析调用链监控原理如果我们的...

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

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

    16e649015c6c1d49e7ab6e2f46d2e672.png

    1 剖析调用链监控原理

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

    1.1 问题定位需求

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

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

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

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

    1.2 监控的基本原理

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

    802c1398fd32d7381a7b52436c6e1235.png

    定义如下4个时间节点

    ab132a28fdade373cb704fadc4eb8b57.png

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

    71297a1b13f943dacaaa261de7a2e070.png

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

    2 优雅地使用 Sleuth

    2.1 何为 Sleuth

    0fb743b2b29bb5a0550ece8213757a14.png

    官方定位 : 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

    添加依赖

    631bab0ce053d3044e6f4fd14c4430a6.png

    7b9565b4b0eb5a7eefaf4cb6df60971c.png

    然后直接启动服务即可

    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应用

    47fd06b5a1609210981e83c251928b4e.png

    d48c838985ececb3ef149a17f0644d82.png

    查看9411端口

    http://localhost:9411/zipkin/

    860b74155dca29dbd5b6fc50be799bd0.png

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

    3d811dc3f3eba1e897fc40a072118fbf.png

    fbdab220b059fb687c8f94017a92564e.png

    b5fc97a52f0034808bd8cfcd7766f0ef.png

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

    调用请求后,zipkin:

    f816bc5ede2c7540c3eb99694dd851bc.png

    4acc8b10989be5a39284535b3864e186.png

    326486b30d53d20da9ad8980b043786f.png

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

    88a8c4d9ec4cd172e8932d698ec5a678.png

    4 整合Zipkin之后Nacos报错解决

    5 为所有微服务整合Zipkin

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

    6 Zipkin数据持久化(Elasticsearch)

    STORAGE_TYPE=elasticsearch ES_HOSTS=localhost:9200

    java -jar zipkin.jar

    38e86360e9e476950159a30cfcc315bc.png

    7 依赖关系图

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

    d002e60f84020d42848ec669e1f47bfb.png

    对此,官方有给出说明

    17fcd970dab2bebb7b9a0a0ee8183a3f.png

    使用了ES就需要使用zipkin-dependencies

    d5fd7b2cb54a2441ffa6d5b4405497f1.png

    Zipkin Dependencies使用Elasticsearch的环境变量

    1c626f267bb692f4a29018f8c0199db3.png

    开始下载

    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

    d60763d70aaf3970500de0b040af8220.png

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

    18bdbadcc843aeb4ceb1cc51893ce3d2.png

    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从入门到进阶]

    展开全文
  • 调用链监控系统中,有几个核心概念需要了解:Trace:Trace是指请求调用的链接过程,Trace id是指此请求调用的ID。 在请求中,将在网络的最开始处生成用于标识此请求的全局唯一trace id。 无论在此请求调用过程中...

    在调用链监控系统中,有几个核心概念需要了解:

    Trace:

    Trace是指请求调用的链接过程,Trace id是指此请求调用的ID。 在请求中,将在网络的最开始处生成用于标识此请求的全局唯一trace id。 无论在此请求调用过程中经过多少个节点,此trace id都将保持不变,并且将继续进行下去。连续传递每一层的调用。 最后,该用户请求在系统中的路径可以通过trace id串在一起。

    Span:

    Span是指一个模块的调用过程,一般用span id来标识。在一次请求的过程中会调用不同的节点/模块/服务,每一次调用都会生成一个新的span id来记录。这样,就可以通过span id来定位当前请求在整个系统调用链中所处的位置,以及它的上下游节点分别是什么。

    Annotation:

    是指附属信息,可以用于附属在每一个Span上自定义的数据。

    具体参考下图:

    3fca2466816f78d63f34829652d8c3a9.png

    从图中可见,一次请求只有一个唯一的trace id=12345,在请求过程中的任何环节都不会改变。在这个请求的调用链中,SpanA调用了SpanB,然后SpanB又调用了SpanC和SpanD,每一次Span调用都会生成一个自己的span id,并且还会记录自己的上级span id是谁。通过这些id,整个链路基本上就都能标识出来了。

    好了,了解了核心概念之后,我们再来看一下它具体是如何工作的,下面选取Twitter开源的Zipkin原理图作为参考:

    881a1ae0f92bfa92acab0772305d8d23.png

    所有的调用链监控系统都由 数据埋点采集、数据存储处理、数据分析展示 几大部分组成,Zipkin也不例外。

    图中左上角Reporter部分集成到应用程序中采集数据,并将数据上报,由Collector进行收集,然后通过Storage模块负责存储,落地到存储系统中(Zipkin用的是Cassandra)。而API模块是可以将处理后的数据提供对外服务的,UI模块就是数据统计展示层了。

    展开全文
  • 微服务调用链监控CAT架构和实践
  • 调用链监控 」是在微服务兴起后才有的一种新流行的监控模式。因为在我们传统单体应用的项目中,不存在服务链/调用链的概念,所以也就根本没有调用链监控的需求了。当我们开始微服务架构之后,我们的很多服务变成...

    「 调用链监控 」是在微服务兴起后才有的一种新流行的监控模式。因为在我们传统单体应用的项目中,不存在服务链/调用链的概念,所以也就根本没有调用链监控的需求了。

    当我们开始微服务架构之后,我们的很多服务变成分布式的了,并且我们对服务进行了拆分,拆分之后,用户的一个请求进来,会依次经过不同的服务节点进行处理,处理完成后再返回结果给用户。那么在整个处理的链条中,如果有任何一个节点出现了延迟或者问题,都有可能导致最终的结果出现异常,有的时候不同的服务节点甚至是由不同的团队开发的、部署在不同的服务器上,那么在这么错综复杂的环境下,我们想要排查出是链条中的具体哪个服务节点出了问题,其实并不容易。

    因此大家就想到了一个办法,将这个请求经过的每一个节点都记录下来,形成一个完整的调用链监控系统,那么一旦发生请求调用异常的情况,只需要去排查这个调用链日志就能很清楚看到出错的环节在哪儿。

    一、为什么需要「 调用链监控 」?

    「调用链监控」是在微服务架构中非常重要的一环。它除了能帮助我们定位问题以外,还能帮助项目成员清晰的去了解项目部署结构,毕竟一个几十上百的微服务,相信在运行时间久了之后,项目的结构很可能就是下面图片这样了,在这种情况下,团队开发者甚至是架构师都不一定能对项目的网络结构有很清晰的了解,那就更别谈系统优化了。

    好了,说了这么多,咱们下面就来具体看一下「调用链监控」的作用有哪些:

    项目网络拓扑图:

    我们可以根据「调用链监控」中记录的链路信息,给项目生成一张网络调用的拓扑图。通过这张图,我们就可以知道系统中的各个服务之间的调用关系是怎样的,以及系统依赖了哪些服务。并且还可以起到监控全局服务的作用,便于架构师掌握系统的状态。

    快速定位问题:

    这个作用前面一直在讲,微服务架构下,问题定位就变得非常复杂了,一个请求可能会经过多个服务节点,那么有这么一套调用链监控系统就能让开发人员快速的定位到问题和相应模块。

    优化系统:

    优化系统也是「调用链监控」很重要的一个功能。因为我们记录了请求在调用链上每一个环节的信息,我们就可以通过这个来找出系统的瓶颈,做出针对性的优化。还可以分析这个调用路径是否合理,是否调用了不必要的服务节点,是否有更近、响应更快的服务节点。通过对调用链路的分析,我们就可以找出最优质的调用路径,从而提高系统的性能。

    提高团队成员自律:

    上面都是系统层面的作用。但如果有了「调用链监控」之后,对团队开发人员的帮助也是非常大的。因为团队所有成员都可以通过这个调用链监控系统看到系统各个模块的状态,相当于给了开发同学一个放大镜,以前开发同学完成项目交付后,只要没有出现问题,可能不太关心系统的优化,但是有这个调用链监控系统之后,哪个模块性能高,哪个模块问题大,一眼就能分辨,通过这么一个看板,开发同学慢慢的也会对自己负责的模块有更多的责任感,也会很自觉的去优化自己的模块。这种习惯的养成,对研发团队而言,非常的重要。

    二、「 调用链监控」的原理?

    在调用链监控系统中,有几个核心概念需要了解:

    Trace:

    Trace是指一次请求调用的链路过程,trace id 是指这次请求调用的ID。在一次请求中,会在网络的最开始生成一个全局唯一的用于标识此次请求的trace id,这个trace id在这次请求调用过程中无论经过多少个节点都会保持不变,并且在随着每一层的调用不停的传递。最终,可以通过trace id将这一次用户请求在系统中的路径全部串起来。

    Span:

    Span是指一个模块的调用过程,一般用span id来标识。在一次请求的过程中会调用不同的节点/模块/服务,每一次调用都会生成一个新的span id来记录。这样,就可以通过span id来定位当前请求在整个系统调用链中所处的位置,以及它的上下游节点分别是什么。

    Annotation:

    是指附属信息,可以用于附属在每一个Span上自定义的数据。

    具体参考下图:

    从图中可见,一次请求只有一个唯一的trace id=12345,在请求过程中的任何环节都不会改变。在这个请求的调用链中,SpanA调用了SpanB,然后SpanB又调用了SpanC和SpanD,每一次Span调用都会生成一个自己的span id,并且还会记录自己的上级span id是谁。通过这些id,整个链路基本上就都能标识出来了。

    好了,了解了核心概念之后,我们再来看一下它具体是如何工作的,下面选取Twitter开源的Zipkin原理图作为参考:

    所有的调用链监控系统都由 数据埋点采集、数据存储处理、数据分析展示 几大部分组成,Zipkin也不例外。

    图中左上角Reporter部分集成到应用程序中采集数据,并将数据上报,由Collector进行收集,然后通过Storage模块负责存储,落地到存储系统中(Zipkin用的是Cassandra)。而API模块是可以将处理后的数据提供对外服务的,UI模块就是数据统计展示层了。

    三、「 调用链监控」的应用?

    了解了调用链监控的原理之后,我们再看看目前业内有哪些主流的开源调用链监控系统:

    CAT

    CAT是由大众点评开源的一款调用链监控系统,基于JAVA开发的。有很多互联网企业在使用,热度非常高。它有一个非常强大和丰富的可视化报表界面,这一点其实对于一款调用链监控系统而来非常的重要。在CAT提供的报表界面中有非常多的功能,几乎能看到你想要的任何维度的报表数据。

    CAT有个很大的优势就是处理的实时性,CAT里大部分系统是分钟级统计。

    CAT主要提供的报表有:

    Transaction报表:

    主要是监控一段代码运行情况,如:运行次数、QPS、错误次数、失败率、响应时间等。

    Event报表:

    主要是监控一行代码/一个事件运行次数,如:程序中某个事件运行了多少次、错误了多少次等。Event报表的整体结构与Transaction报表几乎一样,只缺少响应时间的统计。

    Problem报表:

    主要是统计项目在运行过程中出现的问题,根据Transaction与Event的数据分析出来系统可能出现的异常,比如访问较慢等。

    Heartbeat报表:

    以一分钟为周期,定期向服务端汇报当前运行的一些状态,如:JVM状态、Memory、Thread等。

    Business报表:

    业务监控报表,如订单指标、支付数据等业务指标。

    Open Zipkin

    Zipkin由Twitter开源,支持的语言非常多,基于 Google Dapper 的论文设计而来,国内外很多公司都在用,文档资料也很丰富。在上面讲原理的环节已经介绍过了Zipkin,这里就不赘述了,下面是示例图:

    Naver Pinpoint

    Pinpoint中的服务关系依赖图做得非常棒,超出市面上任何一款产品。另外,Pinpoint因为采用字节码增强方式去埋点,所以在埋点的时候是不需要修改业务代码的,非侵入式的,非常适合项目已经完成之后再增加调用链监控的时候去使用的方案。但是也是由于采用字节码增强的方式,所以它目前仅支持JAVA语言。

    以上,就是对微服务架构中「 调用链监控」的一些思考。

    在微服务架构的系列文章中,前面已经通过文章介绍过了「服务注册 」、「服务网关 」、「配置中心 」、「 监控系统 」,大家可以翻阅历史文章查看。

    另外,为了方便小伙伴们交流微服务架构相关的技术,我创建了一个「 聊聊架构与微服务 」的交流群。

    添加微信后拉你进群:WH-IT-er,加微信时备注:微服务加群

    本文原创发布于微信公众号「 不止思考 」,欢迎关注。涉及 思维认知、个人成长、架构、大数据、Web技术 等。

    展开全文
  • SpringCloud调用链监控

    2021-01-23 16:29:04
    SpringCloud调用链监控 文章目录SpringCloud调用链监控一、ZipKinServer的下载和使用二、项目中使用调用链监控1、引入依赖2、编写配置三、ZipKin数据的持久化 一、ZipKinServer的下载和使用 1、下载zipkinserver ...
  • 分布式系统调用链监控

    万次阅读 热门讨论 2016-12-23 22:51:51
    分布式系统调用链监控 应用架构由集中式向分布式演进后,整个调用关系变得复杂。 分布式架构由复杂且较大规模集群构成,各个应用之间相当独立,可能由不同团队、不同语言实现。 系统一个完整的调用过程可能横跨多个...
  • 一、剖析调用链监控原理 1. 需求 跨微服务的API调用发生异常,要求快速定位出问题出在哪里; 跨微服务的API调用发生性能瓶颈,要求迅速定位出性能瓶颈。 2. 调用链监控原理 3. 常用调用链监控工具 Spring Cloud ...
  • 分布式调用链监控

    2021-03-08 14:59:21
    背景 在微服务架构下,服务按照不同的维度进行拆分,一次请求往往需要涉及多个服务。... 分布式调用链监控组件就在这样的环境下产生了。在这里,不得不提下谷歌公开的论文Dapper。开发Dapper是为了收集更多的复...
  • 调用链监控 - Tracing - APM调用链监控原理和相关概念调用在分布式系统中的流程简述实例相关概念CAT vs Zipkin vs Skywalking埋点方式却别简述APM功能简述个人推荐 调用链监控原理和相关概念 微服务应用与单块应用...
  • 十一:对微服务调用链监控的理解

    千次阅读 2018-08-04 13:03:27
    微服务的调用链监控是解决微服务的复杂性带来的一系列问题的强有效手段之一,从一下几个方面来先理解微服务调用链监控相关: 1. 简介 2. 什么是调用链 3. 为什么要监控调用链 4. 要监控哪些方面 5. 调用链监控原理...
  • 蓝绿灰度埋点调用链监控 全链路日志监控 全链路指标监控 1、蓝绿灰度埋点调用链监控 1.1 蓝绿灰度埋点调用链监控 关于 蓝绿灰度埋点调用链监控 官网描述得很清楚,它内置蓝绿灰度埋点,包括如下: 1. n-d-service-...
  • 调用链监控:CAT

    2019-11-07 16:55:40
    来源: 《微服务架构实战160讲》 ...wd=&eqid=f77cd99e00086116000000065dc0d172 调用链监控 1 解决的问题 微服务下,各种服务之间的调用很复杂,需要调用链...
  • 调用链监控:将这个请求经过的每一个节点都记录下来,形成一个完整的调用链监控系统,那么一旦发生请求调用异常的情况,只需要去排查这个调用链日志就能很清楚看到出错的环节在哪儿。
  • URL监控埋点作用一个http请求来了之后,会自动打点,能够记录每个url的访问情况,并将以此请求后续的调用链路串起来,可以在cat上查看logview可以在cat交易及事件页面上都看到URL和URL.Forward(如果有前请求的话)两...
  • 参考 阿里鹰眼:分布式调用跟踪与监控实战 分布式系统调用链监控
  • SpringBoot实战(十六):集成Skywalking调用链监控系统

    万次阅读 多人点赞 2019-10-24 10:32:41
    Skywalking做为生产级的调用链监控工具,不仅提供了丰富的监控系统,而且通过字节码拦截形式集成系统,对系统没有任何侵入性;最近研究一下调用链项目,在此与大家共享; 【集成调用链】 一、Skywalking的github...
  • URL监控埋点作用一个http请求来了之后,会自动打点,能够记录每个url的访问情况,并将以此请求后续的调用链路串起来,可以在cat上查看logview可以在cat Transaction及Event 页面上都看到URL和URL.Forward(如果有...
  • Skywalking调用链监控平台搭建Skywalking架构简介在Minikube中部署Skywalking监控平台部署YAML文件准备部署开始 Skywalking架构简介 Github官方站点:https://github.com/apache/skywalking 服务器端: Receiver...
  • 调用链监控产品该如何选择?

    千次阅读 2019-02-12 11:26:39
    本文回顾分布式调用链监控(Distributed Tracing)产品的演进史,介绍近年出现的OpenTracing标准,对主流的开源产品进行比较,并给出选型建议。 一、演进史 2012年初,我作为携程框架研发部架构师,主导研发了携程第一...
  • 调用链监控工具一、调用链监控原理二、整合Sleuth 场景需求:项目出现问题,如何发现并快速解决? 一、调用链监控原理 通过记录微服务之间的发送接受进行异常、性能判断 二、整合Sleuth 1、什么是sleuth? 是一...
  • 微服务架构之「 调用链监控 」 做积极的人,而不是积极废人 「 调用链监控 」是在微服务兴起后才有的一种新流行的监控模式。因为在我们传统单体应用的项目中,不存在服务链/调用链的概念,所以也就根本没有...
  • 2 为何需要调用链监控? 在初期的单体应用,应用都打在一个包中,无分布式概念,监控也只需对一些埋点监控。 但是微服务时代下,很多服务在各自的包,一旦出现问题,没有调用链监控就很难定位问题! 3 没有应用...
  • 美团开源的一款调用链监控软件,在国内互联网行业比较流行。 原理 先埋点,使用CAT客户端SDK,在业务逻辑层面通过编码的方式实现埋点和输出;埋点涉及有四个关键概念,分别是transaction, event,metrics和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,268
精华内容 507
关键字:

调用链监控