项目介绍
一、zebra概述
- 如图所示,电信运营商的用户通过连接到互联网中的各种网络设备访问一个网站时,其访问信息会通过基站在网络中传递,基站可以收集所有用户的访问日志数据
- zebra是对电信运营商收集的用户上网数据进行分析的一个应用程序。通过分析得到的结果可以展现不同小区的上网详情
- 注:zebra本意为斑马,命名类似hadoop的方式,并无特殊含义
二、整体分析
- 该日志中的每一条数据都包含了77个字段,字段说明如下:
序号 | 字段名 | 类型 | 长度 | 说明 |
0 | reporttime | string | 14 | 从文件名截取获取,动态填上 |
1 | Length | unsigned int | 2 | 用于指示整个XDR所占用字节数 |
2 | City | byte | 2 | 城市区号,如010代表北京 |
3 | Interface | unsigned int | 1 | 接口类型,16进制编码 1. Uu 2. X2 3. UE_MR 4. Cell_MR 5. S1-MME 6. S6a 7. S11 8. S10 9. SGs 10. S5/S8 11. S1-U 12. Gn 13~20 预留 21. IDC出口 22.省网出口 23.省网网间出口 24.骨干网网间出口 |
4 | xDR ID | unsigned int | 16 | DPI设备内唯一的xDR编号,16进制编码。一个会话生成一个xDR ID。 S1-U接口中,一个会话在同一个小区中的传输过程生成一个xDR ID,如该会话切换到新的小区,则生成新的XDR ID及会话记录。 对于超长会话设立时间阈值,超过阈值则该条记录结束,重新生成另一条会话记录并生成新的XDR ID,阈值默认为5分钟。 |
5 | RAT | unsigned int | 1 | RAT类型,16进制编码 1. UTRAN 2. GERAN 3. WLAN 4. GAN 5. HSPA Evolution 6. EUTRAN |
6 | IMSI | byte | 8 | 用户IMSI(TBCD编码),通过Gn/S11接口信令获取 |
7 | IMEI | byte | 8 | 终端IMEI(TBCD编码),通过Gn/S11接口信令获取 |
8 | MSISDN | byte | 16 | 用户号码(TBCD编码),通过Gn/S11接口信令获取 |
9 | Machine IP Add type | Unsigned int | 1 | 设备IP地址类型, 0x01:IPv4 0x02:IPv6 |
10 | SGW/GGSN IP Add | byte | 4(16) | 对于Gn口,填写GGSN的用户面IP地址;对于S1-U口,填写SGW的用户面IP地址 Ipv4:4字节; Ipv6:16字节。 |
11 | eNB/SGSN IP Add | byte | 4(16) | 对于Gn口,填写SGSN的用户面IP地址;对于S1-U口,填写eNB用户面IP地址: Ipv4:4字节; Ipv6:16字节 |
12 | SGW/GGSN Port | byte | 2 | 对于Gn口,填写GGSN的端口;对于S1-U口,填写SGW端口 |
13 | eNB/SGSN Port | byte | 2 | 对于Gn口,填写SGSN的端口;对于S1-U口,填写eNB端口 |
14 | eNB/SGSN GTP-TEID | byte | 4 | 对于Gn口,填写该业务对应承载的SGSN侧GTP-TEID;对于S1-U口,填写该业务对应承载的eNB侧GTP-TEID |
15 | SGW/GGSN GTP-TEID | unsigned byte | 4 | 对于Gn口,填写该业务对应承载的GGSN侧GTP-TEID;对于S1-U口,填写该业务对应承载的SGW侧GTP-TEID |
16 | TAC | byte | 2 | TAC |
17 | Cell ID | Byte | 4 | UE所在小区的ECI |
18 | APN | String | 32 | APN |
19 | App Type Code | byte | 1 | 业务类型编码,参见附录D XDR类型编码定义 |
20 | Procedure Start Time | dateTime | 8 | TCP/UDP流开始时间,UTC时间),从1970/1/1 00:00:00开始到当前的毫秒数。 |
21 | Procedure End Time | dateTime | 8 | TCP/UDP流结束时间,UTC时间),从1970/1/1 00:00:00开始到当前的毫秒数。 |
22 | Protocol Type | byte | 2 | 协议类型 集团规定的协议识别分类,参加《XXXX数据流量DPI识别能力规范》中的“DPI设备协议识别能力要求” |
23 | App Type | byte | 2 | 应用大类 集团规定的18种应用大类,参见《XXXX数据流量DPI识别能力规范》 |
24 | App Sub-type | byte | 2 | 应用小类 根据集团定义的识别规则识别出来的小类, 参见《XXXX数据流量DPI识别能力规范》。 集团未定义的各厂家根据自己的DPI进行识别 |
25 | App Content | byte | 1 | 应用小类的内容细分,如微信文本、微信语音等。 0.心跳,1.文本,2.图片,3.音频,4.视频,5.其他文件 如无则填全F。 |
26 | App Status | byte | 1 | 标识业务是否成功 0:业务成功 1:业务失败 2:业务未识别 |
27 | USER_IPv4 | byte | 4 | 终端用户的IPv4地址,如无则填全F |
28 | USER_IPv6 | byte | 16 | 终端用户的IPv6地址,如无则填全F |
29 | User Port | byte | 2 | 用户的四层端口号 |
30 | L4 protocal | byte | 1 | L4协议类型: 0:TCP 1:UDP |
31 | App Server IP_IPv4 | byte | 4 | 访问服务器的IPv4地址,如无则填全F |
32 | App Server IP_IPv6 | byte | 16 | 访问服务器的IPv6地址,如无则填全F |
33 | App Server Port | byte | 2 | 访问的服务器的端口 |
34 | UL Data | byte | 4 | 上行流量 单位:字节 对于场景一,定义为从内层IP包头开始计算的数据包大小总和; 对于其他场景,定义为从链路层封装开始计算的数据包大小总和。 |
35 | DL Data | byte | 4 | 下行流量 单位:字节
对于场景一,定义为从内层IP包头开始计算的数据包大小总和; 对于其他场景,定义为从链路层封装开始计算的数据包大小总和。 |
36 | UL IP Packet | byte | 4 | 上行IP包数 内层IP包的个数 |
37 | DL IP Packet | byte | 4 | 下行IP包数 内层IP包的个数 |
38 | 上行TCP乱序报文数 | byte | 4 | 上行TCP乱序报文数 L4协议非TCP传输时,此字段填0 |
39 | 下行TCP乱序报文数 | byte | 4 | 下行TCP乱序报文数 非TCP传输时,此字段填0 |
40 | 上行TCP重传报文数 | byte | 4 | 上行TCP重传报文数 非TCP传输时,此字段填0 |
41 | 下行TCP重传报文数 | byte | 4 | 下行TCP重传报文数 非TCP传输时,此字段填0 |
42 | TCP建链响应时延(ms) | byte | 4 | TCP建链响应时延(ms) 非TCP传输时,此字段填0 |
43 | TCP建链确认时延(ms) | byte | 4 | TCP建链确认时延(ms) 非TCP传输时,此字段填0 |
44 | UL_IP_FRAG_PACKETS | byte | 4 | 以内层IP包的分片为准 |
45 | DL_IP_FRAG_PACKETS | byte | 4 | 以内层IP包的分片为准 |
46 | TCP建链成功到第一条事务请求的时延(ms) | byte | 4 | TCP建链成功到第一条事务请求的时延(ms) 没有事务的时候可以不填写,此时填0 |
47 | 第一条事务请求到其第一个响应包时延(ms) | byte | 4 | 第一条事务请求到其第一个响应包时延(ms) 没有事务的时候可以不填写,此时填0 |
48 | 窗口大小 | byte | 4 | 窗口大小,TCP 建链协商后的窗口 非TCP传输时,此字段填0 |
49 | MSS大小 | byte | 4 | MSS尺寸,TCP层的最大分段大小 非TCP传输时,此字段填0 |
50 | TCP建链尝试次数 | byte | 1 | TCP SYN的次数,一次TCP流多次SYN的数值 非TCP传输时,此字段填0 |
51 | TCP连接状态指示 | byte | 1 | TCP连接状态指示 0:成功; 1:失败 |
52 | 会话是否结束标志 | byte | 1 | 1:结束 2:未结束 |
53 | HTTP版本 | byte | 1 | 0x01----HTTP0.9 0x02----HTTP1.0 0x03----HTTP1.1 0x04----HTTP2.0 0x05----WAP1.0 0x06----WAP1.1 0x07----WAP1.2 |
54 | 事务类型 | byte | 2 | HTTP/WAP2.0的事务类型,遵照HTTP/WAP1.x协议上的编码 |
55 | HTTP/WAP事务状态 | byte | 2 | HTTP/WAP2.0层的响应码,参见附录A 状态编码 |
56 | 第一个HTTP响应包时延(MS) | byte | 4 | 第一个HTTP响应包相对于第一个HTTP请求包(如get命令)的时延 |
57 | 最后一个HTTP内容包的时延(MS) | byte | 4 | 最后一个HTTP内容包相对于第一个HTTP请求包(如get命令)的时延 |
58 | 最后一个ACK确认包的时延(ms) | byte | 4 | 最后一个HTTP包的ACK相对于第一个HTTP请求包(如get命令)的时延,如果无ACK,则按照最后一个数据包计算 |
59 | HOST | char | 64 | 访问域名 |
60 | URI | char | 512 | 访问的URI,对于超过512字节的URI进行截短 |
61 | X-Online-Host | char | 128 | 针对wap代理上网的私有头部字段,对于cmnet上网该字段与HOST字段相同 |
62 | User-Agent | char | 256 | 终端向访问网站提供的终端信息,包括IMEI、浏览器类型等 |
63 | HTTP_content_type | char | 128 | HTTP的内容是文字还是图片、视频、应用等,具体编码参考附录A |
64 | refer_URI | char | 128 | 参考URI |
65 | Cookie | char | 256 | 协议中Cookie字段 |
66 | Content-Length | byte | 4 | 协议中Content-Length字段 |
67 | 目标行为 | byte | 1 | 目标行为,0:会话是用户主动点击的页面;1:站点目标而产生的页面。 |
68 | Wtp中断类型 | byte | 1 | WTP层的失败类型 |
69 | wtp中断原因 | byte | 1 | WTP层失败原因 |
70 | title | char | 256 | 网站名称,在上网内容里解析 |
71 | key word | char | 256 | 网站关键字,在上网内容里解析 |
72 | 业务行为标识 | byte | 1 | 0-业务登陆 1-页面访问 2-刷新 3-未识别; 判断规则详见《业务KPI定义(20130821)》 |
73 | 业务完成标识 | byte | 1 | 0-业务成功 1-业务失败 2-未识别 成功的判断规则:状态码<400 |
74 | 业务时延(ms) | byte | 4 | 登陆、访问响应或者刷新时延,具体指标描述参见《业务KPI定义(20130821)》 |
75 | 浏览工具 | byte | 1 | 详见附录F“浏览工具”,未识别的数据用0填充,该字段不能为空 |
76 | 门户应用集合 | byte | 1 | 详见附录G“门户应用集合”,未识别的数据用0填充,该字段不能为空 |
77 | 未知列 |
|
| 例:1:894/1102??这样字段 |
2.如图所示,运营商基站收集的用户上网日志中一行有很多字段,可能是用户某次短信发送,也可能是用户某次的通话,也可能是http访问或者app内通讯(比如:QQ好友之间聊天)等等。因为本次只针对所有的http访问进行分析,所以提取不同小区的上网详情所要处理的字段(清洗表):
序号 | 字段名 | 类型 | 长度 | 说明 |
16 | TAC | byte | 2 | TAC |
17 | Cell ID | Byte | 4 | UE所在小区的ECI |
19 | App Type Code | byte | 1 | 业务类型编码,参见附录D XDR类型编码定义 |
20 | Procedure Start Time | dateTime | 8 | TCP/UDP流开始时间,UTC时间),从1970/1/1 00:00:00开始到当前的毫秒数。 |
21 | Procedure End Time | dateTime | 8 | TCP/UDP流结束时间,UTC时间),从1970/1/1 00:00:00开始到当前的毫秒数。 |
23 | App Type | byte | 2 | 应用大类 集团规定的18种应用大类,参见《XXXX数据流量DPI识别能力规范》 |
24 | App Sub-type | byte | 2 | 应用小类 根据集团定义的识别规则识别出来的小类, 参见《XXXX数据流量DPI识别能力规范》。 集团未定义的各厂家根据自己的DPI进行识别 |
27 | USER_IPv4 | byte | 4 | 终端用户的IPv4地址,如无则填全F |
29 | User Port | byte | 2 | 用户的四层端口号 |
31 | App Server IP_IPv4 | byte | 4 | 访问服务器的IPv4地址,如无则填全F |
33 | App Server Port | byte | 2 | 访问的服务器的端口 |
34 | UL Data | byte | 4 | 上行流量 单位:字节 对于场景一,定义为从内层IP包头开始计算的数据包大小总和; 对于其他场景,定义为从链路层封装开始计算的数据包大小总和。 |
35 | DL Data | byte | 4 | 下行流量 单位:字节
对于场景一,定义为从内层IP包头开始计算的数据包大小总和; 对于其他场景,定义为从链路层封装开始计算的数据包大小总和。 |
40 | 上行TCP重传报文数 | byte | 4 | 上行TCP重传报文数 非TCP传输时,此字段填0 |
41 | 下行TCP重传报文数 | byte | 4 | 下行TCP重传报文数 非TCP传输时,此字段填0 |
55 | HTTP/WAP事务状态 | byte | 2 | HTTP/WAP2.0层的响应码,参见附录A 状态编码 |
59 | HOST | char | 64 | 访问域名 |
62 | User-Agent | char | 256 | 终端向访问网站提供的终端信息,包括IMEI、浏览器类型等 |
63 | HTTP_content_type | char | 128 | HTTP的内容是文字还是图片、视频、应用等,具体编码参考附录A |
68 | Wtp中断类型 | byte | 1 | WTP层的失败类型 |
72 | 业务行为标识 | byte | 1 | 0-业务登陆 1-页面访问 2-刷新 3-未识别; 判断规则详见《业务KPI定义(20130821)》 |
73 | 业务完成标识 | byte | 1 | 0-业务成功 1-业务失败 2-未识别 成功的判断规则:状态码<400 |
其中,应用大类字段如下:
序号 | 业务类型 | 业务说明 |
1 | 即时通信 | 互联网消息即时收发业务,如:QQ、飞信等 |
2 | 阅读 | 向用户提供在线或离线阅读服务的业务,如:移动手机阅读、熊猫阅读等 |
3 | 微博 | 微博业务,如:移动微博、新浪微博等 |
4 | 导航 | 提供浏览、查询、导航等功能的电子地图类业务,如:谷歌地图、高德导航等 |
5 | 视频 | 向用户提供音视频内容的直播、分享和下载服务的网站和应用(不包括传统意义上基于P2P技术的视频业务),如:优酷、手机电视等 |
6 | 音乐 | 提供音乐在线欣赏和下载服务的网站和应用,如:咪咕音乐、QQ音乐等 |
7 | 应用商店 | 提供应用程序、音乐、图书等内容浏览、下载及购买服务的业务,如:Mobile Market、AppStore等 |
8 | 游戏 | 基于客户端或者网页的游戏业务:QQ游戏、开心农场等 |
9 | 支付 | 电子商务类业务,如:手机支付、支付宝、网银等 |
10 | 动漫 | 提供动漫在线欣赏和下载服务的网站和应用,如:手机动漫、爱看动漫等 |
11 | 邮箱 | 电子邮箱业务,如:139邮箱、QQ邮箱等 |
12 | P2P业务 | 基于P2P技术的资源共享业务,包括下载和视频两部分,前者如:迅雷、eMule等,后者如:迅雷看看、PPLive等 |
13 | VoIP业务 | 互联网语音通信业务,如:Skype、Uucall等 |
14 | 彩信 | 彩信业务 |
15 | 浏览下载 | 基于HTTP、WAP、FTP等的普通浏览和下载业务 |
16 | 财经 | 金融资讯、股票证劵类业务,如:手机商界、大智慧等 |
17 | 安全杀毒 | 提供网络安全服务的应用,如:360安全卫士、麦咖啡等;以及网络恶意流量,如:病毒、攻击等 |
18 | 其他业务 |
|
DPI设备子业务识别能力要求(部分)
业务类型 | 子业务 |
|
|
|
| 序号 | 子业务名称 | 优先级 | 备注 |
即时通信 | 1 | 飞聊 | 必选 | 自有业务 |
| 2 | 飞信 | 必选 |
|
| 3 | Gtalk | 必选 | 互联网业务 |
| 4 | MSN | 必选 |
|
| 5 | | 必选 |
|
| 6 | TM | 必选 |
|
| 7 | 阿里旺旺 | 必选 |
|
| 8 | 米聊 | 必选 |
|
| 9 | 微信 | 必选 |
|
| 10 | 人人桌面 | 必选 |
|
| 11 | AOL AIM | 可选 |
|
| 12 | Gadu_Gadu | 可选 |
|
| 13 | go聊 | 可选 |
|
| 14 | ICQ | 可选 |
|
| 15 | IMVU | 可选 |
|
| 16 | Lava-Lava | 可选 |
|
| 17 | NetChat | 可选 |
|
| 18 | Paltalk | 可选 |
|
| 19 | PowWow | 可选 |
|
| 20 | TeamSpeak | 可选 |
|
| 21 | Trillian | 可选 |
|
| 22 | VZOchat | 可选 |
|
| 23 | Xfire | 可选 |
|
| 24 | 百度Hi | 可选 |
|
| 25 | 都秀 | 可选 |
|
| 26 | 陌陌 | 可选 |
|
| 27 | 天翼Live | 可选 |
|
| 28 | 翼聊 | 可选 |
|
| 29 | 网易泡泡 | 可选 |
|
| 30 | 新浪UC | 可选 |
|
| 31 | 新浪UT | 可选 |
|
| 32 | 雅虎通 | 可选 |
|
3.对该字段进行整理,建立事实表F_HTTP_APP_HOST:
序号 | 字段 | 字段类型 | 描述 |
0 | reportTime | datetime | 小时 时间片 default 'YYYY-MM-DD HH24:MI:SS' |
1 | appType | int | 应用大类 |
2 | appSubtype | int | 应用小类 |
3 | userIP | varchar(20) | 用户IP |
4 | userPort | int | 用户端口 |
5 | appServerIP | varchar(20) | 服务器IP |
6 | appServerPort | int | 服务器端口 |
7 | host | varchar(50) | 域名 |
8 | cellid | varchar(20) | 小区ID |
9 | attempts | int(20) | 尝试次数 |
10 | accepts | int(20) | 接受次数 |
11 | trafficUL | int(20) | 上行流量 |
12 | trafficDL | int(20) | 下行流量 |
13 | retranUL | int(20) | 重传上行报文数 |
14 | retranDL | int(20) | 重传下行报文数 |
15 | failCount | int(20) | 延时失败次数 |
16 | transDelay | int(20) | 传输时延* |
4.可以利用该事实表来从不同维度进行分析:
- D_H_HTTP_APPTYPE(应用欢迎度)
序号 | 字段 | 字段类型 | 描述 |
0 | hourid | datetime | 小时时间片 |
1 | appType | int | 应用大类 |
2 | appSubtype | int | 应用小类 |
3 | attempts | int(20) | 尝试次数 |
4 | accepts | int(20) | 接受次数 |
5 | succRatio | int(20) | 尝试成功率 |
6 | trafficUL | int(20) | 上行流量 |
7 | trafficDL | int(20) | 下行流量 |
8 | totalTraffic | int(20) | 总流量 |
9 | retranUL | int(20) | 重传上行报文数 |
10 | retranDL | int(20) | 重传下行报文数 |
11 | retranTraffic | int(20) | 重传报文数据 |
12 | failCount | int(20) | 延时失败次数 |
13 | transDelay | int(20) | 传输时延 |
- D_H_HTTP_HOST(各网站的表现)
序号 | 字段 | 字段类型 | 描述 |
0 | hourid | datetime | 小时时间片 |
1 | host | varchar(50) | 域名 |
2 | appServerIP | varchar(20) | 服务器IP |
3 | attempts | int(20) | 尝试次数 |
4 | accepts | int(20) | 接受次数 |
5 | succRatio | int(20) | 尝试成功率 |
6 | trafficUL | int(20) | 上行流量 |
7 | trafficDL | int(20) | 下行流量 |
8 | totalTraffic | int(20) | 总流量 |
9 | retranUL | int(20) | 重传上行报文数 |
10 | retranDL | int(20) | 重传下行报文数 |
11 | retranTraffic | int(20) | 重传报文数据 |
12 | failCount | int(20) | 延时失败次数 |
13 | transDelay | int(20) | 传输时延 |
- D_H_HTTP_CELLID(小区HTTP上网能力)
序号 | 字段 | 字段类型 | 描述 |
0 | hourid | datetime | 小时时间片 |
1 | cellid | varchar | 小区ID |
2 | attempts | int(20) | 尝试次数 |
3 | accepts | int(20) | 接受次数 |
4 | succRatio | int(20) | 尝试成功率 |
5 | trafficUL | int(20) | 上行流量 |
6 | trafficDL | int(20) | 下行流量 |
7 | totalTraffic | int(20) | 总流量 |
8 | retranUL | int(20) | 重传上行报文数 |
9 | retranDL | int(20) | 重传下行报文数 |
10 | retranTraffic | int(20) | 重传报文数据 |
11 | failCount | int(20) | 延时失败次数 |
12 | transDelay | int(20) | 传输时延 |
- D_H_HTTP_CELLID_HOST(小区上网喜好)
序号 | 字段 | 字段类型 | 描述 |
0 | hourid | datetime | 小时时间片 |
1 | cellid | varchar | 小区ID |
2 | host | varchar(50) | 域名 |
3 | attempts | int(20) | 尝试次数 |
4 | accepts | int(20) | 接受次数 |
5 | succRatio | int(20) | 尝试成功率 |
6 | trafficUL | int(20) | 上行流量 |
7 | trafficDL | int(20) | 下行流量 |
8 | totalTraffic | int(20) | 总流量 |
9 | retranUL | int(20) | 重传上行报文数 |
10 | retranDL | int(20) | 重传下行报文数 |
11 | retranTraffic | int(20) | 重传报文数据 |
12 | failCount | int(20) | 延时失败次数 |
13 | transDelay | int(20) | 传输时延 |