掌桥专利:专业的专利平台
掌桥专利
首页

基于Opentracing链路追踪业务调用链的方法

文献发布时间:2024-04-18 19:52:40


基于Opentracing链路追踪业务调用链的方法

技术领域

本发明涉及一种业务调用链追踪方法,尤其涉及一种基于Opentracing链路追踪业务调用链的方法。

背景技术

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针,改以引用取代,同时移除原C++与原来运算符重载,也移除多重继承特性,改用接口取代,增加垃圾回收器功能。Java不同于一般的编译语言或直译语言。它首先将源代码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编写,到处运行”的跨平台特性。Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

Ivory为大数据日志分析系统,提供一站式解决指标及日志数据的采集、清洗、转换、存储、搜索、分析、告警、可视化等需求,使用机器学习,快速预测和定位故障,实时监控业务运行健康度,提升企业业务智能运营水平。

Opentracing是一个开放的分布式链路追踪框架。OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

微服务架构下多服务系统遇到故障及性能排查时难以关联具体业务数据,难以判断业务影响范围,存在业务分析难题。因此,有必要提供一种基于Opentracing链路追踪业务调用链的方法,能够方便的搜索统计调用链范围内各种业务数据的实现,为业务功能使用情况分析、业务优化等提供数据支撑,从而优化业务流程编排。

发明内容

本发明要解决的技术问题是提供一种基于Opentracing链路追踪业务调用链的方法,解决现有的微服务无法关联到具体业务数据的问题。

本发明为解决上述技术问题而采用的技术方案是提供一种基于Opentracing链路追踪业务调用链的方法,包括如下步骤:S1:部署微服务Opentrace探针,部署日志采集探针;S2:启动微服务,初始化Opentrace探针和日志采集探针;S3:微服务处理业务请求,Opentrace探针采集调用链信息;S4:微服务打印包含调用链信息的业务处理日志,日志采集探针采集业务处理日志并转发给日志分析系统;S5:日志分析系统对非结构化业务数据进行标准化处理得到结构化业务数据;S6:根据调用链信息串联日志信息生成链路拓扑,根据链路拓扑关联日志中的业务信息,形成业务单次调用链。

进一步地,还包括步骤S7:根据多个单次业务调用链数据进行业务全局画像得到业务全局调用链;统计业务全局调用链的各个分支并计算关键路径。

进一步地,所述步骤S3包括:微服务组件接收用户业务请求,Opentrace探针将符合Opentracing规范的调用链信息作为微服务日志的必要信息写到日志中,所述调用链信息至少包括链路信息traceId、追踪段信息segmentId和跨度信息spanId。

进一步地,所述步骤S1中部署微服务Opentrace探针包括:在微服务组件中植入java脚本,通过java的代理机制无侵入的植入Opentrace探针,当Opentrace探针检测到微服务组件的业务操作时,按照Opentracing规范,通过扩展的java日志框架添加调用链信息。

进一步地,所述java日志框架包括log4j、logback或log4j2,扩展java日志框架包括制定微服务日志规范规定日志的必要信息,日志的必要信息包括:日志输出时间戳timestamp、追踪段信息segmentId、父跨度信息parent_spanId、跨度信息spanId、线程名thread、日志级别level、链路信息traceId、微服务托管主机名/IP hostName、微服务IP及端口port、微服务名serverName、处理开始时间戳startTime、方法名method、方法入参input、方法出参output、方法耗时times和自定义业务日志message。

进一步地,所述步骤S4包括:日志采集探针将业务处理日志切割为一个个完整的离散日志事件并发送到日志分析系统;所述日志采集探针针对跨服务的RPC远程调用、消息队列、缓存、数据库操作接口进行探测,默认增加记录日志调用链ID、父跨度ID、当前跨度ID和业务字段信息,使得微服务运行过程中记录的离散日志事件包含跨服务链路信息,从而形成跨越多个微服务的链路级别日志;所述日志分析系统采集微服务记录的链路级别日志作为业务调用链回溯的原始分析数据。

进一步地,所述步骤S5包括:日志分析系统将非结构化的离散日志事件数据进行正则处理,提取关键信息并结构化业务数据。

