错误归因调用链

编程入门 行业动态 更新时间:2024-10-26 17:25:57

<a href=https://www.elefans.com/category/jswz/34/1771449.html style=错误归因调用链"/>

错误归因调用链

一、背景介绍

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

五、效果展示

调用链列表页面:

 

 调用链树:

调用链详情:

 

转载于:.html

更多推荐

错误归因调用链

本文发布于:2024-02-10 19:50:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1676975.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!