Flask + echarts 轻松解决 nginx 日志可视化

这篇博客介绍了如何利用 Flask 和 Echarts 对 Nginx 访问日志进行数据处理、分析和可视化展示。首先,从 Nginx 访问日志中提取信息,通过正则表达式和 Python 的 pandas 进行数据整理。然后,通过百度 IP 定位服务获取省份信息并缓存。接着,使用 pandas 进行数据分析并导出到 Excel 文件。最后,借助 TurboWay 的 bigdata_practice 框架快速搭建数据展示系统,展示24小时访问趋势、客户端占比和用户分布等图表。
摘要由CSDN通过智能技术生成

最近,线上的业务系统不太稳定,需要分析下访问情况,能拿到的数据只有 nginx 服务器的访问日志,不过难不倒我,用合适的工具,分分钟做出图形化展示,看看怎么做的吧

思路

nginx 访问日志,记录了每次客户端请求,其中包括 ip、时间、使用的客户端等信息

通过解析每行数据,提取这些信息,然后对信息进行整理,并做一些必要的统计

最后将统计数据展示出来,可以直观地感知数据中蕴含的问题

基本思路就是这样,不过知道和做到之间地距离还有很远,为了达到目标,需要一些工具做支持

由于数据是 nginx 访问日志,所有不需要爬取,从服务器上下载就好

整理处理过程,除了 python 本身一些功能外,还离不开 pandas 的支持

最后数据展示部分,用的是 Flask + echarts,从头写,确实很有挑战,不过今天我们利用 TurboWay 同学的框架 bigdata_practice,就能轻松搞定

闲话少叙,开始吧

数据处理

下载到 nginx 访问日志,从 nginx 配置文件中可以查看日志存放地址,另外,本文源码中有附带示例日志文件,可下载使用

日志文件为文本文件,每行记录一条访问情况,例如:

124.64.19.27 - - [04/Sep/2020:03:21:12 +0800] "POST /api/hb.asp HTTP/1.1" 200 132 "http://erp.example.com/mainframe/main.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" "-"

读取文本文件的行,实现比较简单,这里只对提取字段和通过 ip 确定省份做下说明

提取

提取字段的方法如下:

import re

obj = re.compile(r'(?P<ip>.*?)- - \[(?P<time>.*?)\] "(?P<request>.*?)" (?P<status>.*?) (?P<bytes>.*?) "(?P<referer>.*?)" "(?P<ua>.*?)"')

result = obj.match(line)
# print(result.group("time"))
# ip处理
ip = result.group("ip").split(",")[0].strip() # 如果有两个ip,取第一个ip

# 状态码处理
status = result.group("status")  # 状态码

# 时间处理
time = result.group("time").replace(" +0800", "") # 提取时间,并去掉时区信息
t = datetime.datetime.strptime(time, "%d/%b/%Y:%H:%M:%S")  # 格式化
# request处理
request = result.group("request")
a = request.split()[1].split("?")[0]  # 提取请求 url,去掉查询参数

# user_agent处理
ua = result.group("ua")
if "Windows NT" in ua:
    u 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值