背景介绍
网络流分析主要包括对用户的网络流数据进行存储和多维度的分析两部分。用户的网络流的数据每天产生400G左右,数据保留10天。针对网络流数据的分析主要包含流量分析、包量分析、TCP延迟分析、HTTP状态码分析、TCP重传分析等。
数据存储
创建了一个10个节点的DW集群,节点类型为ds1.large,磁盘类型SATA,大小为2000GB。(由于UDW集群的高可用方案,集群可用大小为10000GB)。
表格设计
采取列存储和压缩的追加表,分布键为id,根据time分区,时间间隔为1天。完整的建表语句如下所示:
create table tunetanalysisdata (id serial,uuid varchar(64) DEFAULT NULL,item_id int DEFAULT NULL,time int DEFAULT NULL,data varchar(4000) DEFAULT NULL)
with (APPENDONLY=true,ORIENTATION=column,compresslevel=5) DISTRIBUTED BY (id)
partition by range(time) (START (1469980800) END (1488297600) EVERY (86400));
其中,id为记录序号,通过serial(序列)实现自增;uuid存储用户组织ID或者用户的IP;item_id为代表某种分析项的id(分析项如IP流量、TCP包量、TCP重传率等);time为时间戳;data为数据。
样本数据如下图所示:
根据查询需要创建索引如下:
根据查询需要创建索引如下:
create index tunetanalysisdatauuiditemidtime on tunetanalysisdata(uuid,itemid,time);
create index tunetanalysisdatauuiditemidtime on tunetanalysisdata(uuid,itemid,time);
数据导入
为了加快数据插入DW的速度,强烈建议用copy的方式将数据导入。示例代码如下图所示:
执行python testcopyto_udw.py,输出如下:
可以看到copy方式导入速度是非常快的。关于python的copy_from方法请参考: http://initd.org/psycopg/docs/cursor.html。
数据分析
在页面上点击分析指标,选择查询时间段,发送查询请求,后端收到请求后执行如下SQL查询: SELECT time, data FROM tunetanalysisdata where uuid= 'xxx' and itemid= xxx and time>xxx and time<xxx; 例如,组织id 为50200021的用户查询一个星期内ip的出量(itemid为17), SELECT time,data FROM tunetanalysisdata where uuid= '50200021' and item_id= 17 and time > 1481472000 and time < 1482076800; 耗时平均为260ms。 时间范围为1天的查询耗时平均为120ms。 将查询到的数据返回给前端,前端解析数据,绘出图形,展示在页面上。
流量分析:
包量分析:
TCP延迟分析:
创建好数据仓库之后怎么连接到UDW?
请参考帮助文档“快速上手→连接数据仓库”部分介绍。http://cms.docs.ucloud.cn/analysis/udw/gettingstart