一种基于Docker的数据包采集分析系统及其方法与流程

文档序号:15594133发布日期:2018-10-02 19:18阅读:346来源:国知局

本发明涉及网络数据分析技术,尤其涉及一种基于docker的数据包采集分析系统及其方法。



背景技术:

随着移动互联网的不断更新换代,近年来移动网络流量已呈现爆炸性增长;这为网络数据分析带来了困难以及硬件成本的大幅度提升,传统的服务器部署或是虚拟机方式由于网口或cpu限制,存在着不同程度的资源空闲浪费以及运行维护繁杂的劣势;在这种背景下,容器技术应运而生。与提供硬件虚拟化机制的虚拟机不同,容器通过对用户空间的抽象化处理提供操作系统级的虚拟化机制。

docker是pass提供商doccloud开源的一个基于lxc的高级容器引擎,源码托管在github上,基于go语言实现并遵从apache2.0协议开源,其利用linux内核中的各项功能,如命名空间与控制组,用以在操作系统之上创建容器。

相较于传统方式,docker容器具有以下优势:

1、易用性,可快速构建并测试可移植应用程序;

2、速度,具备轻量化及高速特性,秒级创建及运行;

3、丰富的生态系统支持;

4、模块性与可扩展性,不同的模块及组件隔离运行;

5、安全以及易于运维。

同时由于docker基于lxc轻量虚拟化的特点,docker相对于kvm之类最明显的特点就是启动快、占用资源小。



技术实现要素:

本发明的目的就在于克服现有技术存在的缺点和不足,提供一种基于docker的数据包采集分析系统及其方法,用以解决当前技术存在资源利用率低、移植及运行维护复杂的问题。

实现本发明目的技术方案是:

一、基于docker的数据包采集分析系统(简称系统)

本系统包括docker镜像仓库、数据包处理模块、数据库、服务提供模块、跨主机容器互联网络和容器运行监控模块;

其交互关系是:

docker镜像仓库分别与数据包处理模块、数据库和服务提供模块交互,进行版本控制及镜像更新;

数据包处理模块、数据库和服务提供模块,均通过跨主机互联网络依次交互;

容器运行监控模块分别对各个模块内容器运行状况进行监测。

二、基于docker的数据包采集分析方法(简称方法)

本方法包括以下步骤:

①docker镜像仓库提供dpi(深度包检测)程序所需的运行环境及程序镜像、oracle镜像、以及nginx镜像,提供版本控制功能、确保唯一性,为后续模块中的应用程序包括dpi程序及redis容器镜像提供push、pull操作;

②数据包处理模块分为数据分发及数据包检测两个部分,数据分发由inteldpdk开发套件实现万兆网口数据流量的过滤及按特定要求分发,分发的流量进入6-9个相互隔离的容器,容器内运行深度包检测程序;经dpi处理完成后的结构化数据写入数据库进行存储;

③根据服务类型的差别,使用硬盘数据库oracle及内存数据库redis进行数据存储,在容器内运行;

④服务提供模块实现与数据库的交互以及相关查询的操作接口的提供,各类服务运行于相互独立的容器;

⑤weave虚拟网络实现数据包处理模块、数据库以及服务提供模块内容器级的互联;

⑥容器监控模块从宿主机采集容器数据,实现插件式容器监控。

本发明具有下列优点和积极效果:

①能够处理万兆网口线速数据包的分发及处理分析;

②基于容器技术实现,具有良好的可移植性及扩展性;

③使用私有镜像仓库,降低了版本控制及运行维护的复杂性。

④高度隔离,进程安全。

附图说明

图1是本系统的结构方框图;

其中:

100—docker镜像仓库,

101—服务器,

102—客户端;

200—数据包处理模块,

201—dpdk数据包分发模块,

202—深度包检测模块,

202-1、202-2……202-n—第1、2……n深度包检测子模块,

n是自然数,1≤n≤10;