进一步地,所述步骤S6具体包括:根据日志中的链路信息traceId、追踪段信息segmentId和跨度信息spanId重新组装结构化后的日志数据构建一条链路拓扑,通过在链路拓扑范围内搜索分析日志数据,将业务数据关联到链路拓扑,形成单次业务调用链。

进一步地,所述步骤S7包括:S71:根据调用链信息,叠加多个单次业务调用链数据,进行业务全局画像构建全局业务调用链;S72:给全局业务调用链的每个节点分配权重;S73:以业务最开始的根跨度为起点,根据调用情况重复描绘业务的调用链路,统计全局业务调用链的各个链路的经过次数,根据节点的权重和链路的经过次数计算得到业务的关键调用路径。

进一步地,所述步骤S72给全局业务调用链的每个节点分配静态权重和动态权重,所述静态权重为判断节点是否可用的节点权重,根据节点上记录存储的资产信息,通过基于资产的监控指标的健康度算法计算得到;所述动态权重为用于判断业务流量流向的流量权重,基于链路级别日志统计指定时间窗内的节点间调用次数和业务拓扑的入度出度信息,根据平滑算法计算得到。

本发明对比现有技术有如下的有益效果:本发明提供的基于Opentracing链路追踪业务调用链的方法,通过扩展OpenTracing的标准协议,把链路信息(traceId)、追踪段信息(segmentId)和跨度信息(spanId),通过探针添加到服务日志并输出到日志分析系统根据链路信息重新组装日志信息并展示链路调用过程;统计汇聚众多的单次调用链信息对业务进行全局画像,获取各种场景下业务的分支和关键路径信息,为业务优化提供依据。

附图说明

图1为本发明实施例中基于Opentracing链路追踪业务调用链的方法流程图;

图2为本发明实施例中基于Opentracing链路追踪业务调用链的方法数据流向图;

图3为本发明实施例中单次调用链示意图;

图4为本发明实施例中全局业务调用链示意图;

具体实施方式

下面结合附图和实施例对本发明作进一步的描述。

基本概念说明:

链路trace:一次完整请求、事务或流程在分布式系统中的执行工作流。

追踪段segment:是链路trace在一个进程内所有跨度span的集合,用来标记链路trace在分布式应用架构中单一应用执行的全部操作,是基于Opentracing的一个创新概念。

跨度span:一种由执行方法命名的操作,组成工作流的一部分。spans具有key:value标签(Tags),以及附加到特定span实例的细粒度、带时间戳的结构化日志(调用链日志)。跨度span之间可以是以下逻辑关系:父子(ChildOf)逻辑关系:如spanB和spanC为spanA的子跨度,spanB和spanC可以是顺序执行,也可以是并行。旁挂(FollowsFrom)逻辑关系:旁挂关系用以标识兄弟span之间的执行顺序。

跨度上下文span context:携带工作流的跟踪信息,包括当它通过网络或消息总线将服务传递给服务时携带的信息。跨度上下文span context包含链路信息traceId、跨度信息spanId或parent-spanId/child-spanId和跟踪系统需要传播到下游服务的任何其他数据。

OpenTracing中的链路trace是通过跨度span隐式定义的,链路trace可以认为是跨度span的有向无环图,其中跨度span之间的边称为引用(Reference)。

图1为本发明实施例中基于Opentracing链路追踪业务调用链的方法流程图;图2为本发明实施例中基于Opentracing链路追踪业务调用链的方法数据流向图。

请参见图1和图2,本发明实施例的基于Opentracing链路追踪业务调用链的方法,包括如下步骤:

步骤S1:部署微服务Opentrace探针,部署日志采集探针;

部署微服务Opentrace探针包括:在微服务组件中植入java脚本,通过java的代理机制无侵入的植入Opentrace探针,当Opentrace探针探针检测到微服务组件的业务操作时,按照Opentracing规范,通过扩展的java日志框架添加调用链信息。java日志框架包括log4j、logback或log4j2,扩展java日志框架包括制定微服务日志规范规定日志的必要信息,日志的必要信息包括:日志输出时间戳timestamp、追踪段信息segmentId、父跨度信息parent_spanId、跨度信息spanId、线程名thread、日志级别level、链路信息traceId、微服务托管主机名/IP hostName、微服务IP及端口port、微服务名serverName、处理开始时间戳startTime、方法名method、方法入参input、方法出参output、方法耗时times和自定义业务日志message。具体如下表1日志信息表所示。

