基于配置中心的调用链数据采集系统、方法及存储介质与流程

文档序号:25721621发布日期:2021-07-02 21:05阅读:114来源:国知局
基于配置中心的调用链数据采集系统、方法及存储介质与流程

本发明涉及计算机技术领域,尤其是涉及一种基于配置中心的调用链数据采集系统、方法及存储介质。



背景技术:

在分布式系统中,一个请求会产生一个调用链,调用链通过全局的traceid进行关联,记录了请求发生经过的系统和系统间的关系。对服务调用链的跟踪已经是卡中心分布式全栈监控系统中定位问题和性能分析的重要手段。

一次完整的调用请求访问多个系统或中间件时会产生多条调用链数据,这些调用链数据包括服务调用服务,服务调用数据库,服务调用redis,服务调用kafka,服务调用rabbitmq。采集调用链数据必须做到配置灵活,支持plugin模式,支持动态开关,支持数据采样,数据缓冲,接入无感知的功能。

1配置灵活

调用链数据来源于不同的服务,采集端在配置调用链采集配置时还可以针对不同的服务配置是否开启数据采集。采集配置包括:采集功能全局开关,采样率配置,数据输出的kafkatopic,单条消息最大字节数,数据输出线程数,数据输出队列最大span数,数据输出队列最大字节数,数据输出开关,数据输出kafka地址,不同服务的采集开关。不同服务的采集开关包括:数据库jdbc调用链开关,redis调用链开关,kafka调用链开关,rabbitmq调用链开关。通过这些配置可以更加灵活的使用采集端的功能。

2支持plugin模式

采集不同服务的调用链数据需要不同的实现,采集端基于io.zipkin.brave框架做扩展分别实现了http调用链,db调用链,redis调用链,kafka调用链,rabbitmq调用链数据的采集。后续扩展接入其他调用链数据也非常方便,只需基于brave重点实现新服务的数据采集。

3支持动态开关

调用链采集端的功能封装在sdk中,业务应用通过引入sdk包获得调用链采集功能。采集端的功能会与业务应用一起运行,会占用业务应用服务器一定的资源,出于对业务应用系统的保护,在一些极端情况下需要能够及时关闭采集端的功能以减少对业务应用服务器资源的损耗。采集端基于apollo配置中心配置动态刷新功能实现了采集功能整体开关,不同服务调用链采集开关,数据输出开关的功能。

4支持数据采样

在服务的请求并发较高时如果调用链数据全采样,会导致输出到kafka的链路数据急剧增加,此时可以配置较低的采样率来减少链路数据的输出。

5数据缓冲

在链路数据输出的kafka不可用时,此时产生的链路数据不能在内存中无限制的增加,需要设置内存中数据的上限。当达到上限后,自动丢弃老数据,以防止物理内存被占满。

6接入无感知

调用链数据采集功能是通过切面编程的方式实现,对业务系统的接入可以做到透明无感知。在使用调用链采集端的功能时,业务开发人员无需开发多余的适配代码,只需专注业务逻辑的开发。

本发明旨在设计一种能够含括以上各种需求的调用链数据采集系统及对应的采集操作方法。



技术实现要素:

本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于配置中心的调用链数据采集系统、方法及存储介质。

本发明的目的可以通过以下技术方案来实现:

一种基于配置中心的调用链数据采集系统,该系统包括:

配置定义模块,用于定义从apollo配置中心映射得到的配置信息;

对象装配模块,用于根据所述配置定义模块中的配置完成调用链采集端所需类的装配;

配置刷新模块,用于从apollo配置中心接收配置变更事件,实时刷新本地配置信息并重新装配调用链采集端所需的类;

数据采集模块,用于拦截调用请求进行链路数据采集,并设置链路中包含的数据字段;

数据输出模块,用于将最终形成的链路数据发送至kafka数据总线。

进一步地,所述的配置定义模块包括:

链路功能开关配置子模块,用于配置链路功能是否开启,对应数据是否输出;

服务采集开关配置子模块,用于配置是否采集调用对应服务的链路数据;

数据采样配置子模块,用于配置io.zipkin.brave框架以实现对不同服务客户端方法的拦截并生成调用链数据;

数据输出配置子模块,用于配置数据输出的kafka地址,对应数据是否输出。

本发明还提供一种采用所述的基于配置中心的调用链数据采集系统的调用链数据采集方法,该方法包括以下步骤:

步骤1:于所述配置定义模块中定义从apollo配置中心映射得到的配置信息;

步骤2:利用所述对象装配模块根据所述配置定义模块中的配置完成调用链采集端所需类的装配;

步骤3:利用所述配置刷新模块,当其从apollo配置中心接收配置变更事件,实时刷新本地配置信息并重新装配调用链采集端所需的类;

步骤4:利用所述数据采集模块拦截调用请求进行链路数据采集,并设置链路中包含的数据字段,形成最终链路数据;

步骤5:基于所述数据输出模块将最终形成的链路数据发送至kafka数据总线,至此调用链数据采集完毕。

进一步地,所述的步骤1中的配置定义模块包括:

链路功能开关配置子模块,用于配置链路功能是否开启,对应数据是否输出;

服务采集开关配置子模块,用于配置是否采集调用对应服务的链路数据;

数据采样配置子模块,用于配置io.zipkin.brave框架以实现对不同服务客户端方法的拦截并生成调用链数据;

数据输出配置子模块,用于配置数据输出的kafka地址,对应数据是否输出。

进一步地,所述的步骤2具体包括:所述对象装配模块基于spring的autoconfiguration功能,并根据所述配置定义模块中的配置完成调用链采集端所需类的装配。

进一步地,所述的步骤3包括以下分步骤:

步骤301:于所述配置刷新模块中将配置信息与调用链采集类的装配方法相关联;