202-1-a—docker容器,

202-1-b—包处理镜像,

202-1-c—dpi处理进程;

300—数据库,

301—硬盘数据库oracle,

301-a—oracle容器,

301-b—oracle镜像,

301-c—oracle数据库服务;

302—内存数据库redis

302-a—redis容器,

302-b—redis镜像,

302-c—redis数据库服务;

400—服务提供模块,

401、402……40n—第1、2……n服务提供子模块,

n是自然数,1≤n≤10;

401-a—nginx容器,

401-b—nginx镜像,

401-c—web服务;

500—weave虚拟网络;

600—容器监控模块。

英译汉

1.docker:一个开源的应用容器引擎;

2.inteldpdk:inteldataplanedevelopmentkit,英特尔数据平面开发套件;

3.dpi:deeppacketinspection,深度包检测技术;

4.oracle:oracledatabase,一种关系型数据库;

5.redis:remotedictionaryserver一种开源的关系型内存数据库;

6.weave:一种虚拟网络服务支持组件;

7.github:一个面向开源及私有软件项目的托管平台;

8.nginx:一个高性能的http和反向代理服务器。

具体实施方式

以下结合附图和实施例详细说明:

一、系统

1、总体

如图1,本系统包括docker镜像仓库100、数据包处理模块200、数据库300、服务提供模块400、跨主机容器互联网络500和容器运行监控模块600;

其交互关系是:

docker镜像仓库100分别与数据包处理模块200、数据库300和服务提供模块400交互,进行版本控制及镜像更新;

数据包处理模块200、数据库300和服务提供模块400,均通过跨主机互联网络500依次交互;

容器运行监控模块600分别对各个模块内容器运行状况进行监测。

2、功能模块

1)docker镜像仓库100

docker镜像仓库100包括前后交互的服务器101和客户端102;

实现镜像及容器的管理,存储用于后续模块的dpi模块镜像、oracle镜像、redis镜像及nginx镜像。

2)数据包处理模块200

数据包处理模块200包括前后交互的dpdk数据包分发模块201和深度包检测模块202;

数据包处理模块200负责对原始数据包的采集、分发、过滤以及内容分析还原。

(1)dpdk数据包分发模块201

使用inteldpdk套件进行二次开发,将线速的采集流量按预先定义的规则,遵从尽量均匀的标准将流量分发至dpi进程1至10。

(2)深度包检测模块202

深度包检测模块202包括第1、2……n深度包检测子模块202-1、202-2……202-n,n是自然数,1≤n≤10;

第1深度包检测子模块202-1包括docker容器202-1-a、包处理镜像202-1-b和dpi处理进程202-1-c;

应用程序封装至容器中,在宿主机内克隆10个相同容器运行该进程,分别处理来自转发模块的原始数据包。

3)数据库300

数据库300根据数据优先级及业务类型的划分,由硬盘数据库oracle301及内存数据库redis302两个部分组成;

数据库300负责消费和存储由数据包处理模块200生产的结构化数据;

(1)硬盘数据库oracle301

硬盘数据库oracle301包括oracle容器301-a、oracle镜像301-b和oracle数据库服务301-c;

负责存储由数据包处理模块200生产的全量结构化数据,提供查询类的操作服务;

(2)内存数据库redis302

内存数据库redis302包括redis容器302-a、redis镜像302-b和redis数据库服务302-c;

负责存储关键性结构化数据,关键性结构化数据包括位置信息、重点行为数据和轨迹信息,用于提供查询、分析、去重、碰撞和挖掘相关的服务。

4)服务提供模块400

服务提供模块400包括第1、2……n服务提供子模块401、402……40n,

n是自然数,1≤n≤10;

第1服务提供子模块401包括nginx容器401-a、nginx镜像401-b和web服务401-c;

使用nginx搭建web服务器环境,稳定且具有低的系统资源消耗,对并发连接有高处理能力,数据及结果分析展示以web页面方式呈现。

