使用这个 Python 工具分析你的 Web 服务器日志文件


使用这个 Python 工具分析你的 Web 服务器日志文件

文章插图
 
这个 Python 模块可以以多种格式收集网站使用日志并输出良好结构化数据以进行分析 。
• 来源:linux.cn • 作者:Ben Nuttall • 译者:geekpi •
(本文字数:3262,阅读时长大约:4 分钟)
是否想知道有多少访问者访问过你的网站?或哪个页面、文章或下载最受欢迎?如果你是自托管的博客或网站,那么无论你使用的是 Apache、Nginx 还是 Microsoft IIS(是的,没错),lars 都可以为你提供帮助 。
Lars 是 Python 写的 Web 服务器日志工具包 。这意味着你可以使用 Python 通过简单的代码来回溯(或实时)解析日志,并对数据做任何你想做的事:将它存储在数据库中、另存为 CSV 文件,或者立即使用 Python 进行更多分析 。
Lars 是 Dave Jones 写的另一个隐藏的宝石 。我最初是在本地 Python 用户组中看到 Dave 演示 lars 。几年后,我们开始在 piwheels 项目中使用它来读取 Apache 日志并将行插入到我们的 Postgres 数据库中 。当树莓派用户从 piwheels.org 下载 Python 包时,我们会记录文件名、时间戳、系统架构(Arm 版本)、发行版名称/版本,Python 版本等 。由于它是一个关系数据库,因此我们可以将这些结果加入其他表中以获得有关文件的更多上下文信息 。
你可以使用以下方法安装lars:
$ pip install lars在某些系统上,正确的方式是 sudo pip3 install lars 。
首先,找到一个 Web 访问日志并制作一个副本 。你需要将日志文件下载到计算机上进行操作 。我在示例中使用的是 Apache 日志,但是经过一些小(且直观)的更改,你可以使用 Nginx 或 IIS 。在典型的 Web 服务器上,你会在 /var/log/apache2/ 中找到 Apache 日志,通常是 access.log、ssl_access.log(对于 HTTPS)或 gzip 压缩后的轮转日志文件,如 access-20200101.gz 或者 ssl_access-20200101.gz。
首先,日志是什么样的?
81.174.152.222 - - [30/Jun/2020:23:38:03 +0000] "GET / HTTP/1.1" 200 6763 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0"这是一个显示了请求源 IP 地址、时间戳、请求文件路径(在本例中是主页 /)、HTTP 状态代码,用户代理(Ubuntu 上的 Firefox)等的请求 。
你的日志文件将充满这样的条目,不仅是每个打开的页面,还包括返回的每个文件和资源:每个 css 样式表、JAVAScript 文件和图像,每个 404 请求、每个重定向、每个爬虫 。要从日志中获取有意义的数据,你需要对条目进行解析、过滤和排序 。这就是 Lars 的用处 。本示例将打开一个日志文件并打印每一行的内容:
with open('ssl_access.log') as f:    with ApacheSource(f) as source:        for row in source:            print(row)它会为每条日志显示如下结果:
Row(remote_host=IPv4Address('81.174.152.222'), ident=None, remote_user=None, time=DateTime(2020, 6, 30, 23, 38, 3), request=Request(method='GET', url=Url(scheme='', netloc='', path_str='/', params='', query_str='', fragment=''), protocol='HTTP/1.1'), status=200, size=6763)它解析了日志条目,并将数据放入结构化格式中 。该条目已成为具有与条目数据相关属性的 


    推荐阅读