表1日志信息表

步骤S2:启动微服务,初始化Opentrace探针和日志采集探针;

步骤S3:微服务处理业务请求,Opentrace探针采集调用链信息;微服务组件接收用户业务请求,Opentrace探针将符合Opentracing规范的调用链信息作为微服务日志的必要信息写到日志中,所述调用链信息至少包括链路信息traceId、追踪段信息segmentId和跨度信息spanId。

步骤S4:微服务打印包含调用链信息的业务处理日志,日志采集探针采集业务处理日志并转发给日志分析系统;日志采集探针将业务处理日志切割为一个个完整的离散日志事件并发送到日志分析系统。

日志采集探针是用字节码增强技术,针对跨服务的RPC远程调用和消息队列、缓存、数据库等常见中间件操作接口探测并默认增加记录日志调用链ID、父跨度ID、当前跨度ID、业务字段等相关信息,将微服务运行过程中记录的离散日志事件包含跨服务链路信息,形成跨越多个微服务的链路级别日志(例如微服务在何时执行了什么操作,上游哪一事件触发该操作,影响下游哪些操作等完整信息)。日志分析系统采集微服务记录的链路级别日志作为业务调用链回溯的原始分析数据。

步骤S5:日志分析系统对非结构化业务数据进行标准化处理得到结构化业务数据;日志分析系统将非结构化的离散日志事件数据进行正则处理,提取关键信息并结构化业务数据。日志数据的采集、清洗、转换、存储、搜索、分析是日志分析系统的基本功能,此处不深入展开说明。

步骤S6:根据调用链信息串联日志信息生成链路拓扑,根据链路拓扑关联日志中的业务信息,形成业务单次调用链。

根据日志中的链路信息traceId、追踪段信息segmentId和跨度信息spanId重新组装结构化后的日志数据构建一条链路拓扑,通过在链路拓扑范围内搜索分析日志数据,将业务数据关联到链路拓扑,形成单次业务调用链。如图3所示。

还包括步骤S7:根据多个单次业务调用链数据进行业务全局画像得到业务全局调用链;统计业务全局调用链的各个分支并计算关键路径。

S71:根据调用链信息,叠加多个单次业务调用链数据,进行业务全局画像构建全局业务调用链;

S72:给全局业务调用链的每个节点分配如下的静态权重和动态权重:

1)静态权重(节点权重),节点指的是记录到CMDB资产库并有完善监控指标的各类业务微服务、消息队列、缓存、数据库等资产信息,资产的监控指标分为生死指标、黄金指标、白银指标,通过基于这三类指标的健康度算法计算出单个节点的权重(100内的正数,判断节点是否可用);

2)动态权重(流量权重),这个主要是基于链路级别日志统计指定时间窗内的节点间调用次数和业务拓扑的入度出度信息,根据平滑算法生成一个100内的正数(判断业务流量流向);

S73:以业务最开始的根跨度为起点,根据调用情况重复描绘业务的调用链路,统计全局业务调用链的各个链路的经过次数,根据节点的权重和链路的经过次数计算得到业务的关键调用路径。如图4所示,通过具体实施例可以看出,关键调用路径的节点是最多链路经过的节点。

综上所述,本发明实施例的基于Opentracing链路追踪业务调用链的方法,通过扩展OpenTracing的标准协议,把链路信息(traceId)、追踪段信息(segmentId)和跨度信息(spanId),通过探针添加到服务日志并输出到日志分析系统根据链路信息重新组装日志信息并展示链路调用过程;统计汇聚众多的单次调用链信息对业务进行全局画像,获取各种场景下业务的分支和关键路径信息,为业务优化提供依据。

虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。

相关技术
  • 一种基于AOP注解的调用链追踪与业务分析方法
  • 基于OpenTracing规范的拟态应用分布式追踪方法
技术分类

06120116332582