服务提供模块400与数据库300互联,提供一套操作数据库的接口,用于以网页形式展现结构化数据的内容以及根据数据内容进行分析挖掘的成果;

5)weave虚拟网络500

weave虚拟网络500通过使用weave组件实现容器间的网络互联。

6)容器运行监控模块600

容器运行监控模块600以插件形式运行于容器所在宿主机上,根据各个容器所提供功能及检测指标的不同,在数据包处理模块200、对数据库300以及服务提供模块400的宿主机实现定制化的检测。

3、工作机理

数据包处理模块200、数据库300、服务提供模块400分别从docker镜像仓库100获取dpi模块镜像、oracle镜像、redis镜像和nginx镜像,通过镜像分别在宿主机创建容器,运行应用程序;docker镜像仓库100集中进行版本控制以及镜像管理,确保运行环境及应用程序的唯一性。

数据包输入流进入数据包处理模块200后,由inteldpdk套件进行数据分发,使用dpdk所提供的multi_process例程并进行二次开发,master主进程负责从网口接收并捕获数据包,按给定的规则分发至slave从进程,slave从进程负责消费由主进程分发的数据包并透传至各个深度包检测子模块;容器内dpi处理进程,主要使用基于有限状态机的模式匹配识别技术,对输入数据流进行匹配、分析、处理和还原等操作,分类并将生成的结构化数据存储至硬盘数据库oracle301或内存数据库redis302;数据库300提供对结构化数据的存储操作,并定期对数据进行清洗、更新;服务提供模块400提供与数据库交互的接口,对数据进行查询和统计运算等相关操作,并通过web页面提供展示方式。

各个容器间的通信机制依赖于weave虚拟网络500实现,相关运维及监测由容器监控模块600实现。

二、方法

步骤①:

a、在宿主机-redhat6.5创建用于运行数据包处理程序的目录/packproc,包含程序运行的相关执行文件及配置,通过dockerfile创建自己的镜像packproc,push至docker镜像仓库;

b、通过dockerpulloracle及dockerpullredis获取dockerhub官方硬盘数据库及内存数据库镜像,dba创建相关表项及配置,push至私有docker镜像仓库;通过dockerpullnginx获取官方nginx引擎,开发并添加web服务,push至镜像仓库。

步骤②:

a、构建容器之间的互联网络,更新内核版本至3.8+,docker版本至1.10+,从github获取源码安装weave并启动,指定ip地址及网段,手动配置容器的ip并暴露,实现数据分析处理容器-数据库容器-web服务容器之间的网络互联;为消息队列的收发提供物理实现机制。

步骤③:

a、数据包分析模块通过dpdk多线程例程实现对数据包基于ip地址的分发规则,考虑到数据包分析进程的处理瓶颈,将万兆网口捕获的流量分发至10个子进程进行处理;从镜像仓库pullpackproc镜像并构建10个相同的容器用于运行数据包的匹配、分析,并生产结构化数据;

b、数据库模块从镜像仓库pull相应的oracle镜像及redis镜像,根据不同的业务需求及数据等级,dba设置相应入库规则,接收由步骤a所生产的结构化数据并消费,将结构化数据在数据库中进行分类和存储;

c、web服务器模块从镜像仓库pull相应的nginx镜像实现与数据库的交互,为web界面用户提供接口,进行实时的数据查询、统计等相关操作。

步骤④:

a、容器运行监控模块600实时监测运行于数据包分析处理模块、数据库模块以及web服务器模块中容器的运行状态,基于libcontainer开发定制化的docker-agent模块,根据proc、ccroup、meminfo、netstat等接口采集容器数据,自定义上报数据类型,监控配置项,灵活的应对三种不同应用场景的需求。

步骤⑤:

该步骤主要通过web页面展示数据还原的结构以及步骤④所上报的容器运行监测结果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1