时间序列统计总结

时间序列统计总结:

1.时间序列可以简单通过以时间窗口为key的聚合,比如10秒为一个时间窗口,那10秒发生的所有事件都聚合为一个。

2.以某个维度做聚合,维度信息可以记录下来。比如以时间+ip为维度进行聚合,ip是可以存储的。

3.聚合的数量级等于维度之间的笛卡儿积,比如Metric.of(array("+aa", chainId, clientApp), hour, array(rpcTypeStr, serverApp));的数量级=N种chainId*N种clientApp*N种rpcTypeStr*N种serverApp。所以要避免对离散的数据做聚合,比如如果对ip做聚合将会是一个庞大的数字。

4.如果一个维度只聚合不需要按照条件进行查询,可以不新建维度。举个例子,pv和http_code,之前的方案是新增http_code这种维度:

|H- 200|12:00|[{60:[5]},{120:[5]}]|

|H- 301|12:00|[{60:[5]},{120:[5]}]|

|H- 500|12:00|[{60:[5]},{120:[5]}]|

另外一种更简单的实现:

|P|12:00|[{60:[10,3,4,3]},{120:[10,3,4,3]}]|,通过values为每种维度分别统计count数,可以看到这种实现更简单,存储数据量更少。

1. PV

时间序列:

|P|12:00|[{10:[5]},{20:[5]}]|

|P|13:00|[{10:[5]},{20:[5]}]|

总量:时间范围内的sum(count)

查询:query= 'P',filter= date:[1389776400 TO 1389776400], order by date

1)PV-PAGE+IS_APP (对于同一个时间维度[12:00],有多少种维度就有多少行数据)

|P-DETAIL APP|12:00|[{10:[5]},{20:[5]}]|

|P-DETAIL SITE |12:00|[{10:[5]},{20:[5]}]|

查询detail-APP:query='P-DETAIL AND APP',filter= date:[1389776400 TO 1389776400], order by date

查询detail-SITE:query='P-DETAIL AND SITE',filter= date:[1389776400 TO 1389776400], order by date

查询detail-ALL:query='P-DETAIL',filter= date:[1389776400 TO 1389776400], order by date

2)PV-CODE(查询出来之后分析每种CODE占比)

|H- 200|12:00|[{10:[5]},{20:[5]}]|

|H- 301|12:00|[{10:[5]},{20:[5]}]|

|H- 500|12:00|[{10:[5]},{20:[5]}]|

查询200:query='H- AND 200',filter= date:[1389776400 TO 1389776400], order by date

查询500:query='H- AND 500',filter= date:[1389776400 TO 1389776400], order by date

3)PV-anonymous(匿名/非匿名)

|P-A|12:00|[{10:[5]},{20:[5]}]|

|P-UA|12:00|[{10:[5]},{20:[5]}]|

|P-A|13:00|[{10:[5]},{20:[5]}]|

|P-UA|13:00|[{10:[5]},{20:[5]}]|

3)PV-APP(SITE/APP)

|P-APP|12:00|[{10:[5]},{20:[5]}]|

|P-SITE|12:00|[{10:[5]},{20:[5]}]|

|P-APP|13:00|[{10:[5]},{20:[5]}]|

|P-SITE|13:00|[{10:[5]},{20:[5]}]|

5)PV(IP-->PAGE)(IP数据量很大导致维度很大(IP*PAGE种维度),解决方案: 可以过滤build,不是所有PAGE都有必要,关键PAGE:site,login,add。转换为SQL可以理解为where page=? group by ip)

|P-IP1-login|12:00|[{10:[5]},{20:[5]}]|

|P-IP2-login|12:00|[{10:[5]},{20:[5]}]|

6) PV-BACKEND

|P-S1|12:00|[{10:[5]},{20:[5]}]|

|P-S2|12:00|[{10:[5]},{20:[5]}]|

|P-S3|12:00|[{10:[5]},{20:[5]}]|

补充:

1.网站/移动登录数统计(P+LOGIN+IS_APP)

2.网站/移动注册数统计(P+REG+IS_APP)

3.网站/发图统计(P+BLOG_ADD+IS_APP)

4.网站/发专辑统计(P+ALBUM_ADD+IS_APP)

|P-LOGIN-SITE|12:00|[{10:[5]},{20:[5]}]|

|P-LOGIN-APP |12:00|[{10:[5]},{20:[5]}]|

发图IP地址聚合(1小时)

|U-BLOG_ADD-APP-IP|12:00| 

1. IP数,只是aggregation算法不同

时间序列:

|U|12:00|[{10:[5]},{20:[5]}]|

|U|13:00|[{10:[5]},{20:[5]}]|

总量:

时间范围内的sum(count)

维度汇总

0. 首页

1. 业务page(例:网站,移动,login,reg的曲线)

2. backend(例:s1,s8的曲线)

3. httpcode(例:200,500的曲线)

4. 匿名(例:匿名/非匿名的曲线)

数据模型

|time|metric|[{10:[count,timeSpan,appCount,loginCount]}]|

|10:00|g|[10:[400,150,100,10]]|

|10:00|p 200|[10:[200,150,100,10]]|

|10:00|p 500|[10:[200,150,100,10]]|

实现总结:

identifie-metric1,metric2,metricN  timestamp value

首页:g (pv,uv,ip)

业务:b

backend:s

httpcode: h

匿名: a

例子:

b-login s1 404 app

b-login s1 200 site

b-login s2 200 site

b-login s3 500 app

猜你喜欢

转载自san-yun.iteye.com/blog/2012962