小白使用分布式追踪系统

在一个微服务体系中,对于应用之间的通信、接口调用如何做到跟踪和监控,一直是一个比较难的问题。

比如A是做商品服务开发的,而B是做订单服务开发的,B在下单的时候需要调用到商品服务的查询商品库存接

口和查询商品明细接口,才能够完成下单流程。现在出现的问题就是下单很慢,要耗时20s。多么恐怖的耗时,

我一个用户,真金白银买你的东西,你却半天不让我下单成功,不想卖直说好吧。

  看到没有,在这个过程中,就算最终能够下单成功,也避免不了用户对商家的抱怨与不满,要是多来几次,

你就永远的失去这个客户了。所以老板命令B必须找出原因,为什么下个单这么慢?B最开始想采用打log的方式,

后来发现这样很不科学,订单服务中除了调用商品服务还要调用积分服务,用户服务等等,所以为了尽可能对代

码改动小而又能够准确定位各个服务间调用存在的问题,B选择了使用分布式追踪系统(distributed tracing system)。

  SpringCloud提供了组件Sleuth,该组件实现了分布式追踪解决方案,具体是个什么东西,可以参考官网描述:

Spring Cloud Sleuth implements a distributed tracing solution for Spring Cloud, borrowing heavily from DapperZipkin

and HTrace. For most users Sleuth should be invisible, and all your interactions with external systems should be

instrumented automatically. You can capture data simply in logs, or by sending it to a remote collector service.

  简单来说就是Sleuth实现了一个分布式追踪解决方案,其中大量借鉴了Dapper,Zipkin等成熟分布式追踪系统。对于用户来说

Sleuth本身是不可见的,我们可以在日志或者远程收集器上看到追踪记录。

  这里我们重点需要知道的是,Sleuth本身是不可见的,我们如果想要具体的追踪记录需要到日志或者一些分布式追踪系统(比如Zipkin)

中去查看,这里我使用的是Zipkin。Zipkin又是个啥玩意儿?

  

Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in service architectures.

Features include both the collection and lookup of this data.

If you have a trace ID in a log file, you can jump directly to it. Otherwise, you can query based on attributes such as service,

operation name, tags and duration. Some interesting data will be summarized for you, such as the percentage of time spent

in a service, and whether or not operations failed.

  Zipkin最重要的特征就是collect和lookup,可以帮助我们收集应用发来的span(span是指一个跨度,如order调用product接口,

这个过程就是一个跨度)并提供UI界面展示查找这些记录。这样我们就可以很方便的定位问题。

  接下来看下如何使用Sleuth和Zipkin吧!

  引入依赖

<!--包含sleuth和zipkin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

  这个依赖同时包含了sleuth和zipkin

  调整日志级别

logging:
  level:
    root: INFO
    org.springframework.web.servlet.DispatcherServlet: DEBUG
    org.springframework.cloud.sleuth: DEBUG

  下载Zipkin

  先去官网看下下载方式

  最方便的,用docker下载安装,在安装了docker的机器上执行

docker run -d -p 9411:9411 openzipkin/zipkin

  docker ps查看一下进程起没起来

  然后在应用里面配置zipkin地址

zipkin:
    base-url: http://localhost:9411/
    sender:
      type: web

  再配置一下sleuth的抽样比例

sleuth:
    sampler:
      probability: 1

  抽样比例是什么意思呢?比如我配置成0.1,那么就是每10个服务间的调用,会有一个的追踪记录被发送到zipkin

存储分析,而这里默认值就是0.1,为了演示效果我配置成1,就是所有的服务间调用的记录都会被发送到zipkin上

  

  然后我们启动订单服务和商品服务,访问订单服务,订单服务会调用商品服务,那么理论上就会在日志

和zipkin上看到记录。

  先看日志

  可以看到这里有调用的记录被打出来,格式是这样的:[product,fc6f693f47d9d5d1,fc6f693f47d9d5d1,true]

  其中product代表当前的服务,fc6f693f47d9d5d1是traceId,后面的fc6f693f47d9d5d1是spanId,还有个

parentId是可选的,相关的spanId拥有同一个traceId,后面true表示要将span发送到远程服务上去,那我们现在就

可以看下zipkin上有没有相关信息:

  http://localhost:9411

  

  

  通过查看order和product的追踪记录就可以发现,product的get接口getProductList耗时最久,用了3.228s

这就是一个分布式服务追踪系统的基本功能了。除了这些,还有更多高级功能等待你去使用,参考下面的链接去看看吧:

  https://zipkin.io/

  https://spring.io/projects/spring-cloud-sleuth

  本文到此结束,谢谢各位看官阅读!

