# 数据分析项目 **Repository Path**: storming-team/data-analysis-project ## Basic Information - **Project Name**: 数据分析项目 - **Description**: 1234567891010 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-05-09 - **Last Updated**: 2024-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一、需求 假设目前有2台安全设备探测到了攻击事件,原始攻击日志如下: ```shell 1652251519 %%SEC/0/ATKLOG Log_Type=attack Device_IP=39.128.239.111 Zone_Name=矿产局 Zone_IP=115.106.21.59 Duration=1160 Protocol=1 Port=11146 Attacker=120.207.138.87,19.44.47.208,173.112.186.212,143.229.252.58,4.84.80.211,73.251.69.135,118.163.146.63,231.178.196.33,235.105.154.22,198.137.238.197,94.72.139.246,189.66.241.31,136.77.225.109,83.57.92.254,183.182.151.152,94.100.239.161,227.184.50.196,187.99.11.160,49.32.119.154 Attacker_Traffic=61914,16079,774,55111,59332,11866,47074,7351,16044,33498,42042,53662,84191,43753,6139,26072,87435,29181,73018 Attacker_PPS=969,17,861,854,218,857,455,190,749,835,881,381,733,451,179,406,309,813,351 Attack_Status=attack Attack_Type=UDP Fragment Flood ``` 我们需要统计并输出一个展示页面给客户查看。 需求流程如下: ![image-20220508222522442](.\docs\image-20220508222522442.png) ## 二、技术规划 模块规划 ![image-20220508230136801](.\docs\image-20220508230136801.png) 测试前 ### 1、系统 系统版本:CentOS 7.9 消息队列:RabbitMQ 3.10 https://www.rabbitmq.com/ 容器:Docker 20 Python:3.10 数据库:MySQL 8 pip:pika,django,pymysql node.js:latest ### 2、后端 Django + mysql ### 3、前端 vue.js(核心) + element-ui.js(后台框架) + echarts.js(画图) + axios.js(异步请求) + vue-router.js(路由) ### 4、代码托管 代码仓库使用gitee git使用参考:[关于git这一篇就够了](https://blog.csdn.net/bjbz_cxy/article/details/116703787) ### 5、部署 CentOS 7.9 安装docker,python并使用docker部署mysql,rabbitmq。 本地部署node.js,创建python项目,编写完成后打包到CentOS中运行。 ## 三、环境准备 **基础环境已经准备好了,大家自行下载即可。** 链接:https://pan.baidu.com/s/1pO48-3uj65jCK7m3QMLMUA 提取码:s6xa 虚拟机导入参考:[vmware导入虚拟机](https://zhuanlan.zhihu.com/p/359273124) ### 1、安装系统 * VMware虚拟机安装CentOS 7.9镜像,阿里云镜像站:[阿里云开源镜像站资源目录](https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso) 安装教程参考:[CentOS7最小化安装_pit_man的博客-CSDN博客_centos最小化安装优点](https://blog.csdn.net/ljzology/article/details/120236685) 安装最低要求: | 硬件 | 配置 | | ---- | ---- | | CPU | 2核 | | 内存 | 4G | | 硬盘 | 20G | > 注:软件选择最小安装,分区选择自动分区,网络使用桥接模式即可。 **特别说明:** 如果懒得折腾防火墙的话,直接关了即可。 ```shell systemctl stop firewalld systemctl disable firewalld ``` ### 2、安装docker 安装docker: ```shell yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` 启动docker: ```shell systemctl start docker systemctl enable docker # 开机自启 ``` 验证 ```shell [root@192 ~]# docker version Client: Docker Engine - Community Version: 20.10.15 API version: 1.41 Go version: go1.17.9 Git commit: fd82621 Built: Thu May 5 13:16:58 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.15 API version: 1.41 (minimum version 1.12) Go version: go1.17.9 Git commit: 4433bf6 Built: Thu May 5 13:15:18 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.4 GitCommit: 212e8b6fa2f44b9c21b2798135fc6fb7c53efc16 runc: Version: 1.1.1 GitCommit: v1.1.1-0-g52de29d docker-init: Version: 0.19.0 GitCommit: de40ad0 ``` docker基础操作 ```shell docker start 容器名/容器id # 启动容器 docker sotp 容器名/容器id # 关闭容器 docker rm 容器名/容器id # 删除容器 docker restart 容器名/容器ie # 重启容器 docker exec -it 容器名/容器id /bin/bash # 进入容器 docker run ... # 从镜像中构建容器 # 参数说明: # -p 映射端口 # --name 指定容名 # -e 给容器内部指定环境变量 # -d 后台运行 # --restart=always 当docker启动时容器跟着启动 ``` ### 3、安装Python 安装python所需的依赖 ```shell # yum 依赖 yum install -y gcc make file zlib zlib-devel libffi-devel xz-devel git bzip2-devel vim zip unzip wget ``` 安装OpenSSL 1.1.1m,官网:[/source/index.html (openssl.org)](https://www.openssl.org/source/) ```shell wget https://www.openssl.org/source/openssl-1.1.1m.tar.gz # 下载 tar -zxvf openssl-1.1.1m.tar.gz # 解压 mv /usr/bin/openssl /usr/bin/openssl_bak # 编译安装 cd ./openssl-1.1.1m &&\ ./config --prefix=/usr/local/openssl && \ make && \ make install && \ ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl && \ ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 && \ ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 ``` > 注:CentOS 7.9 自带的OpenSSL版本不满足Python3.10的要求,所以需要安装OpenSSL 1.1.1 验证 ```shell [root@192 openssl-1.1.1m]# openssl version OpenSSL 1.1.1m 14 Dec 2021 ``` 安装python ```shell wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz tar -zxvf Python-3.10.0.tgz # Python 3.10.1 cd ./Python-3.10.0 && \ ./configure --prefix=/usr/local/python3 --with-ssl-default-suites=openssl --with-openssl=/usr/local/openssl --with-openssl-rpath=auto && \ make && \ make install && \ ln -s /usr/local/python3/bin/python3.10 /usr/bin/python3 && \ ln -s /usr/local/python3/bin/pip3.10 /usr/bin/pip3 && \ # pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip3 config set gloal.index-url https://pypi.doubanio.com/simple && \ ``` 验证 ```shell [root@192 Python-3.10.0]# python3 -V Python 3.10.0 [root@192 Python-3.10.0]# pip3 -V pip 22.0.4 from /usr/local/python3/lib/python3.10/site-packages/pip (python 3.10) ``` ### 4、安装rabbitmq docker部署 ```shell docker pull rabbitmq:3-management docker run --name rabbit --restart=always -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -d rabbitmq:3-management ``` > rabbitmq控制台:http://your-ipaddress:15672/ 用户名user密码password ### 5、安装mysql docker部署 ```shell docker pull mysql:8.0 docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 --default-authentication-plugin=mysql_native_password ``` > mysql用户名root密码123456 验证 ```shell [root@192 Python-3.10.0]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bef41d648c39 rabbitmq:3-management "docker-entrypoint.s…" About a minute ago Up About a minute 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp rabbit c31651628755 mysql:8.0 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql ``` ### 6、pycharm远程开发配置 * 远程配置参考:[PyCharm SSH远程开发设定 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/335487858) ### 7、node.js安装 windows部署参考:[windows安装node(超详细步骤)_子非我鱼的博客-CSDN博客_windows安装node](https://blog.csdn.net/qq_45752401/article/details/122299475) mac部署参考:[如何在 Mac 中安装 Node.js (baidu.com)](https://baijiahao.baidu.com/s?id=1714565564586085119&wfr=spider&for=pc) ### 8、常见问题 重启网络 ```shell systemctl restart network ``` ## 四、创建项目 ### 1、项目规划 云博: 数据统计,django 家艺:数据清洗,django,(vue) 刘佳:消息队列,数据清洗 何仁杰:数据清洗,消息队列,数据统计,django,vue ### 2、代码规范 整体规范遵循PEP8 **特别说明:** 1、定义函数时需要针对参数,返回值写注解。 2、定时重要的函数时函数内部需对参数类型检查。 3、写注释!不用每句都写,但关键代码部分应当用注释描述该段代码做了什么操作。 4、注意代码复用。 5、函数或变量起名别起花里胡哨的。 ### 3、目录说明 ```shell .data-analysis-project # 根目录 ├─backend # 后端 ├─docs # 文档相关 ├─frontend # 前端 ├─data_clean.py # 数据清洗 ├─data_fake.py # 模拟数据 ├─data_statistic.py # 数据统计 ├─message_queue.py # 消息队列 ├─README.md ``` ## 五、项目说明 @云博 1、统计维度 - 统计ip攻击次数、流量、包 - 测试 2、数据结构 - 每天的数据怎么存 - 每个月数据怎么存 @刘佳 1、连接rabbitmq 2、消费者 3、生产者 - json数据格式 @家艺 页面相关 维度: - 所有的攻击情况 - 客户 图表: - 每月的攻击类型统计分布,饼图 - 每月的攻击流量趋势,柱状图 - 每月的客户受攻击情况,柱状图/折线图 ## 常见问题 ### 1、原始数据怎么来? ​ 随机生成原始数据。因为我目前手上的数据是从kafka接过来的洗好过后的数据,几百个G,考虑到传输给大家不是很方便。 我知道原始数据长什么样,干脆自己照着板子做个随机的出来。反正都是要往消息队列里面扔的,做个随机的更便捷。 ### 2、项目如何进展? 数据统一采用随机数据,当前阶段**先暂且只考虑先把功能做出来**。 ### 3、项目扩展方向? - Django方向 - 完善token,session。 - 完善models - 完善api - 前端方向 - 更加花里胡哨的页面 - 数据方向 - 更大量级数据递增(10w级,100w级,1000w级...) - 更多种类数据的格式化 - 更复杂的计算 - 优化数据结构 - 架构方向 - 架构优化(大数据相关)