步骤302:通过实现apollo配置中心客户端提供的configchangelistener接口类注册监听器,以实现监听配置中心配置的变动;

步骤303:当所述监听器收到配置变动时,根据配置找到对应的装配方法,使用类的反射调用该装配方法重新初始化对象,以实现配置的刷新功能。

进一步地,所述的步骤4中的链路中包含的数据字段包括http、jdbc、rabbitmq、kafka和redis的调用信息,其中,http调用信息的tags字段中包括请求url、状态码、异常信息、http请求方法和灰度标签;jdbc调用信息的tags字段中包括sql语句和jdbc连接url;rabbitmq调用信息的tags字段中包括rabbitmqbroker、exchange、routing_key和queue队列名;kafka调用信息的tags字段中包括kafkabroker和topic。

进一步地,所述的步骤5具体包括:基于所述数据输出模块,通过封装类将数据发送到kafka数据总线中,并由数据清洗项目将kafka数据总线中的数据消费并存入数据分析引擎中,至此调用链数据采集完毕。

本发明还提供一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述的采用所述的基于配置中心的调用链数据采集系统的调用链数据采集方法的步骤。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述的采用所述的基于配置中心的调用链数据采集系统的调用链数据采集方法的步骤。

与现有技术相比,本发明具有以下优点:

(1)、配置灵活:调用链数据来源于不同的服务,采集端在配置调用链采集配置时还可针对不同的服务配置是否开启数据采集。采集配置包括:采集功能总开关,采样率配置,数据输出的kafkatopic,单条消息最大字节数,数据输出线程数,数据输出队列最大span数,数据输出队列最大字节数,数据输出开关,数据输出kafka地址,不同服务的采集开关。不同服务的采集开关包括:数据库jdbc调用链开关,redis调用链开关,kafka调用链开关,rabbitmq调用链开关。通过这些配置可以更加灵活的使用采集端的功能。

(2)、支持动态开关:调用链采集端的功能封装在sdk中,业务应用通过引入sdk包获得调用链采集功能。采集端的功能会与业务应用一起运行,会占用业务应用服务器一定的资源,出于对业务应用系统的保护,在一些极端情况下需要能够及时关闭采集端的功能以减少对业务应用服务器资源的损耗。采集端基于apollo配置中心配置动态刷新功能实现了采集功能整体开关,不同服务调用链采集开关,数据输出开关的功能。

(3)、方便扩展开发:开发新的服务调用链数据采集功能只需参考现有采集端的功能在配置定义模块中增加新服务的开关配置,在装配模块建新的装配类,重点实现数据采集模块的方法,数据输出无需变动。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明的系统架构图;

图2为本发明中进行配置刷新的过程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

此外,术语“水平”、“竖直”等术语并不表示要求部件绝对水平或悬垂,而是可以稍微倾斜。如“水平”仅仅是指其方向相对“竖直”而言更加水平,并不是表示该结构一定要完全水平,而是可以稍微倾斜。

在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

如图1所示,本发明的目的是提供一套成熟的调用链数据采集方案,本发明包含配置定义模块、对象装配模块、配置刷新模块、数据采集模块和数据输出模块。配置定义模块,用于定义本发明中用到的配置信息,这些信息保存在apollo配置中心。对象装配模块,负责装配调用链采集端用到类。配置刷新模块,用于从apollo配置中心接收配置变更事件,实时刷新本地配置信息并重新装配采集端的类。数据采集模块,用于拦截调用请求,并设置链路中包含的数据字段。根据调用服务的不同,拦截器实现也不同。数据输出模块,用于将链路数据发送到kafka。

上文中各个系统组成模块具体技术特征如下:

1、配置定义模块

在配置定义模块中包含链路功能开关配置,服务采集开关配置,数据采样配置和数据输出配置。其中链路功能开关配置可以配置链路功能是开启和数据是否输出;服务采集开关配置可以配置是否采集调用该服务的链路数据;数据采样配置使用io.zipkin.brave原有的配置;数据输出配置可以配置数据输出的kafka地址和数据是否输出开关。配置定义模块中的配置都保存在apollo配置中心,在装配调用链采集端需要的类之前会从apollo获取配置信息,然后根据配置装配需要的类。

2、对象装配模块

对象装配模块基于spring的autoconfiguration功能根据配置定义模块中的配置完成调用链采集端所需类的装配。

3、配置刷新模块

在配置刷新模块中将配置信息与调用链采集类的装配方法关联,然后通过实现apollo配置中心客户端提供的configchangelistener接口类注册一个监听器,实时监听配置中心配置的变动。如图2所示,当监听器收到配置变动时,根据配置找到对应的装配方法,使用类的反射调用该装配方法重新初始化对象实现配置的刷新功能。

4、数据采集模块

本发明可以采集的链路数据包含http、jdbc、rabbitmq、kafka和redis的调用信息,链路的长度根据接口调用的服务和组件来确定,调用的服务和组件越多,链路越长。在数据采集模块中,主要是基于io.zipkin.brave框架提供的各种brave-instrumentation包和springaop实现对不同服务客户端方法的拦截来生成调用链数据。调用链数据中tags字段下可以存放一些有用的自定义键值对数据,http调用链数据的tags中包含请求url、状态码、异常信息、http请求方法和灰度标签;jdbc调用链数据的tags中包含sql语句和jdbc连接url;rabbitmq链路数据的tags中包含rabbitmqbroker、exchange、routing_key,如果是消费rabbitmq消息还会包含queue队列名;kafka链路数据的tags中包含kafkabroker和topic。

5、数据输出模块

数据上报模块通过封装zipkin2.reporter.kafka11.kafkasender类将数据发送到kafka中,之后kafka中的数据由数据清洗项目消费并存入elasticsearch。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1