项目分享:python日志管理分析系统

1. 项目简介

本项目利用 pandas + sklearn 对 Nginx 的日志数据进行统计分析,并利用 flask 搭建后台,构建标准 restful 接口,前端利用
bootstrap + echarts + jquery 调用后台接口,并进行前端的渲染可视化。利用 python 解析 Nginx
的日志信息,包括错误日志和正常日志,解析出访问的
ip、访问方式、访问时间、访问路径、浏览器信息等信息,并从多维度可视化分析。包括:访问的PV/UV时序分析、访问的操作系统分析、访问方法分析
访问协议分析、访问状态码分析、异常访问分析、错误/攻击日志等多维度的分析。

2. 功能组成

基于python的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 用户注册登录

3.3 系统首页

首页中展示 Nginx
日志的整体情况,包括有效访问数量、错误访问数量、有效日志大小、错误日志大小、唯一访问者数量、访问协议种类、访问状态码种类和访问客户端操作系统等信息:

3.4 网站用户访问量统计(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.5 网站页面访问的客户端操作系统分布情况

解析日志记录,提取访问的客户端操作系统,解析统计分析,主要包括:Windows、Android、Web Spider、iPhone、Mac OS、Linux
和未知系统:

3.6 网站页面访问方法的分布情况

访问方法主要包括:GET、POST、HEAD和其他类型的访问方法:

3.7 网站页面访问协议的分布情况

访问协议主要包括:HTTP/1.1、HTTP/1.0、RTSP/1.0、PROGRA、SIP/2.0 和其他类型的访问协议:

3.8 网站页面访问状态码的分布情况

访问状态码主要包括:“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.9 网站错误访问分析PV分析

3.10 Nginx日志信息分类展示

项目分享

项目分享:

https://gitee.com/asoonis/feed-neo

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python开源后台管理系统是指使用Python语言开发的用于管理和操作后台数据的系统Python作为一种高级、易学易用的编程语言,具有丰富的生态系统和强大的库支持,因此在开发后台管理系统时,使用Python可以提高开发效率并降低开发成本。 Python开源后台管理系统通常提供了一套完整的管理界面和功能,可以方便地进行数据管理、用户管理、权限管理等操作。开发者可以根据自己的需求和业务逻辑,进行二次开发和定制,以满足不同的商业需求。 与其他语言相比,Python拥有丰富的第三方库和框架,例如Django、Flask等,这些框架提供了丰富的功能和工具,可以极大地减少开发时间和复杂度。同时,Python还支持各种关系型和非关系型数据库,如MySQL、MongoDB等,使得开发者可以灵活选择最适合的数据库进行后台数据管理。 使用Python开源后台管理系统,开发者可以快速搭建一个功能完善、稳定高效的后台管理系统,同时还可以享受到开源社区的支持和贡献。开源后台管理系统代码通常开放给公众,使得其他开发者可以参与开发、完善和改进系统,形成了一个良好的开发生态。 总之,Python开源后台管理系统是基于Python语言开发的一种用于管理和操作后台数据的系统,具有高效、易用、可定制等特点,适用于各种不同规模和业务需求的企业和组织。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值