ARMS: 原来实时计算可以这么简单!

摘要: 业务实时监控服务( ARMS)是一款阿里云应用性能管理(APM)类监控产品。借助本产品,您可以基于前端、应用、业务自定义等服务,迅速便捷地为企业构建秒级响应的业务监控能力。

业务实时监控服务( ARMS)是一款阿里云应用性能管理(APM)类监控产品。借助本产品,您可以基于前端、应用、业务自定义等服务,迅速便捷地为企业构建秒级响应的业务监控能力。
其中自定义监控作为该产品的时序计算和存储的基础,整合和封装了数据收集,消息通道,实时计算,时序存储,以及在线报表等多种先进互联网技术组件。
本文主要介绍一下 ARMS 自定义监控中聚合逻辑以及时序查询设计。

离线计算方式

以一个sql查询为例:
select count(col1), sum(col2) as sum from data_table
where filterCols
group by groupByCols
order by sum desc/asc
limit limitNum

其中第一部分可以抽象为:聚合(sum, count)、过滤(where)和分组(group by)。
第二部分则是在第一部分的计算结果上进行排序(order by)和截断(limit)。

实时计算方式

随着用户数据量的增加,离线的计算会越来越慢,难以满足用户在某些场景下的实时性要求,因此很多解决方案中引入了实时计算。
与离线计算相比,实时计算有两点区别:

  • 需要用户给定时间字段。ARMS支持两种时间,event time(用户切分的时间)和processing time(ARMS切分中的_sysTime)。

  • 数据处理分为了预计算和后计算两个阶段。预计算阶段计算原始数据,并存储预计算的结果,使得数据量大大减少。当用户需要实时查询数据的时候,可以基于预计算的结果,通过后计算方式,得到最终结果。

预计算

select count(col1), sum(col2) as sum from origin_data
where filterCols
group by groupByCols and timeInterval

其中col1、col2、filterCols、groupByCols、time 都是日志切分后的字段,timeInterval是流数据切分所用的时间间隔,如一分钟、五分钟等。

后计算

select count(col1'), sum(clo2') from 预计算结果
where filterCols'
group by groupByCols' and timeInterval'
TimeRange (minTime, maxTime)

其中col1'、clo2'、filterCols'、groupByCols' 中的字段都是来自预计算之后的结果。
timeInterval' 是用户查看每个数据点的时间间隔,TimeRange (minTime, maxTime)是查询数据的时间区间。

扫描二维码关注公众号,回复: 1643008 查看本文章

ARMS 解决方案

针对上面分析,ARMS 通过两个步骤解决了用户的预计算和后计算的问题。
预计算
在ARMS 自定义监控中,在任务配置的第三个步骤(第一个步骤是配置日志路径,第二个步骤是配置切分),用户需要配置数据集(数据的预计算逻辑),如下图

其中指标是数据列的聚合计算、过滤是filter,维度是group by的条件。在ARMS中,维度分位两种,一种是平铺维度,一种是下钻维度。
平铺维度是指将聚合结果按照所有的维度直接存储,比如按照col1、col2、col3字段进行group by,存储结果就是一个包含所有col1、col2、col3字段的全集。
下钻维度是对平铺维度的一种优化,比如对于机器基础监控数据,在问题发生时,用户往往需要从机房维度先发现问题,然后下钻到该机房的应用分组,最终定位到某台机器IP的问题。这个时候,可以针对平铺维度中的机房、分组、IP建立单向索引,即机房中的分组索引,分组中的IP索引,以加快查询速度。这就是下钻维度的作用,类似还有省、市、区的例子。
以三个维度col1, col2, col3进行group by为例,平铺维度和下钻维度的不同如下:
平铺维度在时序数据库中存储的是如下三个维度的聚合结果:

col1, col2, col3, 聚合指标

聚合指标里面包含sum、count、max等聚合的结果
下钻维度在时序数据库中存储的是逐级展开的三个维度的聚合结果,相当于一个以空间换时间的解决方案。

col1,聚合指标
col1, col2,聚合指标
col1, col2, col3,聚合指标

后计算

在ARMS中,预计算的数据存储在时序数据库中,后计算则是基于时序存储的查询时计算。
与OpenTSDB类似,ARMS提供了 过滤、聚合、降精度和汇总等多种计算方式。如下图所示:

  • 在维度中选择为“全部”表示会根据该维度再次group by,选择“固定值”表示会在该维度进行过滤。

  • 在指标中,支持选择单个指标或者指标的组合计算。

  • TopN则对应到order by desc 和 limit。

  • 时间粒度可以用户选择,也可以由系统根据用户选择的时间区间确定。目前提供的有一分钟、五分钟、十五分钟、一小时、一天等。

相对OpenTSDB,ARMS还提供了数据集与数据集的 JOIN 操作、占比操作,如果两个数据集包含同样的维度,则数据集可以JOIN,然后基于JOIN后的数据做指标复合计算。

总结

ARMS 自定义监控将用户实际使用中的日志采集、切分、实时聚合、存储,以及在线报表整合为统一的解决方案,方便了用户的使用,欢迎大家尝试。

原文链接


猜你喜欢

转载自blog.51cto.com/13679539/2130658