CN113868248A - 指标数据预聚合方法 - Google Patents
指标数据预聚合方法 Download PDFInfo
- Publication number
- CN113868248A CN113868248A CN202111035787.1A CN202111035787A CN113868248A CN 113868248 A CN113868248 A CN 113868248A CN 202111035787 A CN202111035787 A CN 202111035787A CN 113868248 A CN113868248 A CN 113868248A
- Authority
- CN
- China
- Prior art keywords
- data
- index
- index data
- database
- point information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000004220 aggregation Methods 0.000 title claims abstract description 24
- 230000002776 aggregation Effects 0.000 title claims abstract description 20
- 241000282326 Felis catus Species 0.000 claims abstract description 23
- 230000004931 aggregating effect Effects 0.000 claims abstract description 5
- 238000006116 polymerization reaction Methods 0.000 claims description 38
- 238000004458 analytical method Methods 0.000 claims description 15
- 238000012545 processing Methods 0.000 claims description 14
- 239000000523 sample Substances 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 9
- 238000013500 data storage Methods 0.000 claims description 4
- 230000002688 persistence Effects 0.000 claims description 3
- 238000001914 filtration Methods 0.000 claims description 2
- 238000012544 monitoring process Methods 0.000 abstract description 10
- 238000004364 calculation method Methods 0.000 description 13
- 238000007405 data analysis Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000013480 data collection Methods 0.000 description 5
- 238000005192 partition Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000001824 photoionisation detection Methods 0.000 description 4
- 238000005259 measurement Methods 0.000 description 3
- 238000012935 Averaging Methods 0.000 description 2
- 238000013499 data model Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000001456 electron microprobe Auger spectroscopy Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 241000282813 Aepyceros melampus Species 0.000 description 1
- 235000010575 Pueraria lobata Nutrition 0.000 description 1
- 241000219781 Pueraria montana var. lobata Species 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Fuzzy Systems (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种指标数据预聚合方法,该方法包括:实时的进行指标数据采集,并将采集的埋点信息上报cat监控服务端;cat监控服务端将埋点信息明细存入clickhouse数据库以及将聚合后的指标数据存入InfluxDB数据库,其中,指标数据是由埋点信息按照预定规则聚合生成的;埋点信息以埋点明细表的形式存储在clickhouse数据库中,根据埋点明细表进行数据查询、分析以及根据埋点明细表数据按需重新聚合生成指标存入所述InfluxDB。
Description
技术领域
本发明涉及互联网技术领域,具体来说,涉及一种指标数据预聚合方法。
背景技术
随着企业数字化浪潮的推进,数据已经成为大多数企业最重要的资产,全世界的顶级公司都依赖数据来支撑其业务决策。统计显示,排名前40%的企业,其大部分业务决策是基于数据驱动的,亦即通过数据驱动业务决策的的组织,与那些由经验、本能驱动的企业相比,更容易达到行业顶端。
传统企业往往会通过Excel等工具软件来实现数据的整理、分析,以及生成相应的数据图表,但随着业务数据的指数级增长,市场环境越来越快速的变化,基于传统的数据分析模式往往只能反映过期数据,支持固定维度的数据展示,根本无法满足企业的数据分析需要。对决策者来说,其需要的是真正敏捷的数据洞察能力,实时准确的数据分析平台。
基于此,越来越多企业试图生产采集数据、以及分析使用数据,同时市面上也有大量相关技术,数据采集的有:谷歌的GA、百度统计、神策数据、诸葛IO等,数据分析的有:实时流式计算Storm、Spark Streaming、S4、Heron等,查询分析的有:ClickHouse、Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid,离线计算Hadoop MapReduce、Spark。
通过组合以上各种技术,全面打通各系统采集的数据,构建精简统一的埋点采集标准,在不影响日常研发效能的情况下,最后形成体系化的实时数据指标池,为将来各类业务场景的使用提供数字化决策支撑,是当前企业数字化转型成功的重要保障。
但是,现有解决方案存在以下三大缺点:
1)大数据体系建设复杂,费用高:
若按大数据体系来建设,一个是技术人员投入成本高,一个是机器资源投入成本高,对于数据规模和人员规模处于中型的企业来说,无外乎会有极大的费用负担;
2)采集的指标数据,使用门槛高:
采集的指标数据在流入分析型数据体系后,难以被产品经理、运营等不懂技术的伙伴制作报盘直接使用,因为需要了解表结构和字段,需要编写SQL类查询语句,对指标数据进行聚合查询,往往需要BI人员的支持才能完成;
3)指标数据无法实现按需预聚合:
采集存储的指标数据,在进行实时查询分析时,企业内的员工使用是完全可支撑的,但一旦延伸到客户方(B端、C端)或实时准实时交易运算时应用时,必须进行预聚合,否则大数据技术难以支撑(除非用资源去堆)。然而预聚合往往又无法实现过去历史数据的聚合,从而进入这个指标到底该不该预聚合两难的境地。
发明内容
针对相关技术中的上述问题,本发明提出一种指标数据预聚合方法以及指标数据预聚合系统,能够实现预定义指标的实时聚合,未定义指标的按需聚合,从而实现按需计算。
本发明的技术方案是这样实现的:
根据本发明的一个方面,提供了一种指标数据预聚合方法,包括:实时的进行指标数据采集;将采集的埋点信息上报cat服务端;cat服务端将clickhouse数据库中存储的埋点信息转化为预聚合后的指标数据存入InfluxDB数据库,其中,指标数据是由埋点信息按照预定规则聚合生成的;埋点信息以埋点明细表的形式存储在clickhouse数据库中,根据埋点明细表进行数据查询、分析以及根据埋点明细表数据按需重新聚合生成指标存入InfluxDB数据库。
根据本发明的实施例,cat服务端将clickhouse数据库中存储的埋点信息转化为预聚合后的指标数据并存入InfluxDB数据库的步骤由以下四个线程执行:分钟级指标报表生成线程:cat服务端采用流处理的方式处理接收到的每一条埋点信息,依次进行匹配埋点配置、匹配指标集合、聚合规则过滤、更新分钟级指标报表,从而在内存中随着流处理实时产生并更新分钟级指标报表;分钟级指标报表持久化线程:用于将指标数据从所有节点汇总到内存,然后合并成一张指标报表写到本地磁盘;指标生成及小时、天级指标聚合线程:将分钟级指标报表文件转换成指标数据添加到influxDB数据库异步上送队列,同时将指标数据并入小时级指标;当小时结束时,将小时级指标数据从缓存数据库redis中取出,添加到influxDB数据库异步上送队列、并入天级指标中;当天结束时,将天级指标取出并添加到influxDB数据库异步上送队列,其中,redis中存放着当前小时级和当前天级指标数据。指标上送线程:循环读取influxDB数据库上送队列中的指标数据,并将指标数据批量上送到influxDB数据库。
根据本发明的实施例,指标数据采集包括前端采集,前端采集包括:PC网站、H5网站和小程序,通过植入Arms javascript探针进行指标数据采集。
根据本发明的实施例,埋点事件采集的步骤包括:Arms javascript探针采集的自定义事件实时上报到日志库中,日志库提供了通过消费组实时消费自定义埋点日志数据的能力;消费者抓取并解析原始日志中的自定义埋点信息。
根据本发明的实施例,指标数据采集包括前端采集,前端采集包括:前端Android和IOS客户端,通过Emas SDK进行指标数据采集。
根据本发明的实施例,埋点事件采集的步骤包括:前端Android和IOS客户端集成Postbe sdk自定义业务埋点,Postbe上报埋点日志数据到kafka消息队列中,然后采集前端Android和IOS客户端实时的消费kafka数据以解析出埋点信息。
根据本发明的实施例,指标数据采集包括后端采集,后端采集包括:后端应用通过集成cat客户端工具,以代码埋点的方式进行数据采集。
根据本发明的实施例,进行查询、分析以及重新聚合的步骤包括:新建一个应用,创建clickhouse数据库对应数据库下的埋点明细表;如果应用下有前端类指标,创建新的前端埋点明细表;如果有特殊指标,与应用的其他指标剥离,指定自定义明细数据库和数据表。
根据本发明的实施例,指标数据预聚合方法还包括将埋点信息落入clickhouse数据库的步骤,包括:cat客户端把与埋点信息相关联的埋点明细json结构化数据压入kafka;cat服务端消费kafka消息,解析json数据批量落入clickhouse数据库的埋点明细表的各个对应字段列中。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的指标数据预聚合方法的流程图;
图2是根据本发明实施例的数据采集的流程图;
图3是根据本发明实施例的数据采集的Arms采集处理流程;
图4是根据本发明实施例的服务器将信息转化为预聚合指标存入InfluxDB的流程图;
图5是根据本发明实施例的数据落入clickhouse流程的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
根据本发明的实施例,提供了一种指标数据预聚合方法。图1是根据本发明实施例的指标数据预聚合方法的流程图。如图1所示,指标数据预聚合方法可以包括以下步骤S12-S18。
首先在步骤S12处,实时的进行指标数据采集。图2是根据本发明实施例的数据采集的流程图。结合图2所示,指标数据采集可以分为前端采集和后端采集。前端采集包括PC网站、H5(HTML5的简称)网站和小程序,通过植入Arms javascript探针进行指标数据采集。并且前端Android(安卓)和IOS客户端,可以通过Emas SDK进行指标数据采集。对于后端采集,后端应用可以通过集成Tomcat客户端工具,以代码埋点的方式进行数据采集。
然后在S14处,进行埋点事件采集,并将采集的埋点信息上报Tomcat服务端(以下可简称为cat服务端)。Arms是一种前端应用实时监控平台,借助于Arms提供的api可以采集分钟级响应的前端系统和页面类指标数据。对于Arms前端自定义埋点事件采集,Armsjavascript(一种高级编程语言)探针采集的自定义事件实时上报到日志库中,日志库提供了通过消费组实时消费自定义埋点日志数据的能力,消费者可以抓取并解析原始日志中的自定义埋点信息。对于前端Android和IOS,前端Android和IOS客户端集成Postbe sdk(软件开发工具包)自定义业务埋点,Postbe上报埋点日志数据到kafka(一种分布式发布订阅消息系统)消息队列中,然后采集前端Android和IOS客户端实时的消费kafka数据以解析出埋点信息。
在S16处,cat服务端将clickhouse数据库中存储的埋点信息转化为预聚合后的指标数据并存入InfluxDB数据库,其中,指标数据是由埋点信息按照预定规则聚合生成的。
在S18处,埋点信息以埋点明细表的形式存储在clickhouse数据库中,根据埋点明细表进行数据查询、分析以及根据埋点明细表数据按需重新聚合生成指标存入InfluxDB数据库。在一些实施例中,可以利用以下步骤进行查询、分析以及重新聚合:新建一个应用,创建clickhouse数据库对应数据库下的埋点明细表;如果应用下有前端类指标,创建新的前端埋点明细表。如果有特殊指标,与应用的其他指标剥离,指定自定义明细数据库和数据表。
本发明通过结合通用的数据库技术,时序数据库InfluxDB、缓存数据库Redis、列式数据库Clickhouse的组合搭配,在少量的服务器资源投入下,实现预定义指标的实时聚合,未定义指标的按需实时聚合(未定义指标在需求定义后即可实时获取最新数据,其历史数据则通过Clickhouse数据库查询聚合并转储到Influxdb时序数据库中),从而可以实现按需计算。
下面通过具体实施例对本发明的技术方案进行说明。总体上,本技术方案整体按如下三方面来实现:第一、通过CAT、ARMS、EMAS等技术,实现指标数据采集、流转、汇集;第二、通过Cat实现指标数据预聚合;第三,通过Clickhouse实现实时的按需查询分析、按需重新聚合。
第一、通过CAT、ARMS、EMAS等技术,实现指标数据采集、流转、汇集。
数据的采集在整个指标监控体系中是非常关键和重要的一环,数据的采集相当于工业体系中的传感器,是数据驱动的根源,只有保证采集数据的全面性、时效性以及准确性,最终的数据分析结果才是可信的、有价值的。
数据采集客户端,主要分为前端采集和后端采集。参考图2所示:PC网站、H5网站和小程序,通过植入阿里Arms javascript探针进行数据采集;前端Android和IOS客户端,通过Emas SDK进行数据采集;后端的应用,通过集成Cat客户端工具,代码埋点的方式进行数据采集。
(1)Arms前端系统类和页面类指标数据采集
自动获取前端应用PID,定时任务通过API自动获取全部前端监控应用PID,支持数据切分,即不同的PID做hash(哈希)计算后分配到不同的采集服务器运行;支持指标维度动态配置,可按需配置要抓取的指标(Metric)、维度(Dimensions)度量数据(Measures)。
采集数据断点续传,每隔30秒自动checkpoint收集时间到数据库中,应用故障恢复后会从最近一个成功的时间点开始抓取数据,以保障采集数据的完整性;
实现故障转移,每隔60秒采集实例之间发心跳自动进行健康检查,如果心跳检查失败,会从采集实例配置表中踢除此实例,应用PID重新分派到正常的实例上,从检查点(checkpoint)继续抓取数据。
指标匹配,页面类按照page(页)维度匹配到指标,默认All为所有页面;系统类指标按照应用进行匹配,匹配到的指标按minute(分)、hour(小时)、day(天)不同的存储策略落地到时序数据库InfluxDB中。
(2)Arms前端自定义埋点事件采集
重新定义了Arms采集处理流程,即前端Arms javascript探针采集的自定义事件,实时上报到阿里云日志库中(Log Service,简称SLS)。SLS提供了日志实时消费能力,可以通过消费组(ConsumerGroup)实时消费自定义埋点日志数据。一个消费组(ConsumerGroup)下有多个消费者(Consumer),根据ip+序号对每个消费者进行命名(保证消费组内名称不重),不同的消费者在多台服务器上创建多个线程(worker),一个消费者可以消费多个Shard(碎片)数据分片,一个Shard只能被一个消费者所持有,如下图3所示。
消费者poll方式抓取一组日志集合(LogGroup),解析原始日志(Log)中的自定义埋点数据,实时的上报Cat服务端,Cat服务端可以实时的对埋点数据做聚合。为了实现埋点指标的下钻分析,我们还对Arms javascript探针做了改进,添加自定义标签功能,默认支持带3个标签的自定义求和、求平均,同时为了业务扩展需要,探针也实现通过HashMap添加多个标签和度量值的功能。
(3)Emas前端Android/IOS系统类和界面类指标数据采集
Eams是阿里提供前端Android/IOS SDK,自带了监控采集能力。前端研发通过Python爬虫程序抓取Emas系统类和界面类指标监控数据(比如系统类相关监控数据:登录设备数、启动耗时平均值、启动耗时分位数、启动耗时达标率、主链路滑动帧率达标率、总体Crash率等,界面相关监控数据如:访问次数、页面停留时长、退出率等),生成每小时、每日的指标文件并上传OSS对象存储。指标采集实例再下载OSS指标文件、解析指标文件并存储时序数据库InfluxDB中。
(4)前端Android/IOS自定义埋点事件采集
需要集成阿里云移动研发平台EMAS(接入阿里云EMAS Android/IOS SDK),创建产品与应用,移动App中封装了单条数据实时发送、Push入队列后等待触发上报等功能(触发时机包括App转入后台触发、定时触发、队列满触发等)。移动端基于对流量、耗电、对服务端的压力等考虑,默认为Push队列批量上报以避免客户端会频繁的发送网络请求,如果有特别重要的埋点有实时性要求,也可以单独即时上报。
上报的埋点日志数据,首先流入到kafka消息队列中,然后采集客户端实例实时的消费kafka数据,解析出埋点指标上报Cat服务端做聚合运算。
(5)Cat客户端数据采集
应用引入cat-clientjar包,实现编码方式进行埋点,Cat客户端将埋点数据放入本地异步消息队列,通过sender发送线程从消息队列获取消息上报Cat服务端从而完成数据的采集。基于性能考虑,底层通过Nettry tcp长链接与Cat服务端传递数据。
从而,可以实现以下有益效果:
1)实现了servlet filter接口,解析http header头:全局链路跟踪ID、UID用户id(Android\IOS下的设备id)、SID当前访问的会话ID、埋点事件编号、baggage随行数据等。
2)实现httpClient拦截:添加http header链路ID、客户端调用地址和Domain、设置baggage随行数据往下传递。
3)实现MQ、微服务RPC随行数据传递,MQ producer头部放入baggage,consumer进行解析,RPC实现原理与MQ一致。
4)实现日志log.error()应用错误日志上传Cat服务端,在log4j日志中,继承AppenderSkeleton类重写append方法,在该方法中完成错误日志上报。
5)实现了自定义求和、求平均和计数统计:对外提供了新的方法logMetricForSum()、logMetricForAvg()、logMetricForCount以及通用的指标采集方法logMetric(),底层对Metric消息扩展了tags标签功能,每个方法对应不同的Metric type,Cat服务端收到报文按Metric type做聚合计算。
6)Api调用支持添加tags标签功能。
7)业务处理结果,包括业务返回码、返回消息、状态等,Cat客户端MessageTree消息树中扩展业务属性支持,业务处理结果设置到消息树上报。
8)对请求、结果进行logEvent,包括:修改Memcached、Redis、Controller、Service、URL等
第二、通过Cat实现指标数据预聚合
InfluxDB中存放的数据是预聚合后的指标数据,Clickhouse中存放的数据是原始的埋点信息,指标数据是由埋点信息按照既定规则聚合生成。埋点内容包括埋点编号名称、业务属性、数据值,所有的埋点都需在埋点指标管理平台申请配置,便于统一规范、管理、记录,在该平台上可以对申请的埋点添加一个或多个指标,每个指标对应一个预聚合规则,这个规则是由业务属性组合得到的逻辑表达式。
客户端将埋点信息通过TCP协议实时传输到服务端,服务端将这些信息转化为预聚合指标存入InfluxDB,该操作主要由四个线程完成。
参考图4所示,分钟级指标报表生成线程:服务端采用流处理的方式处理接收到的每一条埋点信息,大致处理流程为:匹配埋点配置->匹配指标集合->聚合规则过滤->更新分钟级指标报表;分钟级指标报表在内存中随着流处理实时产生并更新,为规避因指标数据过多可能导致的内存溢出风险,内存中的指标报表保留时长是可配置的。分钟级指标报表记录了各指标的统计数据及一些辅助信息。
分钟级指标报表持久化线程:同一个指标的数据可能分布在多台服务端节点上,每台服务端节点都负责部分指标的处理上送,该线程会将自己负责的指标数据从所有节点汇总到内存,然后合并成一张指标报表写到本地磁盘,这样做一方面可以避免服务崩溃导致内存中大量指标数据丢失,另一方面可以在influxDB不可用时将指标数据堆积保存,等influxDB恢复正常后补偿上送。
指标生成及小时、天级指标聚合线程:缓存数据库Redis中存放着当前小时级和当前天级指标数据,利用redis命令进行小时级和天级指标数据的计算,计算方式分为数值型和集合型两种,数值型的数据通过inc相关redis命令进行增量计算,集合型的数据根据其数据量自适应选择或转换redis的set、bit、hyperLogLog存储结构并进行交并集计算。该线程将本地磁盘中的分钟级指标报表文件读取解析到内存,转换成一条条指标数据添加到influxDB异步上送队列,同时将这一条条数据并入小时级指标;当小时结束时,该线程会将小时指标从redis中取出,添加到influxDB异步上送队列、并入天级指标中;当天结束时,该线程将天级指标取出并添加到influxDB异步上送队列。
指标上送线程:该线程循环读取influxDB上送队列中的指标数据,并将这些指标数据批量上送到influxDB。为避免指标数据丢失,上送队列是一个阻塞队列,当队列没有空余位置时,添加操作会阻塞等待直至队列有空余位置,influxDB不可用时,上送操作停止,开始循环检查influxDB状态,只有influxDB状态恢复正常后才会继续上送指标数据。
第三、通过Clickhouse实现实时的按需查询分析、按需重新聚合
cat监控平台元素和clickhouse数据表的对应关系:
clickhouse数据表按照日期分区,埋点编号排序。
埋点根据类型分为:系统/页面/接口/事件,一个系统相同类型的埋点明细默认存入到clickhouse一张表中。
多个系统相同类型的埋点明细也可以存入一张表中。
当一个系统clickhouse埋点明细表数据量很大时,影响机器性能,将表升级为分布式表。
如果系统中一个埋点的数据量很大,可将埋点抽取作为单独的分布式表。
为cat与clickhouse对应关系建立路由配置映射,满足各种场景的埋点明细数据存储。
(1)数据落入clickhouse流程
如图5所示。使用kafka消息中间件,流式写入数据。kafka给不同的应用建立不同的partition(函数)。cat客户端把埋点明细json结构化数据压入kafka中。cat服务端消费kafka消息,解析json数据批量落入clickhouse埋点明细表的各个对应字段列中。
(2)数据查询
埋点明细表可以根据任意一列进行聚合,聚合前一定要选择指定的时间,统计指定时间才有效。数据查询的本质,可以看做是一个不断减小数据范围的过程,从而加快了查询速度。再借助于数据标记,将需要解压与计算的数据范围缩至最小。
minmax.idx(分区索引)---primary.idx(一级索引)---skip_idx.idx(二级索引)---.mrk(标记文件)----.bin(数据压缩文件)。
对于非索引列的查询,按照最小的数据范围按列进行扫描,由于clickhouse数据表的内容是经过压缩的,可以快速定位到数据范围,将查询需要的数据捞取出来:查列表和指定单挑数据;做求和、平均、最大最小值、总数、频繁出现、是否存在等聚合运算;做sample样本近似计算。
若一条查询语句没有指定任何的where条件,或指定了where条件但条件没有匹配到任何索引(分区索引,一级索引和二级索引),那么就不能预先减小数据扫描范围。在后续继续数据查询的时候,则会扫描所有分区目录,以及目录内索引段的最大区间。虽然不能减少扫描数据范围,但是仍然能够借助数据标记,以及多线程的形式同时读取多个压缩数据块,以提升查询性能。
(3)多维度分析
clickhouse列存储的模式适合对列数据进行分析。influxDB存入的tag业务属性是有限的,并且因为性能问题会做分组个数限制。当做多个维度数据分析的时候,clickhouse可以对埋点明细数据进行抽取、转换,按照主题建立各种数据模型。
从明细数据和数据模型按照时间段(分钟、小时、天、星期、月等)维度算出业务结果存进分析表中,满足各种类型的大数据分析场景。
(4)重新聚合
对于influxDB聚合数据不能够完成的聚合运算,我们还是需要明细数据进行查询,通过sql自定义聚合场景,得到我们需要的聚合结果。
比如:
a班和b班分别有20与30个学生,今天平均表现得分分别对应85与90分,现在需求是得到所有学生平均得分。
influxDB存取的是聚合后的数据没有班级学生数量:(85+90)/2显然不是我们想要的答案。clickhouse存储的成绩明细(score_record)数据可以计算出班级学生数量,类似以下操作:
(5)历史回溯
当一个埋点创建于很久之前,而指标刚刚新建一个,这种情况指标influxDB的历史数据是拿不回来的。clickhouse使用埋点明细可以给指标做历史数据回溯。
本发明的上述技术方案,一方面,合理使用了时序数据库influxDB:a)分实例,支持建立n多个influxDB实例,根据业务访问情况,实例可以是influxDB集群实例或单机版本实例;b)分库,按系统编号建库,根据指标所属的系统路由到具体influxDB实例+具体database上,路由规则可配置,当出现某个热点数据时,可细化路由规则到具体指标上;c)分表,一个指标,对应influxDB数据库中的一个Measurement,按存储策略minute(分钟)、hour(小时)、day(天)进行存储。另一方面,通过合理使用InfluxDB(存储天、时、分钟统计数据)和缓存数据库Redis(实时计算小时、天级别指标统计数据,分钟级数据通过内存运算),实现低成本的数据存储和监控时序方案,而不需要建设大数据体系,同时资源少且便宜,Clickhouse贵一些但并不用于支撑实时场景,而是少量按需计算历史数据即可。另外,通过巧妙的结合预聚合与按需聚合,实现分析数据的高并发场景查询需求,从而实现预定义指标与未知指标(按需计算)的统一输出。
综上所述,本发明上述技术方案的有益效果包括:
1)数据采集方面,充分利用现有技术及成果,以数据抽取聚合为主,而不是取代现有重新建设采集方案;
2)指标聚合方面,需要什么指标,在统一埋点指标配置平台配置对应的预聚合规则即可,配置后的指标都是实时运算并实时产生结果,通过合理利用全链路监控Cat,结合Influxdb、redis等成熟的轻量级技术,花少量的服务器资源即可实现实时流计算效果,且后续扩展性强,可无限按需横向扩容;
3)按需预聚合所需数据,而不是一股脑的预聚合所有数据,在后续出现新的聚合需求时,可以基于历史数据转换成预聚合指标数据,以对外提供高并发查询需求。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种指标数据预聚合方法,其特征在于,包括:
实时的进行指标数据采集;
采集的埋点信息上报cat服务端;
所述cat服务端将所述埋点信息转化为预聚合后的指标数据并存入InfluxDB数据库,其中,所述指标数据是由所述埋点信息按照预定规则聚合生成的,按应用对所述指标数据进行匹配并将匹配到的指标数据按不同的时间存储策略存入所述InfluxDB数据库中;
所述埋点信息以埋点明细表的形式存储在所述clickhouse数据库中,根据所述埋点明细表进行数据查询、分析以及根据埋点明细表数据按需重新聚合生成指标存入所述InfluxDB,其中,使用kafka消息中间件cat客户端把埋点明细结构化数据压入kafka中,cat服务端消费kafka消息并解析结构化数据落入所述clickhouse数据库的埋点明细表的对应字段列中,其中,在选择指定的时间之后根据任意一列对所述埋点明细表进行聚合以查询数据。
2.根据权利要求1所述的指标数据预聚合方法,其特征在于,所述cat服务端将clickhouse数据库中存储的所述埋点信息转化为预聚合后的指标数据并存入InfluxDB数据库的步骤由以下四个线程执行:
分钟级指标报表生成线程:所述cat服务端采用流处理的方式处理接收到的每一条所述埋点信息,依次进行匹配埋点配置、匹配指标集合、聚合规则过滤、更新分钟级指标报表,从而在内存中随着流处理实时产生并更新分钟级指标报表;
分钟级指标报表持久化线程:用于将指标数据从所有节点汇总到内存,然后合并成一张指标报表写到本地磁盘;
指标生成及小时、天级指标聚合线程:将分钟级指标报表文件转换成指标数据添加到influxDB数据库异步上送队列,同时将所述指标数据并入小时级指标;当小时结束时,将小时级指标数据从缓存数据库redis中取出,添加到influxDB数据库异步上送队列、并入天级指标中;当天结束时,将天级指标取出并添加到influxDB数据库异步上送队列,其中,redis中存放着当前小时级和当前天级指标数据;
指标上送线程:循环读取influxDB数据库上送队列中的所述指标数据,并将所述指标数据批量上送到influxDB数据库。
3.根据权利要求1所述的指标数据预聚合方法,其特征在于,指标数据采集包括前端采集,所述前端采集包括:
PC网站、H5网站和小程序,通过植入Arms javascript探针进行指标数据采集。
4.根据权利要求3所述的指标数据预聚合方法,其特征在于,所述埋点事件采集的步骤包括:
所述Arms javascript探针采集的自定义事件实时上报到日志库中,所述日志库提供了通过消费组实时消费自定义埋点日志数据的能力;
消费者抓取并解析原始日志中的自定义埋点信息。
5.根据权利要求1所述的指标数据预聚合方法,其特征在于,指标数据采集包括前端采集,所述前端采集包括:
前端Android和IOS客户端,通过Emas SDK进行指标数据采集。
6.根据权利要求5所述的指标数据预聚合方法,其特征在于,所述埋点事件采集的步骤包括:
前端Android和IOS客户端集成Postbe sdk自定义业务埋点,Postbe上报埋点日志数据到kafka消息队列中,然后采集所述前端Android和IOS客户端实时的消费kafka数据以解析出所述埋点信息。
7.根据权利要求1所述的指标数据预聚合方法,其特征在于,指标数据采集包括后端采集,所述后端采集包括:
后端应用通过集成Tomcat客户端工具,以代码埋点的方式进行数据采集。
8.根据权利要求1所述的指标数据预聚合方法,其特征在于,进行查询、分析以及重新聚合的步骤包括:
新建一个应用,创建clickhouse数据库对应数据库下的所述埋点明细表;
如果所述应用下有前端类指标,创建新的前端埋点明细表。
如果有特殊指标,与所述应用的其他指标剥离,指定自定义明细数据库和数据表。
9.根据权利要求1所述的指标数据预聚合方法,其特征在于,还包括将所述埋点信息落入所述clickhouse数据库的步骤,包括:
cat客户端把与所述埋点信息相关联的埋点明细json结构化数据压入kafka;
所述cat服务端消费kafka消息,解析json数据批量落入clickhouse数据库的埋点明细表的各个对应字段列中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111035787.1A CN113868248A (zh) | 2021-09-03 | 2021-09-03 | 指标数据预聚合方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111035787.1A CN113868248A (zh) | 2021-09-03 | 2021-09-03 | 指标数据预聚合方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113868248A true CN113868248A (zh) | 2021-12-31 |
Family
ID=78989729
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111035787.1A Pending CN113868248A (zh) | 2021-09-03 | 2021-09-03 | 指标数据预聚合方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113868248A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114595129A (zh) * | 2022-02-24 | 2022-06-07 | 上海识装信息科技有限公司 | 一种可配置的多维度数据监控方法、装置及存储介质 |
CN115098542A (zh) * | 2022-06-17 | 2022-09-23 | 上海驻云信息科技有限公司 | 一种流式大数据分频预聚合与查询方法 |
CN115914409A (zh) * | 2022-11-14 | 2023-04-04 | 中盈优创资讯科技有限公司 | 一种waf安全防护日志实现高效传输、存储的方法及装置 |
CN116385102A (zh) * | 2023-03-15 | 2023-07-04 | 中电金信软件有限公司 | 信息推荐方法、装置、计算机设备及存储介质 |
CN116629805A (zh) * | 2023-06-07 | 2023-08-22 | 浪潮智慧科技有限公司 | 一种分布式流批一体化的水利指标服务方法、设备及介质 |
CN117149914A (zh) * | 2023-10-27 | 2023-12-01 | 成都优卡数信信息科技有限公司 | 一种基于ClickHouse的存储方法 |
CN118152441A (zh) * | 2024-05-09 | 2024-06-07 | 宁波数益工联科技有限公司 | 流处理框架下的实时匹配聚合报表生成算法及装置 |
CN119151609A (zh) * | 2024-11-15 | 2024-12-17 | 厦门她趣信息技术有限公司 | 基于标准化数据处理实现广告效果分析方法、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107145489A (zh) * | 2016-03-01 | 2017-09-08 | 阿里巴巴集团控股有限公司 | 一种基于云平台的客户端应用的信息统计方法和装置 |
CN110147398A (zh) * | 2019-04-25 | 2019-08-20 | 北京字节跳动网络技术有限公司 | 一种数据处理方法、装置、介质和电子设备 |
CN110909063A (zh) * | 2019-11-28 | 2020-03-24 | 蜂助手股份有限公司 | 一种用户行为的分析方法、装置、应用服务器及存储介质 |
-
2021
- 2021-09-03 CN CN202111035787.1A patent/CN113868248A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107145489A (zh) * | 2016-03-01 | 2017-09-08 | 阿里巴巴集团控股有限公司 | 一种基于云平台的客户端应用的信息统计方法和装置 |
CN110147398A (zh) * | 2019-04-25 | 2019-08-20 | 北京字节跳动网络技术有限公司 | 一种数据处理方法、装置、介质和电子设备 |
CN110909063A (zh) * | 2019-11-28 | 2020-03-24 | 蜂助手股份有限公司 | 一种用户行为的分析方法、装置、应用服务器及存储介质 |
Non-Patent Citations (2)
Title |
---|
LITTLEMAGIC: ""基于 Flink + ClickHouse 打造轻量级点击流实时数仓"", pages 1 - 5, Retrieved from the Internet <URL:https:// developer.aliyun.com/article/778465> * |
网易云信: ""技术实践 | 如何基于 Flink 实现通用的聚合指标计算框架"", pages 1 - 4, Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/381588979> * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114595129A (zh) * | 2022-02-24 | 2022-06-07 | 上海识装信息科技有限公司 | 一种可配置的多维度数据监控方法、装置及存储介质 |
CN115098542A (zh) * | 2022-06-17 | 2022-09-23 | 上海驻云信息科技有限公司 | 一种流式大数据分频预聚合与查询方法 |
CN115914409A (zh) * | 2022-11-14 | 2023-04-04 | 中盈优创资讯科技有限公司 | 一种waf安全防护日志实现高效传输、存储的方法及装置 |
CN116385102A (zh) * | 2023-03-15 | 2023-07-04 | 中电金信软件有限公司 | 信息推荐方法、装置、计算机设备及存储介质 |
CN116385102B (zh) * | 2023-03-15 | 2024-05-31 | 中电金信软件有限公司 | 信息推荐方法、装置、计算机设备及存储介质 |
CN116629805A (zh) * | 2023-06-07 | 2023-08-22 | 浪潮智慧科技有限公司 | 一种分布式流批一体化的水利指标服务方法、设备及介质 |
CN116629805B (zh) * | 2023-06-07 | 2023-12-01 | 浪潮智慧科技有限公司 | 一种分布式流批一体化的水利指标服务方法、设备及介质 |
CN117149914A (zh) * | 2023-10-27 | 2023-12-01 | 成都优卡数信信息科技有限公司 | 一种基于ClickHouse的存储方法 |
CN117149914B (zh) * | 2023-10-27 | 2024-01-26 | 成都优卡数信信息科技有限公司 | 一种基于ClickHouse的存储方法 |
CN118152441A (zh) * | 2024-05-09 | 2024-06-07 | 宁波数益工联科技有限公司 | 流处理框架下的实时匹配聚合报表生成算法及装置 |
CN119151609A (zh) * | 2024-11-15 | 2024-12-17 | 厦门她趣信息技术有限公司 | 基于标准化数据处理实现广告效果分析方法、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113868248A (zh) | 指标数据预聚合方法 | |
CN113360554B (zh) | 一种数据抽取、转换和加载etl的方法和设备 | |
Mayer et al. | An approach to extract the architecture of microservice-based software systems | |
CN109034993A (zh) | 对账方法、设备、系统及计算机可读存储介质 | |
CN111585840B (zh) | 服务资源监测方法、装置和设备 | |
CN107957940B (zh) | 一种测试日志处理方法、系统及终端 | |
CN110784419A (zh) | 铁路电务专业数据可视化方法及系统 | |
CN108985981B (zh) | 数据处理系统及方法 | |
CN111459986A (zh) | 数据计算系统及方法 | |
CN110858192A (zh) | 一种日志查询方法和系统、日志排查系统和查询终端 | |
CN114201540A (zh) | 工业多源数据采集及存储系统 | |
CN114090529A (zh) | 一种日志管理方法、装置、系统和存储介质 | |
CN114648393A (zh) | 一种应用于招投标的数据挖掘方法、系统及设备 | |
CN105515836A (zh) | 日志处理方法、装置及服务器 | |
CN112884452A (zh) | 一种智能运维多源数据采集可视化分析系统 | |
CN114265883B (zh) | 一种实时数据治理的方法、设备、存储介质 | |
CN110147470B (zh) | 一种跨机房数据比对系统及方法 | |
CN117130853A (zh) | 基于数字化的数据全链路自动化处理方法、装置 | |
CN114417796A (zh) | 一种基于设备采点的动态报表统计方法及系统 | |
KR101736382B1 (ko) | 이엠에스 서버 및 이의 로그 데이터 관리 방법 | |
CN117251414B (zh) | 一种基于异构技术的数据存储及处理方法 | |
CN116610531B (zh) | 基于代码探针采集数据埋点及请求图片上传数据的方法 | |
CN107357919A (zh) | 行为日志查询系统及方法 | |
CN116506300A (zh) | 一种网站流量数据统计方法和系统 | |
Chira et al. | A system for managing and processing industrial sensor data: SMS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |