# clue_backend **Repository Path**: wyx_develop/clue_backend ## Basic Information - **Project Name**: clue_backend - **Description**: 蛛丝马迹(Clue)项目是分布式网络链路监控系统的服务器端,这里是服务器端,需要配合前端项目clue_front进行搭配 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2022-07-22 - **Last Updated**: 2022-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 蛛丝马迹-后端 ## 1. 概述 蛛丝马迹(Clue)项目是分布式网络链路监控系统,该项目是后端项目,需要配合前端项目[clue_front](https://gitee.com/paultest/clue_front)进行搭配 有以下特点: * 精益运维:发现闲置资源,无效网络策略,节能增效 * 网络可视化:动态生成拓扑,集群情况一目了然 * 网络透视:生成策略列表,风险策略告警 * 问题定位:偶现问题事后回溯 * 对应用透明:金融系统的复杂度高,关联系统多,所有系统均接入Zipkin类调用链不现实(Java, Nodejs, Cobol, Python, Golang, C++, C#)
该后端项目是基于Django来实现的,主要包括服务器端的代码和客户端的agent,服务器端主要是用来提供API接口,客户端agent是用来在客户端上运行的,实时采集数据需要
客户端的agent是在agent目录下,提供了python2和python3两种版本供选择 客户端是使用Scapy来进行实时采集流量数据的,具体可参考我的文章[【Scapy】获取流量包](https://blog.csdn.net/jiandanokok/article/details/109548511)
采集流量原理: ![image-20201116233512700](https://gitee.com/paultest/Images/raw/master/img/image-20201116233512700.png)
注意:该项目无前端页面,只提供API接口,前端页面需要配合前端(clue_front)进行页面的数据展示 ## 2. 效果页面 前端页面的效果(clue_front)
总览页 ![image-20201107164705669](https://gitee.com/paultest/Images/raw/master/img/image-20201107164705669.png) 链路拓扑图 ![image-20201107164348553](https://gitee.com/paultest/Images/raw/master/img/image-20201107164348553.png) 并且点击某个IP可以查该IP的关联: ![image-20201107164443790](https://gitee.com/paultest/Images/raw/master/img/image-20201107164443790.png) 数据分析页 ![image-20201107164601475](https://gitee.com/paultest/Images/raw/master/img/image-20201107164601475.png) ## 3. 服务端安装步骤 注意:前提需要安装Python3、supervisor、gunicorn等,建议使用虚拟环境比如pyenv或者是virtualenv等
注意:如没安装Virtualenv的可参考:[Python的虚拟环境Virtualenv和Virtualenvwrapper](https://blog.csdn.net/jiandanokok/article/details/102768561)
注意:如没安装supervisor、gunicorn可参考:[Flask、Django项目的部署](https://blog.csdn.net/jiandanokok/article/details/104886260)
#### A. 拉代码 ```shell cd /home/data/devops/ git clone https://gitee.com/paultest/clue_backend.git ```
#### B. 安装依赖 ```shell pip/pip3 install -r requirements.txt ```
#### C. 创建数据库,导入SQL
SQL文件:sql目录下,导入init.sql即可或者是导入以下sql语句: ```sql CREATE DATABASE `clue_backend` DEFAULT CHARACTER SET utf8mb4; CREATE TABLE `clue_backend`.`za_flow_data`( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `host_ip` CHAR(50) DEFAULT '' COMMENT '当前主机IP', `host_name` CHAR(100) DEFAULT '' COMMENT '当前主机名', `protocol` CHAR(100) DEFAULT '' COMMENT '数据协议', `source_ip` CHAR(50) DEFAULT '' COMMENT '源IP', `source_port` INT(10) DEFAULT 0 COMMENT '源数据的端口', `dest_ip` CHAR(50) DEFAULT '' COMMENT '目的IP', `dest_port` INT(10) DEFAULT 0 COMMENT '目的数据的端口', `len` INT(10) DEFAULT 0 COMMENT '数据长度', `info` VARCHAR(1000) DEFAULT '' COMMENT '数据指向信息', `time` TIMESTAMP COMMENT '流量时间', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), INDEX `IDX_HOST_IP` (`host_ip`), INDEX `IDX_HOST_NAME` (`host_name`), INDEX `IDX_PROCOTAL` (`protocol`) ) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ``` 注意:如需要测试数据的话,可以导入demo.sql
#### D. 修改配置
配置文件:clue_backend\settings.py
环境配置文件:config\dev.py、local.py、prod.py
#### E. 执行数据库迁移 ```shell python3 manage.py makemigrations python3 manage.py migrate ```
#### F. supervisor增加子进程
注意:如没安装supervisor可参考:[Flask、Django项目的部署](https://blog.csdn.net/jiandanokok/article/details/104886260)
把supervisor目录里面的配置(dev.conf或prod.conf)复制进/etc/supervisor.d/里面,并且更改名为:clue_backend.conf ```shell cp -R /home/data/devops/clue_backend/supervisor/dev.conf /etc/supervisord.d mv /etc/supervisord.d/dev.conf /etc/supervisord.d/clue_backend.conf ``` 注意:拷贝dev.conf或者是prod.conf由具体的环境来决定
补充: dev.conf或prod.conf的内容一般如下: ```shell [program: clue_backend] user=root environment = ENV="dev" directory=/home/data/devops/clue_backend/ command=/root/.virtualenvs/clue_backend/bin/python3 /root/.virtualenvs/clue_backend/bin/gunicorn clue_backend.wsgi:application -c ./supervisor/gunicorn_conf.py autorestart=true redirect_stderr=true stdout_logfile=/home/data/logs/clue_backend/clue.stdout.log stdout_logfile_maxbytes=50MB stdout_logfile_backups =10 ``` 其中,command命令里面python3和gunicorn都是需要绝对路径的,Python3的路径可以通过`whereis python3`来获取,而gunicorn的可以通过`whereis gunicorn`来获取
加载supervisor子进程并且启动clue_backend ```shell supervisorctl reload supervisorctl start clue_backend supervisorctl status clue_backend ``` 注意:如supervisorctl未启动的话,需要先使用命令`supervisord -c /etc/supervisord.conf`启动 #### G. 配置nginx 直接拷贝nginx目录下的clue-backend.devops.com.conf(生产环境)或者是clue-backend.tdevops.com.conf(测试环境)到nginx的配置目录下(一般是/etc/nginx/conf.d) ```shell cp -R /home/data/devops/clue_backend/nginx/clue-backend.tdevops.com.conf /etc/nginx/conf.d/ ``` 注意:域名可自定义的
检查nginx是否正确 ```shell nginx -t ```
重新加载nginx ```shell nginx -s reload ```
在其他机器,设置hosts即可访问:clue-backend.tdevops.com ## 3. agent安装步骤 把agent目录拷到对应的客户端,运行对应版本的agent即可,会实时输出流量数据 ## 4. 相关配置 * 端口:8010 * 域名:clue-backend.devops.com(生产)、clue-backend.tdevops.com(测试) * Django配置:clue_backend/settings.py * Django环境配置:clue_backend/config/local.py或dev.py或prod.py * 日志地址:/home/data/logs/clue_backend * nginx配置:nginx目录,需要把对应文件拷贝到/etc/nginx/conf.d/ * supervisor配置:supervisor/dev.conf或prod.conf,需要把对应文件拷贝到/etc/supervisord.d下,并且改名clue_backend.conf * gunicorn配置:supervisor/gunicorn_conf.py