{"id":19659751,"url":"https://github.com/maicius/weblogsanalysissystem","last_synced_at":"2025-04-28T20:31:58.796Z","repository":{"id":24175840,"uuid":"100799048","full_name":"Maicius/WebLogsAnalysisSystem","owner":"Maicius","description":"A big data platform for analyzing web access logs","archived":false,"fork":false,"pushed_at":"2022-12-16T00:36:08.000Z","size":3974,"stargazers_count":52,"open_issues_count":26,"forks_count":35,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-05T10:41:43.105Z","etag":null,"topics":["echarts","hadoop","hbase","scala","spark"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Maicius.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-19T14:18:14.000Z","updated_at":"2025-02-20T08:22:46.000Z","dependencies_parsed_at":"2023-01-14T07:45:24.684Z","dependency_job_id":null,"html_url":"https://github.com/Maicius/WebLogsAnalysisSystem","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maicius%2FWebLogsAnalysisSystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maicius%2FWebLogsAnalysisSystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maicius%2FWebLogsAnalysisSystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maicius%2FWebLogsAnalysisSystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Maicius","download_url":"https://codeload.github.com/Maicius/WebLogsAnalysisSystem/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251383836,"owners_count":21580947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["echarts","hadoop","hbase","scala","spark"],"created_at":"2024-11-11T15:44:17.048Z","updated_at":"2025-04-28T20:31:58.023Z","avatar_url":"https://github.com/Maicius.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 基于HBase的网站日志数据分析系统\n  \n## 系统说明\n\n### 1. 数据库设计\n\n#### LogData\n\n- 该表用于存储经数据清洗、转化后的数据\n- 数据库类型： HBase\n- 表结构\n\n Rowkey|         prop              |\n ----|:---------------------------:|\n |\trowkey  | IP\t/ BYTES / URL / DATES / METHOD / FYDM / BYTES|\n- RowKey 结构设计说明\n\u003e  RowKey 分为 日期 + 网站代码后三位 + 六位数ID  \n\u003e  各部分说明如下：   \n\n 字段 |  解释 | 例子\n----| ----- |----\n日期 |日志文件的产生日期(纯数字，不含空格和-) | 20170808\n公司代码| 公司代码后三位 |200\nID | 从100000开始的六位数字，用于唯一的标明数据并对齐 | 100001 \n\u003e 完整例子  \n\u003e 201708082001000000 表示代号为200点公司在2017-08-08产生的一次请求\n\t \n- 建表语句\n\u003e create \"LogData\", \"prop\"\n\n-\n\n#### LogAna\n- 该表用于存储分析之后的数据\n- 数据库类型： HBase\n- 表结构 \n\n\tRowKey | IP | URL | BYTES | MTHOD_STATE |REQ\n\t-------|----|-----|-------|-------------|---\n\trowkey |IPSumVal  IPTotalNum  IPList |URLList  MaxURL | BytesSecList  BytesHourList /  TotalBytes  | MethodList StateList | ReqHourList ReqSecList ReqSum\n- 字段说明\n\n\t字段 |  解释 | 例子\n\t ----| ----- |----\n\t IPTotalNum| IP总数，不包含重复的 | 100 表示当天有100个IP访问网站\n\t IPSumVal | IP总数，包含重复 | 100表示有100个IP访问网站，IP可重复\n\t IPList | IP和对应访问量的排行，结构为 由mutable.Map[String, Int]转变来的JSON文件| {\"190.1.1.1\"： 1000}  表示190.1.1.1的IP共在网站产生1000次请求）\n\t URLList | 被请求次数最多的10个URL，结构为Json | {\"test.aj\":100, \"test2.aj\":90, ...}\n\t MaxURL | 请求次数最多的URL(现在前端已经放弃使用这字段) |{\"test.aj\": 100}\n\t BytesSecList | 统计每秒内产生的流量，单位为Byte,但是前端展示时转化为MB | {\"2017-08-08 01:00:00\":9000， \"2017-08-08 01:00:00\": 500, ...}\n\t BytesHourList | 统计一天内每小时内产生的流量，单位为Byte,但是前端展示时转化为MB | {\"08\":9000， \"09\": 500, ...}， 08 表示 8点到9点内产生的流量\n\t TotalBytes | 一天内产生的总流量大小,单位为Byte,但是前端展示时转化为MB | 3000, 表示当天产生 3000b bytes的流量\n\t MethodList | 出现过的请求方法统计 | {\"POST\":3446,\"OPTIONS\":5,\"HEAD\":4}\n\t StateList | 出现过的请求状态中级 | {\"501\":8,\"302\":801,\"404\":1,\"200\":14738,\"400\":2,\"405\":4}\n\t ReqHourList | 按小时统计请求次数 | {\"15\":2350,\"09\":3503,\"00\":690,\"11\":1903}\n\t ReqSecList | 按秒统计请求次数 | {\"2017-08-08 10:44:08\":1,\"2017-08-08 09:45:05\":4,\"2017-08-08 10:06:58\":4}\n\t ReqSum | 一天内总请求次数 | 1000，表示当天内共有1000次请求\n\t \n- RowKey 结构设计说明\n\u003e  RowKey 分为 日期 + 公司代码后三位\n\u003e  各部分说明如下：   \n\n\t\t字段 |  解释 | 例子\n\t\t ----| ----- |----\n\t \t日期 |日志文件的产生日期(纯数字，不含空格和-) | 20170808\n\t \t公司代码| 公司代码后三位 |200， 需要注意的是000表示当天所有网站数据\n\t \n\t\u003e example:\n\t20170808200 表示天津高院在2017-08-08的所有数据\n\t20170808000 表示所有法院在2017-08-08点所有数据\n\t \n- 建表语句  \n\u003e create \"LogAna\", \"IP\", \"URL\", \"BYTES\", \"METHOD_STATE\", \"REQ\"\n\n\n### 2. 项目代码描述\n- 本项目分为三个子项目， 包括数据采集、数据存储和展示、数据离线分析   \n\n#### 数据采集\n\n- 工程名：CollectTomcatLogs\n- 功能说明：   \n\n\t\u003e 收集指定路径下的tomcat日志  \n\t\u003e 重命名文件之后上传到HDFS或FTP服务器   \n\t\u003e 保存日志，记录是否上传成功\n \n- 部署说明： 部署在各个需要采集日志的服务器上，在 my.properties 里指定公司代码和日志路径\n- 配置管理： maven\n- 主要技术： Java FTPClient, HDFS\n- 测试用例说明： 主要用于测试重命名后的文件是否正常\n- 文件重命名： 在localhost_XXXXX.txt文件前加上法院代码，以此来区分各公司数据\n\n#### 数据存储和展示\n- 工程名： RestoreData\n- 功能说明：\n\n\t\u003e 数据预处理： 包括数据解析、清洗和转化  \n\t\u003e 数据存储： 将转化后的数据保存在一个List中，批量插入HBase数据库  \n\t\u003e 前端展示：展示分析得到的数据  \n\t\u003e 数据查询： 根据各种输入条件查询对应的数据\n- 开发环境： \n\t\u003e JDK 8   \n\t\u003e Hadoop 2.7   \n\t\u003e Hbase 1.2\n\t\u003e tomcat 8   \n- 部署说明:在 my.properties 里配置好各项数据,注意JDK、Hadoop的版本兼容\n- 配置管理： maven\n- 主要技术：Spring MVC / Hadoop / JSP\n- 测试用例说明：\n\t\u003e HbaseBatchInsertTest.java: 用于测试批量插入  \n\t\u003e HbaseConnectionTest.java: 用于测试Hbase连接是否正常  \n\t\u003e ParseLogTest.java: 用于测试日志解析  \n\t\u003e ListBean.java: 打印所有的bean，用于应付@Autowried失败的情况  \n- 前端部分：  \n\t\u003e####代码部分\n\t\u003e index.jsp： 默认加载页面，加载完成后会请求数据，展示前一天所有网站数据  \n\t\u003e index.js： 用于处理index.jsp中的各种请求和数据解析\n\t\n\t\u003e ---------- \n\t\u003e queryData.jsp: 用于查询各家网站数据，输入为日期 + 网站，支持多选  \n\t\u003e queryData.js: 用于处理queryData.jsp中的各种请求和数据解析（待完成）\n\t\n\t\u003e ---------\n\t\u003e dataGrid.jsp: 以表格的形式展示数据（待完成）\n\t\n\t\u003e --------\n\t\u003e myCharts.js: 使用echarts绘制各种图表(注意dom的初始化在外部完成）  \n\t\u003e inputCheck.js: 检查输入是否合法\n\t\n\t\u003e---------\n\t\u003e mystyle.css: 定制各类样式\n\t\u003e####第三方库\n\t\u003e Bootstrap: 主要是用其格栅系统  \n\t\u003e Bootstrap-select: 多选框的实现  \n\t\u003e BootstrapDatepickr: 日期输入  \n\t\u003e echarts: 绘制各类图表  \n\t\u003e jQuery: 框架  \n\t\u003e font-awesome: 各类小图标\n\n\t\n#### 数据离线分析\n\n- 工程名： ScalaReadAndWrite\n- 功能说明：\n\n\t\u003e 离线分析各类数据，共13个指标，详情见数据库表 LogAna 设计\n\t\n- 开发环境：\n\t\u003e Scala 2.11  \n\t\u003e Spark 1.52  \n\t\u003e Hadoop 2.7  \n- 特别说明：\n\t\u003e spark 中全局变量只有两种实现方式，广播变量或累加器，本项目使用累加器  \n\t\u003e 自定义的累加器的时候非常一定要注意输入输出类型一定要正确\n\t\u003e 一定要实现全部六个重载函数  \n\t\u003e 一个累加器只能传递一种变量，这个变量可以是复杂的对象  \n\t\u003e 不这样做的话累加器会失效！\n- 部署说明：暂无\n- 配置管理：maven\n- 主要技术：Spark\n- 项目结构说明：\n\t\u003e Accumulator:累加器，包含各种自定义的累加器  \n\t\u003e analysis: 主要分析代码\n\t\u003e DAO: 解析实体类，并存入到HBase  \n\t\u003e Entity： 两个实体类  \n\t\u003e util: 各种工具类\n\t\n\t#### 3. 项目截图：\n\t\n\t- Hbase数据库截图  \n\t![image](https://github.com/Maicius/WebLogsAnalysisSystem/blob/master/image/p2.png)\n\t  \n\t- 数据展示界面  \n\t![image](https://github.com/Maicius/WebLogsAnalysisSystem/blob/master/image/p1.png)  \n\t\n\t- 数据展示界面  \n\t![image](https://github.com/Maicius/WebLogsAnalysisSystem/blob/master/image/p3.png)\n\n\t\n\n\n\t\n\t\n\n\n\t \n\n \n \n \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaicius%2Fweblogsanalysissystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaicius%2Fweblogsanalysissystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaicius%2Fweblogsanalysissystem/lists"}