一种基于influxdb实现api调用信息统计的方法及系统
技术领域
1.本发明公开一种基于influxdb实现api调用信息统计的方法及系统,涉及api调用技术领域。
背景技术:
2.kong是一款基于nginx_lua模块写的高可用,易扩展由mashape公司开源的api gateway项目。由于kong是基于nginx的,所以可以水平扩展多个kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个server,来应对大批量的网络请求。
3.kong采用插件机制进行功能定制,插件集(可以是0或n个)在api请求响应循环的生命周期中被执行。插件使用lua编写,目前已有几个基础功能:http基本认证、密钥认证、cors(cross-origin resource sharing,跨域资源共享)、tcp、udp、文件日志、api请求限流、请求转发以及nginx监控。
4.缓存数据库是现在最受欢迎的nosql数据库之一,缓存数据库是一个使用ansi c编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
5.基于内存运行,性能高效
6.支持分布式,理论上可以无限扩展
7.key-value存储系统
8.开源的使用ansi c语言编写、遵守bsd协议、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api
9.相比于其他数据库类型,缓存数据库具备的特点是:
10.c/s通讯模型
11.单进程单线程模型
12.丰富的数据类型
13.操作具有原子性
14.持久化
15.高并发读写
16.支持lua脚本加入kong后,每个客户端对api的请求将首先到达kong,然后被代理到最终api,在请求和响应之间,kong将执行任何已安装的插件,扩展api功能集,kong有效的成为每个api的入口点。
17.influxdb是一个由influxdata开发的开源时序型数据。时序数据库是基于时间进行存储的一种数据库,每一条数据中都有一个时间戳,因而这种数据库特别适合存储那些随着时间变化的数据,通过一些工具处理后,能够分析出数据随时间变化的趋势。influxdb由go写成,着力于高性能地查询与存储时序型数据。influxdb被广泛应用于存储系统的监控数据,iot行业的实时数据等场景。
技术实现要素:
18.本发明针对现有技术的问题,提供一种基于influxdb实现api调用信息统计的方法及系统,所采用的技术方案为:一种基于influxdb实现api调用信息统计的方法,所述的方法具体步骤如下:
19.s1利用网关kong将发布的api调用信息保存到缓存数据库;
20.s2定时将缓存数据库中的调用信息保存到influxdb中;
21.s3使用influxdb的接口查询api的调用情况;
22.s4在插件中将处理规范的数据直接保存到influxdb中。
23.所述s2定时将缓存数据库中的调用信息保存到influxdb中的具体步骤如下:
24.s201定时任务定时去缓存数据库中获取为保存的数据;
25.s202定时任务将取到的数据保存到influxdb中;
26.s203定时任务判断是否保存成功,将成功的删除已保存数据。
27.所述s3使用influxdb的接口查询api的调用情况的具体步骤如下:
28.s301使用定时任务从缓存数据库的存中批量获取取api的调用信息;
29.s302使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除。
30.所述s301使用定时任务从缓存数据库的存中批量获取取api的调用信息的具体步骤如下:
31.s3011api调用保存信息在插件中用apig:monitor:做为key的开头;
32.s3012利用缓存数据库的scan命令,取一定数量的key集合得到缓存数据库扫描数据的游标;
33.s3013重复以上操作,直到游标值为零则结束当前任务。
34.所述s302使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除的具体步骤如下:
35.s3021根据缓存数据库中的值判断是否有其他操作进程;
36.s3022在缓存数据库中写入标识数据;
37.s3023标识数据的值使用时间戳;
38.s3024当前线程在同步数据完成后删除缓存数据库中的标识数据。
39.一种基于influxdb实现api调用信息统计的系统,所述的系统具体包括数据缓存模块、信息保存模块、定时任务模块和数据处理模块:
40.数据缓存模块:利用网关kong将发布的api调用信息保存到缓存数据库;
41.信息保存模块:定时将缓存数据库中的调用信息保存到influxdb中;
42.定时任务模块:使用influxdb的接口查询api的调用情况;
43.数据处理模块:在插件中将处理规范的数据直接保存到influxdb中。
44.所述信息保存模块具体包括定时获取模块、定时保存模块和定时处理模块:
45.定时获取模块:定时任务定时去缓存数据库中获取为保存的数据;
46.定时保存模块:定时任务将取到的数据保存到influxdb中;
47.定时处理模块:定时任务判断是否保存成功,将成功的删除已保存数据。
48.所述定时任务模块具体包括信息获取模块和信息处理模块:
49.信息获取模块:使用定时任务从缓存数据库的存中批量获取取api的调用信息;
50.信息处理模块:使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除。
51.所述信息获取模块具体包括插件配置模块、游标处理模块和任务处理模块:
52.插件配置模块:api调用保存信息在插件中用apig:monitor:做为key的开头;
53.游标处理模块:利用缓存数据库的scan命令,取一定数量的key集合得到缓存数据库扫描数据的游标;
54.任务处理模块:重复以上操作,直到游标值为零则结束当前任务。
55.所述信息处理模块具体包括进程判断模块、标识写入模块、标识处理模块和标识删除模块:
56.进程判断模块:根据缓存数据库中的值判断是否有其他操作进程;
57.标识写入模块:在缓存数据库中写入标识数据;
58.标识处理模块:标识数据的值使用时间戳;
59.标识删除模块:当前线程在同步数据完成后删除缓存数据库中的标识数据。
60.本发明的有益效果为:本发明提供一种基于influxdb实现api调用信息统计的方法,由api管理控制台创建api,在api被调用时将调用信息保存到缓存数据库中,再由定时任务将调用信息从缓存数据库保存到influxdb中;基于influxdb实现api调用信息的保存,比起msql的保存更加简单高性能,influxdb支持类sql的语法和索引序列化,能够自动聚合,在后续的查询中更加的快速高效。
附图说明
61.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
62.图1是本发明方法实施例的流程图;图2是本发明实施例的定时任务执行力流程图。
具体实施方式
63.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
64.实施例一:
65.一种基于influxdb实现api调用信息统计的方法,所述的方法具体步骤如下:
66.s1利用网关kong将发布的api调用信息保存到缓存数据库;
67.s2定时将缓存数据库中的调用信息保存到influxdb中;
68.s3使用influxdb的接口查询api的调用情况;
69.s4在插件中将处理规范的数据直接保存到influxdb中;
70.通过lua代码实现kong的api调用情况保存到缓存功能,redis作为缓存数据库,influxdb作为保存api调用情况的数据库;当用户的api被调用时,降被调用的情况保存到
缓存中,再使用定时任务将缓存中的数据保存到influxdb;
71.用户需要在控制台页面创建api时不需要绑定插件,kong会在api被调用时执行保存调用情况的插件将数据保存到缓存数据库中;
72.缓存格式
73.使用hash格式存储应用和api调用信息
74.[0075][0076]
进一步的,所述s2定时将缓存数据库中的调用信息保存到influxdb中的具体步骤如下:
[0077]
s201定时任务定时去缓存数据库中获取为保存的数据;
[0078]
s202定时任务将取到的数据保存到influxdb中;
[0079]
s203定时任务判断是否保存成功,将成功的删除已保存数据;
[0080]
使用定时任务从redis缓存中批量获取取api的调用信息,使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从redis缓存中删除;在插件中已经将数据处理成保存到influxdb中的规范数据,不需要定时任务单独处理数据,直接进行数据保存;
[0081]
进一步的,所述s3使用influxdb的接口查询api的调用情况的具体步骤如下:
[0082]
s301使用定时任务从缓存数据库的存中批量获取取api的调用信息;
[0083]
s302使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除;
[0084]
使用springboot中的注解@scheduled创建定时任务,定时任务执行的频率为1分钟
[0085]
@scheduled(cron="0 0/1***?")
[0086]
进一步的,所述s301使用定时任务从缓存数据库的存中批量获取取api的调用信息的具体步骤如下:
[0087]
s3011api调用保存信息在插件中用apig:monitor:做为key的开头;
[0088]
s3012利用缓存数据库的scan命令,取一定数量的key集合得到缓存数据库扫描数据的游标;
[0089]
s3013重复以上操作,直到游标值为零则结束当前任务;
[0090]
api调用保存信息在插件中用apig:monitor:做为key的开头,利用redis的scan命令,每次取一定数量的key集合,同时得到redis扫描数据的游标,游标是扫描数据的关键值,保证不能获取到重复的数据
[0091]
使用redis的管道特性,只需要一次请求就能根据获取到redis的key集合批量获取api调用保存信息;
[0092]
不断重复以上的操作,直到游标的值为0,表示redis中没有未同步的api调用信息的数据,可以结束当前任务;
[0093]
再进一步的,所述s302使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除的具体步骤如下:
[0094]
s3021根据缓存数据库中的值判断是否有其他操作进程;
[0095]
s3022在缓存数据库中写入标识数据;
[0096]
s3023标识数据的值使用时间戳;
[0097]
s3024当前线程在同步数据完成后删除缓存数据库中的标识数据;
[0098]
在任务开始时根据redis中的值判断是否有其他进程在操作,如果有其他进程在同步数据立即结束当前任务等待下一个任务周期再次执行,如果没有其他进程在同步数据则进行下面的过程;
[0099]
任务开始时往redis中写入一组数据,表示当前有线程在同步数据,其他线程操作不需要进行操作;
[0100]
标识数据如下
[0101]
key apig:kong:monitor
[0102]
value时间戳
[0103]
标识数据的值使用时间戳可以防止当前线程执行过程中出现异常导致长时间不同步数据的问题
[0104]
当前线程在同步数据完成后删除redis中的标识数据
[0105]
使用进程锁保证只有一个进程操作数据,保证不会出现数据处理的错乱,保证数据的有效性和安全性;
[0106]
从redis中取到的每一条api调用信息数据在插件中已经处理成标准的influxdb插入语句,不需要再次处理;
[0107]
创建influxdb的连接,指定数据库名和存储策略,存储策略是在创建数据库时一起创建的,在创建连接时必须指定,使用sdk中的批量保存数据的方法,将从redis中获取的api调用信息数据保存;
[0108]
保存成功后关闭刚才创建的influxdb连接,避免造成influxdb资源的浪费,避免对influxdb的查询造成影响;
[0109]
从reis中获取的api调用信息数据同步到influxdb中后需要将这些数据从redis中删除,保证这些数据只会被同步一次
[0110]
使用redis的事务式调用方式一次性将多个key进行删除,如果删除失败则进行事务的回滚保证数据的完整性。
[0111]
实施例二:
[0112]
一种基于influxdb实现api调用信息统计的系统,所述的系统具体包括数据缓存模块、信息保存模块、定时任务模块和数据处理模块:
[0113]
数据缓存模块:利用网关kong将发布的api调用信息保存到缓存数据库;
[0114]
信息保存模块:定时将缓存数据库中的调用信息保存到influxdb中;
[0115]
定时任务模块:使用influxdb的接口查询api的调用情况;
[0116]
数据处理模块:在插件中将处理规范的数据直接保存到influxdb中;
[0117]
进一步的,所述信息保存模块具体包括定时获取模块、定时保存模块和定时处理模块:
[0118]
定时获取模块:定时任务定时去缓存数据库中获取为保存的数据;
[0119]
定时保存模块:定时任务将取到的数据保存到influxdb中;
[0120]
定时处理模块:定时任务判断是否保存成功,将成功的删除已保存数据;
[0121]
进一步的,所述定时任务模块具体包括信息获取模块和信息处理模块:
[0122]
信息获取模块:使用定时任务从缓存数据库的存中批量获取取api的调用信息;
[0123]
信息处理模块:使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除;
[0124]
进一步的,所述信息获取模块具体包括插件配置模块、游标处理模块和任务处理模块:
[0125]
插件配置模块:api调用保存信息在插件中用apig:monitor:做为key的开头;
[0126]
游标处理模块:利用缓存数据库的scan命令,取一定数量的key集合得到缓存数据库扫描数据的游标;
[0127]
任务处理模块:重复以上操作,直到游标值为零则结束当前任务;
[0128]
再进一步的,所述信息处理模块具体包括进程判断模块、标识写入模块、标识处理
模块和标识删除模块:
[0129]
进程判断模块:根据缓存数据库中的值判断是否有其他操作进程;
[0130]
标识写入模块:在缓存数据库中写入标识数据;
[0131]
标识处理模块:标识数据的值使用时间戳;
[0132]
标识删除模块:当前线程在同步数据完成后删除缓存数据库中的标识数据。
[0133]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
技术特征:
1.一种基于influxdb实现api调用信息统计的方法,其特征是所述的方法具体步骤如下:s1利用网关kong将发布的api调用信息保存到缓存数据库;s2定时将缓存数据库中的调用信息保存到influxdb中;s3使用influxdb的接口查询api的调用情况;s4在插件中将处理规范的数据直接保存到influxdb中。2.根据权利要求1所述的方法,其特征是所述s2定时将缓存数据库中的调用信息保存到influxdb中的具体步骤如下:s201定时任务定时去缓存数据库中获取为保存的数据;s202定时任务将取到的数据保存到influxdb中;s203定时任务判断是否保存成功,将成功的删除已保存数据。3.根据权利要求2所述的方法,其特征是所述s3使用influxdb的接口查询api的调用情况的具体步骤如下:s301使用定时任务从缓存数据库的存中批量获取取api的调用信息;s302使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除。4.根据权利要求3所述的方法,其特征是所述s301使用定时任务从缓存数据库的存中批量获取取api的调用信息的具体步骤如下:s3011api调用保存信息在插件中用apig:monitor:做为key的开头;s3012利用缓存数据库的scan命令,取一定数量的key集合得到缓存数据库扫描数据的游标;s3013重复以上操作,直到游标值为零则结束当前任务。5.根据权利要求4所述的方法,其特征是所述s302使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除的具体步骤如下:s3021根据缓存数据库中的值判断是否有其他操作进程;s3022在缓存数据库中写入标识数据;s3023标识数据的值使用时间戳;s3024当前线程在同步数据完成后删除缓存数据库中的标识数据。6.一种基于influxdb实现api调用信息统计的系统,其特征是所述的系统具体包括数据缓存模块、信息保存模块、定时任务模块和数据处理模块:数据缓存模块:利用网关kong将发布的api调用信息保存到缓存数据库;信息保存模块:定时将缓存数据库中的调用信息保存到influxdb中;定时任务模块:使用influxdb的接口查询api的调用情况;数据处理模块:在插件中将处理规范的数据直接保存到influxdb中。7.根据权利要求6所述的系统,其特征是所述信息保存模块具体包括定时获取模块、定时保存模块和定时处理模块:定时获取模块:定时任务定时去缓存数据库中获取为保存的数据;定时保存模块:定时任务将取到的数据保存到influxdb中;定时处理模块:定时任务判断是否保存成功,将成功的删除已保存数据。
8.根据权利要求7所述的系统,其特征是所述定时任务模块具体包括信息获取模块和信息处理模块:信息获取模块:使用定时任务从缓存数据库的存中批量获取取api的调用信息;信息处理模块:使用influxdb的sdk批量的将数据保存到influxdb中,保存成功后将这些调用信息从缓存数据库中删除。9.根据权利要求8所述的系统,其特征是所述信息获取模块具体包括插件配置模块、游标处理模块和任务处理模块:插件配置模块:api调用保存信息在插件中用apig:monitor:做为key的开头;游标处理模块:利用缓存数据库的scan命令,取一定数量的key集合得到缓存数据库扫描数据的游标;任务处理模块:重复以上操作,直到游标值为零则结束当前任务。10.根据权利要求9所述的系统,其特征是所述信息处理模块具体包括进程判断模块、标识写入模块、标识处理模块和标识删除模块:进程判断模块:根据缓存数据库中的值判断是否有其他操作进程;标识写入模块:在缓存数据库中写入标识数据;标识处理模块:标识数据的值使用时间戳;标识删除模块:当前线程在同步数据完成后删除缓存数据库中的标识数据。
技术总结
本发明公开了一种基于InfluxDB实现API调用信息统计的方法及系统,属于API调用领域;所述的方法具体步骤如下:S1利用网关kong将发布的API调用信息保存到缓存数据库;S2定时将缓存数据库中的调用信息保存到InfluxDB中;S3使用InfluxDB的接口查询API的调用情况;S4在插件中将处理规范的数据直接保存到InfluxDB中;本发明提供一种基于InfluxDB实现API调用信息统计的方法,由API管理控制台创建API,在API被调用时将调用信息保存到缓存数据库中,再由定时任务将调用信息从缓存数据库保存到InfluxDB中;基于InfluxDB实现API调用信息的保存,比起msql的保存更加简单高性能,InfluxDB支持类sql的语法和索引序列化,能够自动聚合,在后续的查询中更加的快速高效。在后续的查询中更加的快速高效。在后续的查询中更加的快速高效。
技术研发人员:张辉 高传集 孙思清
受保护的技术使用者:浪潮云信息技术股份公司
技术研发日:2022.02.18
技术公布日:2022/5/25
转载请注明原文地址:https://tc.8miu.com/read-7936.html