温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :)
1. 项目简介
本项目利用 pandas + sklearn 对 Nginx 的日志数据进行统计分析,并利用 flask 搭建后台,构建标准 restful 接口,前端利用 bootstrap + echarts + jquery 调用后台接口,并进行前端的渲染可视化。利用 python 解析 Nginx 的日志信息,包括错误日志和正常日志,解析出访问的 ip、访问方式、访问时间、访问路径、浏览器信息等信息,并从多维度可视化分析。包括:访问的PV/UV时序分析、访问的操作系统分析、访问方法分析 访问协议分析、访问状态码分析、异常访问分析、错误/攻击日志等多维度的分析。
本项目近期进行了迭代优化,此版本为最新版本。
【新版】服务器日志可视化分析系统
2. 功能组成
基于数据挖掘的Nginx日志可视化分析系统的功能主要包括:
3. 基于python的Nginx日志管理分析系统
3.1 日志数据解析
Nginx的日志数据格式如下:
111.206.106.29 - - [30/Sep/2021:00:00:01 +0800] "GET //news_more.asp?lm2=61 HTTP/1.1" 301 169 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
114.246.34.60 - - [30/Sep/2021:00:00:01 +0800] "GET //news_more.asp?lm2=61 HTTP/1.1" 301 169 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
111.206.106.29 - - [30/Sep/2021:00:00:01 +0800] "GET //news_more.asp?lm2=66 HTTP/1.1" 301 169 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
111.206.106.29 - - [30/Sep/2021:00:00:01 +0800] "GET //news_more.asp?lm2=89 HTTP/1.1" 301 169 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
我们读取日志文件,解析出访问的 ip、访问时间、访问的方法、访问的路径、访问的协议、响应的状态码、访问的客户端操作系统、日志状态等信息:
all_access_logs = []
with open('./data/access.log', 'r', encoding='utf8') as f:
for line in tqdm(f.readlines()):
line = line.strip()
# 解析出访问的 ip、访问时间
ip_date = line.split('"')[0]
ip = ip_date.split('-')[0].strip()
date_time = ip_date.split('-')[-1].strip()[1:-1].split(' ')[0]
date_time = datetime.datetime.strptime(date_time, '%d/%b/%Y:%H:%M:%S')
# 访问的方法
data = line.split('] "')[1].split(' ')
method = data[0]
# 访问的路径
path = data[1]
# 访问的协议
protocol = data[2][:-1]
# 响应的状态码
code = data[3]
# 访问的客户端操作系统
browser_info = line.split('" "')[-1].lower()
# 日志状态
zhuangtai = '正常'
if 'windows' in browser_info:
sys_os = 'Windows'
elif 'mac' in browser_info and 'iphone' not in browser_info:
sys_os = 'Mac OS'
elif 'iphone' in browser_info:
sys_os = 'iPhone'
elif 'linux' in browser_info and 'android' not in browser_info:
sys_os = 'Linux'
elif 'android' in browser_info:
sys_os = 'Android'
elif 'bot' in browser_info or 'spider' in browser_info:
sys_os = 'Web Spider'
zhuangtai = '恶意爬虫攻击'
else:
sys_os = '未知'
if 'select ' in line.lower() or 'update' in line.lower():
print('SQL注入攻击')
zhuangtai = 'SQL注入攻击'
3.2 用户注册登录与系统首页
首页中展示 Nginx 日志的整体情况,包括有效访问数量、错误访问数量、有效日志大小、错误日志大小、唯一访问者数量、访问协议种类、访问状态码种类和访问客户端操作系统等信息:
3.3 网站用户访问量统计(PV/UV)
PV 分析,PV(Page View)访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量:
。。。。。。
sql = 'select ip, date_time from AccessLog'
cursor.execute(sql)
results = cursor.fetchall()
daily_pv = {}
daily_uv = {}
for res in results:
ip, date_time = res
date = ':'.join(date_time.split(':')[:-1])
if date not in daily_pv:
daily_pv[date] = 0
daily_pv[date] += 1
if date not in daily_uv:
daily_uv[date] = set()
daily_uv[date].add(ip)
for date in daily_uv:
daily_uv[date] = len(daily_uv[date])
pv_date = list(daily_pv.keys())
uv_date = list(daily_uv.keys())
。。。。。。
3.4 网站页面访问的客户端操作系统分布情况
解析日志记录,提取访问的客户端操作系统,解析统计分析,主要包括:Windows、Android、Web Spider、iPhone、Mac OS、Linux 和未知系统:
3.5 网站页面访问方法的分布情况
访问方法主要包括:GET、POST、HEAD和其他类型的访问方法:
3.6 网站页面访问协议的分布情况
访问协议主要包括:HTTP/1.1、HTTP/1.0、RTSP/1.0、PROGRA、SIP/2.0 和其他类型的访问协议:
3.7 网站页面访问状态码的分布情况
访问状态码主要包括:"301", "200", "404", "304", "403", "206", "500", "302", "400", "152", "148"等:
def get_code_analysis():
conn = sqlite3.connect('nginxlog.db')
cursor = conn.cursor()
sql = 'select code from AccessLog'
cursor.execute(sql)
results = cursor.fetchall()
key_count = {}
for res in results:
key = res[0]
try:
float(key)
if key not in key_count:
key_count[key] = 0
key_count[key] += 1
except:
pass
oss = list(key_count.keys())
return jsonify({'访问状态码': oss, '次数': [key_count[o] for o in oss]})
3.8 网站错误访问分析PV分析
3.9 Nginx日志信息分类展示
4. 结论
本项目利用 pandas + sklearn 对 Nginx 的日志数据进行统计分析,并利用 flask 搭建后台,构建标准 restful 接口,前端利用 bootstrap + echarts + jquery 调用后台接口,并进行前端的渲染可视化。利用 python 解析 Nginx 的日志信息,包括错误日志和正常日志,解析出访问的 ip、访问方式、访问时间、访问路径、浏览器信息等信息,并从多维度可视化分析。包括:访问的PV/UV时序分析、访问的操作系统分析、访问方法分析 访问协议分析、访问状态码分析、异常访问分析、错误/攻击日志等多维度的分析。
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)
精彩专栏推荐订阅: