摘要: 業務實時監控服務( ARMS)是一款阿里雲應用性能管理(APM)類監控產品。藉助本產品,您能夠基於前端、應用、業務自定義等服務,迅速便捷地爲企業構建秒級響應的業務監控能力。前端
業務實時監控服務( ARMS)是一款阿里雲應用性能管理(APM)類監控產品。藉助本產品,您能夠基於前端、應用、業務自定義等服務,迅速便捷地爲企業構建秒級響應的業務監控能力。
其中自定義監控做爲該產品的時序計算和存儲的基礎,整合和封裝了數據收集,消息通道,實時計算,時序存儲,以及在線報表等多種先進互聯網技術組件。
本文主要介紹一下 ARMS 自定義監控中聚合邏輯以及時序查詢設計。sql
以一個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)。性能
隨着用戶數據量的增長,離線的計算會愈來愈慢,難以知足用戶在某些場景下的實時性要求,所以不少解決方案中引入了實時計算。
與離線計算相比,實時計算有兩點區別:優化
select count(col1), sum(col2) as sum from origin_data
where filterCols
group by groupByCols and timeInterval阿里雲
其中col一、col二、filterCols、groupByCols、time 都是日誌切分後的字段,timeInterval是流數據切分所用的時間間隔,如一分鐘、五分鐘等。spa
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 自定義監控中,在任務配置的第三個步驟(第一個步驟是配置日誌路徑,第二個步驟是配置切分),用戶須要配置數據集(數據的預計算邏輯),以下圖
blog
其中指標是數據列的聚合計算、過濾是filter,維度是group by的條件。在ARMS中,維度分位兩種,一種是平鋪維度,一種是下鑽維度。
平鋪維度是指將聚合結果按照全部的維度直接存儲,好比按照col一、col二、col3字段進行group by,存儲結果就是一個包含全部col一、col二、col3字段的全集。
下鑽維度是對平鋪維度的一種優化,好比對於機器基礎監控數據,在問題發生時,用戶每每須要從機房維度先發現問題,而後下鑽到該機房的應用分組,最終定位到某臺機器IP的問題。這個時候,能夠針對平鋪維度中的機房、分組、IP創建單向索引,即機房中的分組索引,分組中的IP索引,以加快查詢速度。這就是下鑽維度的做用,相似還有省、市、區的例子。
以三個維度col1, col2, col3進行group by爲例,平鋪維度和下鑽維度的不一樣以下:
平鋪維度在時序數據庫中存儲的是以下三個維度的聚合結果:
col1, col2, col3, 聚合指標
聚合指標裏面包含sum、count、max等聚合的結果
下鑽維度在時序數據庫中存儲的是逐級展開的三個維度的聚合結果,至關於一個以空間換時間的解決方案。
col1,聚合指標
col1, col2,聚合指標
col1, col2, col3,聚合指標
在ARMS中,預計算的數據存儲在時序數據庫中,後計算則是基於時序存儲的查詢時計算。
與OpenTSDB相似,ARMS提供了 過濾、聚合、降精度和彙總等多種計算方式。以下圖所示:
相對OpenTSDB,ARMS還提供了數據集與數據集的 JOIN 操做、佔比操做,若是兩個數據集包含一樣的維度,則數據集能夠JOIN,而後基於JOIN後的數據作指標複合計算。
ARMS 自定義監控將用戶實際使用中的日誌採集、切分、實時聚合、存儲,以及在線報表整合爲統一的解決方案,方便了用戶的使用,歡迎你們嘗試。