原文地址:https://www.cnblogs.com/alinainai/p/11197454.html

时间: 2024-07-30 07:54:23

小白使用分布式追踪系统的相关文章

SkyWalking+Asp.Net Core 分布式追踪系统

SkyWalking 是一套(APM)分布式追踪系统,SkyWalking提供了很多数据存储列如:Mysql,H2,Elasticsearch7 等,我这里用的是Elasticsearch7 ,SkyWalking默认H2,H2是内存数据库,数据文件一旦损坏oapservice就启动不了,所以我这里用的是Elasticsearch7 . SkyWalking下载地址 Elasticsearch下载地址 SkyWalking 安装的环境要求 CentOS7 JDK8+ Elasticsearch7

SkyWalking 分布式追踪系统

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响,所以会深深的感受到 “银弹” 这个词是不存在的,每种架构都有其优缺点 . 目前主要的一些 APM 工具有: Cat.Zipkin.Pinpoint.SkyWalking, SkyWalking 它是一款优秀的国产 APM 工具,包括了分布式追踪.性能指标分析.应用和服务依

分布式追踪系统sleauth+zipkin

原文地址:https://www.cnblogs.com/fengli9998/p/10382926.html

Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控

在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的.小的模块或者重用已经有的模块来构建复杂的系统.随着模块的不断增多,一次请求可能会涉及到十几个甚至几十个服务的协同处理,那么如何准确快速的定位到线上故障和性能瓶颈,便成为我们不得不面对的棘手问题. 为解决分布式架构中复杂的服务定位和性能问题,Google在论文<Dapper, a Large-Scale Distributed Systems Tracing Infrastructure>

分布式链路追踪系统预研第二篇

本文为博主原创文章,未经博主允许不得转载. 在上篇随笔后,分布式链路在缓慢推进.一直没什么兴致写,zipkin使用elasticsearch作为数据完全是可行的.但是揉合这两者,就存在两种方案: 第一种,保持zipkin,替换掉存储.即保持zipkin架构,替换掉默认数据存储,改用elasticsearch作为存储.这完全是可行的,但是做出来的也仅仅是一个分布式链路追踪系统.zipkin官方有相应的多数据源的实现源码,有兴趣大家可以自行去git上看. 由于我们想要的不只是分布式链路追踪系统,我们

基于zipkin分布式链路追踪系统预研第一篇

分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Infrastructure”(译文可参考此处),Twitter的zipkin是基于此论文上线较早的分布式链路追踪系统了,而且由于开源快速被各社区所研究,也诞生了很多的版本. 在这里也是对zipkin进行研究,先贴出Twitter zipkin结构图. 结构比较简单,大概流程为: Trace数据的收集至Scribe(Facebook开源的日志传输通路)或

zipkin分布式链路追踪系统

基于zipkin分布式链路追踪系统预研第一篇 分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Infrastructure”(译文可参考此处),Twitter的zipkin是基于此论文上线较早的分布式链路追踪系统了,而且由于开源快速被各社区所研究,也诞生了很多的版本. 在这里也是对zipkin进行研究,先贴出Twitter zipkin结构图. 结构比较简单,大概流程为: Trace数据的收集至Scr

Laravel + go-micro + grpc 实践基于 Zipkin 的分布式链路追踪系统 摘自https://mp.weixin.qq.com/s/JkLMNabnYbod-b4syMB3Hw?

分布式调用链跟踪系统,属于监控系统的一类.系统架构逐步演进时,后期形态往往是一个平台由很多不同的服务.组件构成,用户请求过来后,可能会经过其中多个服务,如图 不过,出问题时往往很难排查,如整个请求变慢.偶尔报错.不可用等,我们很难得知具体是由哪一个或哪些服务引起的,通常开发同学都会互相甩锅,最后不得不花大量时间人肉 tracing 项目初期时,可以简单处理,通过生成唯一 request_id ,在各个方法记录日志,方便排查问题.中后期系统拆分为各个子服务时,要么继续推进原有的 request_i

分布式链路监控与追踪系统

1.分布式链路监控与追踪产生背景2.SpringCloud Sleuth + Zipkin3.分布式服务追踪实现原理4.搭建Zipkin服务追踪系统5.搭建Zipkin集成RabbitMQ异步传输6.SpringCloud2.x新知识介绍7.发布SpringCloud2.0x百级完整超清视频教程含源码 分布式链路监控与追踪产生背景 在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂.一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这