导读:这个 Python 模块可以以多种格式收集网站使用日志并输出良好结构化数据以进行分析。         本文字数:3262,阅读时长大约:4分钟https://linux.cn/article-12512-1.html作者:Ben Nuttall译者:geekpi

是否想知道有多少访问者访问过你的网站?或哪个页面、文章或下载最受欢迎?如果你是自托管的博客或网站,那么无论你使用的是 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.logssl_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)

它解析了日志条目,并将数据放入结构化格式中。该条目已成为具有与条目数据相关属性的命名元组(namedtuple),因此,例如,你可以使用 row.status 访问状态代码,并使用 row.request.url.path_str 访问路径:

with open('ssl_access.log') as f:    with ApacheSource(f) as source:        for row in source:            print(f'hit {row.request.url.path_str} with status code {row.status}')

如果你只想显示 404 请求,可以执行以下操作:

with open('ssl_access.log') as f:    with ApacheSource(f) as source:        for row in source:            if row.status == 404:                print(row.request.url.path_str)

你可能要对这些数据去重,并打印独立的 404 页面数量:

s = set()with open('ssl_access.log') as f:    with ApacheSource(f) as source:        for row in source:            if row.status == 404:                s.add(row.request.url.path_str)print(len(s))

我和 Dave 一直在努力扩展 piwheel 的日志记录器,使其包含网页点击量、软件包搜索等内容,归功于 lars,这些并不难。它不会告诉我们有关用户的任何答案。我们仍然需要进行数据分析,但它去掉了复杂不便的文件格式,并以我们可以利用的方式将它放入我们的数据库。

查阅 lars 的文档,以了解如何读取 Apache、Nginx 和 IIS 日志,并了解你还可以使用它做什么。再次感谢 Dave 提供的出色工具!

最初发布在 Ben Nuttall 的 Tooling Blog 中,并获许重新发布。


via: https://opensource.com/article/20/7/python-lars

作者:Ben Nuttall 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

dump文件分析工具_使用这个 Python 工具分析你的 Web 服务器日志文件 | Linux 中国...相关推荐

  1. fat32 linux 打包工具_一个方便的用于创建树莓派 SD 卡镜像的程序 | Linux 中国

    开始在 Mac 上使用 Raspberry Pi Imager.-- James Farrell(作者) 有多种购买树莓派的方法,根据你的购买渠道的不同,可能附带或不附带操作系统.要在树莓派上安装操作 ...

  2. 命名管道 win7未响应_大数据分析Python建立分析数据管道

    如果您曾经想通过流数据或快速变化的数据在线学习Python,那么您可能会熟悉数据管道的概念.数据管道允许您通过一系列步骤将数据从一种表示形式转换为另一种表示形式.数据管道是数据工程的关键部分,我们将在 ...

  3. jsp页面判断输入编号已存在mysql中_面试官让我聊聊Mysql基础架构之日志文件与数据文件...

    上一篇文章讲述了Mysql的基本框架,和sql执行的流程,这篇文章首先分析下每个流程的具体细节,然后介绍日志文件和数据文件以下面语句作为例子来分析流程中每一步的具体细节: select * from ...

  4. python搭建web服务器_用Python建立最简单的web服务器

    利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录的路径下,输入命令:python -m Web服务器模块 [端口号,默认8000]例如:python -m Sim ...

  5. 记一次python后端从web服务器下载文件

    记一次tornado框架python后端从web服务器下载文件过程 date 2020.7.21 Q:暂定的过程 用post方法,先前用的get,传body内文件名. 1.首先获取前端需要下载什么文件 ...

  6. 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序

    最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享. PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI ...

  7. IIS Web服务器日志、日志服务器分析

    IIS Web服务器日志.日志服务器分析     EventLog Analyzer是一款全面的工具,用于审计.管理和跟踪您的Microsoft Internet Information Servic ...

  8. 用Python建立最简单的web服务器

    用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录的路径下,输入命令: python -m Web服务器模块 [端口号,默认 ...

  9. 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf

    Python实实现现简简易易版版的的Web服服务务器器(推推荐荐) 下面给大家介绍python实现简易版的web服务器,具体内容详情大家通过本文学习 ! 1.请自行了解HTTP协议 /article/ ...

最新文章

  1. 如何获取URL中的参数
  2. filter java 是单例的吗_JAVA 设计模式之 单例模式详解
  3. ncvlog帮助文档存放路径_Cadence ncvlog error
  4. 4.7 参数 vs 超参数-深度学习-Stanford吴恩达教授
  5. 提示No Launcher activity found
  6. 如何自己亲手制作一个防疫地图?
  7. linux 内存查看_Linux终端查看最消耗CPU内存的进程
  8. Vue 进阶 (六)
  9. 【马来西亚】娘惹的含义
  10. JavaScript模块化开发(一)基础知识
  11. 6个基本screen命令
  12. 47. 不用加减乘除做加法(C++版本)
  13. intellij idea 使用 git stash
  14. 高等数学在计算机的应用论文,(高等数学论文计算机软件及应用.doc
  15. 开题报告:基于java的电子商务购物网站系统 毕业设计论文开题报告模板
  16. ReLU,PReLU和LReLUD的区别
  17. 2019腾讯后台开发详细面试流程
  18. PS下的遥感图像修图
  19. IDA6.8 爱加密脱壳简单示例
  20. Js一句话实现打开QQ和客服聊天

热门文章

  1. 蓝桥杯【介绍】和【如何准备才可以拿奖】
  2. 2.3.8 吸烟者问题
  3. JVM方法区内存分配
  4. Ping命令检测网站运行状态
  5. Tomcat已经启动
  6. 【LeetCode】0938. 二叉搜索树的范围和(二叉树的遍历)
  7. 【LeetCode】0136. 只出现一次的数字
  8. 我服了!一些比较恶心的代码片段
  9. 3000 字说说跨域!面试官听完之后露出了满意的笑容
  10. Android系统主题总结和使用