WebLogsAnalysisSystem
A big data platform for analyzing web access logs
Install / Use
/learn @Maicius/WebLogsAnalysisSystemREADME
基于HBase的网站日志数据分析系统
系统说明
1. 数据库设计
LogData
- 该表用于存储经数据清洗、转化后的数据
- 数据库类型: HBase
- 表结构
Rowkey| prop | ----|:---------------------------:| | rowkey | IP / BYTES / URL / DATES / METHOD / FYDM / BYTES|
- RowKey 结构设计说明
RowKey 分为 日期 + 网站代码后三位 + 六位数ID
各部分说明如下:
字段 | 解释 | 例子 ----| ----- |---- 日期 |日志文件的产生日期(纯数字,不含空格和-) | 20170808 公司代码| 公司代码后三位 |200 ID | 从100000开始的六位数字,用于唯一的标明数据并对齐 | 100001
完整例子
201708082001000000 表示代号为200点公司在2017-08-08产生的一次请求
- 建表语句
create "LogData", "prop"
LogAna
-
该表用于存储分析之后的数据
-
数据库类型: HBase
-
表结构
RowKey | IP | URL | BYTES | MTHOD_STATE |REQ -------|----|-----|-------|-------------|--- rowkey |IPSumVal IPTotalNum IPList |URLList MaxURL | BytesSecList BytesHourList / TotalBytes | MethodList StateList | ReqHourList ReqSecList ReqSum
-
字段说明
字段 | 解释 | 例子 ----| ----- |---- IPTotalNum| IP总数,不包含重复的 | 100 表示当天有100个IP访问网站 IPSumVal | IP总数,包含重复 | 100表示有100个IP访问网站,IP可重复 IPList | IP和对应访问量的排行,结构为 由mutable.Map[String, Int]转变来的JSON文件| {"190.1.1.1": 1000} 表示190.1.1.1的IP共在网站产生1000次请求) URLList | 被请求次数最多的10个URL,结构为Json | {"test.aj":100, "test2.aj":90, ...} MaxURL | 请求次数最多的URL(现在前端已经放弃使用这字段) |{"test.aj": 100} BytesSecList | 统计每秒内产生的流量,单位为Byte,但是前端展示时转化为MB | {"2017-08-08 01:00:00":9000, "2017-08-08 01:00:00": 500, ...} BytesHourList | 统计一天内每小时内产生的流量,单位为Byte,但是前端展示时转化为MB | {"08":9000, "09": 500, ...}, 08 表示 8点到9点内产生的流量 TotalBytes | 一天内产生的总流量大小,单位为Byte,但是前端展示时转化为MB | 3000, 表示当天产生 3000b bytes的流量 MethodList | 出现过的请求方法统计 | {"POST":3446,"OPTIONS":5,"HEAD":4} StateList | 出现过的请求状态中级 | {"501":8,"302":801,"404":1,"200":14738,"400":2,"405":4} ReqHourList | 按小时统计请求次数 | {"15":2350,"09":3503,"00":690,"11":1903} ReqSecList | 按秒统计请求次数 | {"2017-08-08 10:44:08":1,"2017-08-08 09:45:05":4,"2017-08-08 10:06:58":4} ReqSum | 一天内总请求次数 | 1000,表示当天内共有1000次请求
-
RowKey 结构设计说明
RowKey 分为 日期 + 公司代码后三位 各部分说明如下:
字段 | 解释 | 例子
----| ----- |----
日期 |日志文件的产生日期(纯数字,不含空格和-) | 20170808
公司代码| 公司代码后三位 |200, 需要注意的是000表示当天所有网站数据
> example:
20170808200 表示天津高院在2017-08-08的所有数据
20170808000 表示所有法院在2017-08-08点所有数据
- 建表语句
create "LogAna", "IP", "URL", "BYTES", "METHOD_STATE", "REQ"
2. 项目代码描述
- 本项目分为三个子项目, 包括数据采集、数据存储和展示、数据离线分析
数据采集
-
工程名:CollectTomcatLogs
-
功能说明:
收集指定路径下的tomcat日志
重命名文件之后上传到HDFS或FTP服务器
保存日志,记录是否上传成功 -
部署说明: 部署在各个需要采集日志的服务器上,在 my.properties 里指定公司代码和日志路径
-
配置管理: maven
-
主要技术: Java FTPClient, HDFS
-
测试用例说明: 主要用于测试重命名后的文件是否正常
-
文件重命名: 在localhost_XXXXX.txt文件前加上法院代码,以此来区分各公司数据
数据存储和展示
-
工程名: RestoreData
-
功能说明:
数据预处理: 包括数据解析、清洗和转化
数据存储: 将转化后的数据保存在一个List中,批量插入HBase数据库
前端展示:展示分析得到的数据
数据查询: 根据各种输入条件查询对应的数据 -
开发环境:
JDK 8
Hadoop 2.7
Hbase 1.2 tomcat 8 -
部署说明:在 my.properties 里配置好各项数据,注意JDK、Hadoop的版本兼容
-
配置管理: maven
-
主要技术:Spring MVC / Hadoop / JSP
-
测试用例说明:
HbaseBatchInsertTest.java: 用于测试批量插入
HbaseConnectionTest.java: 用于测试Hbase连接是否正常
ParseLogTest.java: 用于测试日志解析
ListBean.java: 打印所有的bean,用于应付@Autowried失败的情况 -
前端部分:
####代码部分 index.jsp: 默认加载页面,加载完成后会请求数据,展示前一天所有网站数据
index.js: 用于处理index.jsp中的各种请求和数据解析
queryData.jsp: 用于查询各家网站数据,输入为日期 + 网站,支持多选
queryData.js: 用于处理queryData.jsp中的各种请求和数据解析(待完成)
dataGrid.jsp: 以表格的形式展示数据(待完成)
myCharts.js: 使用echarts绘制各种图表(注意dom的初始化在外部完成)
inputCheck.js: 检查输入是否合法
mystyle.css: 定制各类样式 ####第三方库 Bootstrap: 主要是用其格栅系统
Bootstrap-select: 多选框的实现
BootstrapDatepickr: 日期输入
echarts: 绘制各类图表
jQuery: 框架
font-awesome: 各类小图标
数据离线分析
-
工程名: ScalaReadAndWrite
-
功能说明:
离线分析各类数据,共13个指标,详情见数据库表 LogAna 设计
-
开发环境:
Scala 2.11
Spark 1.52
Hadoop 2.7 -
特别说明:
spark 中全局变量只有两种实现方式,广播变量或累加器,本项目使用累加器
自定义的累加器的时候非常一定要注意输入输出类型一定要正确 一定要实现全部六个重载函数
一个累加器只能传递一种变量,这个变量可以是复杂的对象
不这样做的话累加器会失效! -
部署说明:暂无
-
配置管理:maven
-
主要技术:Spark
-
项目结构说明:
Accumulator:累加器,包含各种自定义的累加器
analysis: 主要分析代码 DAO: 解析实体类,并存入到HBase
Entity: 两个实体类
util: 各种工具类3. 项目截图:
-
Hbase数据库截图

-
数据展示界面

-
数据展示界面

-
Related Skills
node-connect
352.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
