错误归因调用链

一、背景介绍

1、在微服务时代,服务与服务之间的调用关系错综复杂,某一服务出问题可能会导致整条链路雪崩。

2、微服务的请求链路长、涉及服务多、排查问题难,我们如何快速的定位到异常服务,尽快解决生产问题

3、我们保持对业界方案关注的同时,如:zipkin、skywalking、ELK等,如何结合自身项目的特点,搭建一套高可用、可扩展的错误归因系统?

目前的zipkin和ELK也存在一些问题没有解决:

zipkin主要是告诉我们请求报错了,但是并不能发现运行时异常,例如:业务系统捕获了一个Exception,返回了一个异常码,这是上游调用链不会上报错误信息。对于链路平均请求时间没有提供统计功能。

ELK使用于已经知道错误的情况下去查找具体发生了什么?但是对于发生的频率,接口调用次数、错误率没有很直观的展示。另外频繁的在zipkin和ELK之间切换也是很不好的体验。

开始想在zipkin的基础上进行改造,后来发现自己实现更加灵活、更容易扩展。

二、架构图

数据采集:

  基本是过滤器和aop思想在请求前后埋点、收集请求信息。

数据传输层:

  收集完可以选择发送kafka或打印日志到本地,从日志中收集请求信息类似ELK。

数据过滤与转换:

  可采样、去重复、去ELK中查询运行时异常信息等分析。可以自己扩展。处理完可以选择存储方式、包括做一些优化、例如:列储存、每天建立一个索引。

数据存储:

  Elasticsearch和mysql等,可以自己扩展。

三、调用链数据(span)

1、调用链本身数据
2、本地服务信息
3、远程服务信息
4、参数、协议等
5、异常信息

       {
          "traceId": "cc43026d3e04462fb7fd488fab860891",
          "id": "i6pmhdzdw6sln8vr",
          "parentId": "7n01ym82zzvmfquj",
          "traceType": "http-client"
          "name": "http://127.0.0.1:8090/doNormal",
          "duration": 53,
          "start": 1543034698671,
          "resultType": "success",
          "localHost": "172.22.51.117",
          "localPort": 80,
          "localServiceName": "sscj-games-server-entrance",
          "remoteHost": "127.0.0.1",
          "remotePort": 8090,
           "remoteServiceName": "sscj-games-server-entrance",
          "tagMap": {
            "rest.method": "getForObject",
            "result": "resp_normal",
            "http.reqHeader": "{user-agent=Java/1.8.0_51}",
            "args[1]": "‘java.lang.String‘",
            "args[0]": "http://127.0.0.1:8090/doNormal",
            "http.method": "GET",
            "http.code": "200",
            "args[2]": "[]"
          },
          "exceptionMsg": "",
          "exceptionType": "",
        }

1、调用树结构

2、调用过程

3、采集校验流程

四、数据过滤和存储

1、数据过滤与存储

过滤器可横向扩展多个、自己实现的过滤器更加灵活;可以根据需求去做统计、分析、预警等。

2、数据查询与展示

由Elasticsearch聚合api做统计分析。

五、效果展示

调用链列表页面:

调用链树:

调用链详情:

原文地址:https://www.cnblogs.com/wangzhuxing/p/10269529.html

时间: 2024-11-08 18:51:48

错误归因调用链的相关文章

跟着小程学微服务-自己动手扩展分布式调用链

一.说在前面 微服务是当下最火的词语,现在很多公司都在推广微服务,当服务越来越多的时候,我们是否会纠结以下几个问题: 面对一笔超时的订单,究竟是哪一步处理时间超长呢? 数据由于并发莫名篡改,到底都谁有重大嫌疑呢? 处理遗漏了一笔订单,曾经是哪个环节出错把它落下了? 系统莫名的报错,究竟是哪一个服务报的错误? 每个服务那么多实例服务器,如何快速定位到是哪一个实例服务器报错的呢? 现在很多系统都要求可用性达到99.9%以上,那么我们除了增加系统健壮性减少故障的同时,我们又如何在真正发生故障的时候,快

分布式服务追踪与调用链 Zikpin

分布式服务追踪与调用链系统产生的背景 在为服务中,如果服务与服务之间的依赖关系非常复杂,如果某个服务出现了一些问题,很难追查到原因,特别是服务与服务之间调用的时候. 在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂.一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过高或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了.Spring Cloud Sleuth 提供了分布式

从Consumer分析Dubbo调用链

入手 继上一篇不成熟的源码分析经历之后,为了搞清楚Consumer是如何与Provider通信的,于是又一言不合翻看起了源码.好,进入正题,依旧从RegistryDirectory这个核心类入手: // 这里的入参urls是所有可用的provider的url private Map<String, Invoker<T>> toInvokers(List<URL> urls) { Map<String, Invoker<T>> newUrlInvo

IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法

关闭 IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll,经过排除发现原来是两个斜杠导致 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 -

Cat 客户端如何构建调用链消息树

场景 & 代码 Inner0 中的某方法调用了 Inner1,代码 Inner1的代码很简单, Cat通过一个线程本地变量来保存调用链的相关信息,其中核心的数据结构是消息树和操作栈.消息树用来存数据,操作栈用来构建节点的层次关系. 在上面的调用过程中,这两个数据结构状态的变化如下 更复杂的场景 数据的变化过程

java微服务分布式调用链APM监控

几种分布式调用链监控组件的比较微服务架构下,服务按照不同的维度进行拆分,一次请求请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器,横跨多个不同的数据中心.因此,就需要一些可以帮助理解系统行为.用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题. 分布式调用链监控组件在这样的环境下产生了.最出名的是谷歌公开的论文提到的 Dapper .开发Dapper是为了收集更多的复杂分

dubbo+zipkin调用链监控(二)

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

dubbo+zipkin调用链监控

图片描述(最多50字)收集器抽象 由于zipkin支持http以及kafka两种方式上报数据,所以在配置上需要做下抽象. AbstractZipkinCollectorConfiguration 主要是针对下面两种收集方式的一些配置上的定义,最核心的是Sender接口的定义,http与kafka是两类完全不同的实现. public abstract Sender getSender();其次是协助性的构造函数,主要是配合构建收集器所需要的一些参数. zipkinUrl如果是http收集,那么对应

微服务的调用链

微服务的复杂性需求: 出现问题后,定位困难,需要对整个调用链路有个完善的监控 链路复杂,需要清晰的链路图谱反映服务之间的依赖.调用关系 整体系统性能及运行情况,需要明确的体现,才能根据实际情况调整资源 监控内容: 图形化展示整个调用链路 系统的性能指标 健康状况 基础告警 监控原理: RootSpan会生成一个Trace id以及parent span id Trace id是整个调用链的监控跟踪ID span是服务中一次请求以及对应响应这个span的id 几个概念解释: ] 解决方案,技术选型