zoukankan      html  css  js  c++  java
  • 错误归因调用链

    一、背景介绍

    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做统计分析。

    五、效果展示

    调用链列表页面:

     调用链树:

    调用链详情:

  • 相关阅读:
    Android——继续深造——从安装Android Studio 2.0开始(详)
    PHP——安装wampserver丢失MSVCR110.dll
    Marza Gift for GDC 2016
    Retrieve OpenGL Context from Qt 5.5 on OSX
    Space Time Varying Color Palette
    Screen Space Depth Varying Glow based on Heat Diffusion
    Visualization of Detail Point Set by Local Algebraic Sphere Fitting
    Glass Dragon
    Jump Flood Algorithms for Centroidal Voronoi Tessellation
    京都之行
  • 原文地址:https://www.cnblogs.com/wangzhuxing/p/10269529.html
Copyright © 2011-2022 走看看