ARMS: 原來實時計算可以這麽簡單!
業務實時監控服務( ARMS)是一款阿裏雲應用性能管理(APM)類監控產品。借助本產品,您可以基於前端、應用、業務自定義等服務,迅速便捷地為企業構建秒級響應的業務監控能力。
其中自定義監控作為該產品的時序計算和存儲的基礎,整合和封裝了數據收集,消息通道,實時計算,時序存儲,以及在線報表等多種先進互聯網技術組件。
本文主要介紹一下 ARMS 自定義監控中聚合邏輯以及時序查詢設計。
離線計算方式
以一個sql查詢為例:
select count(col1), sum(col2) as sum from data_tablewhere 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)是查詢數據的時間區間。
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 自定義監控將用戶實際使用中的日誌采集、切分、實時聚合、存儲,以及在線報表整合為統一的解決方案,方便了用戶的使用,歡迎大家嘗試。
原文鏈接
ARMS: 原來實時計算可以這麽簡單!