良许Linux教程网 干货合集 通过Lars分析Web服务器日志

通过Lars分析Web服务器日志

Lars 是 Python 写的 Web 服务器日志工具包。这意味着你可以使用 Python 通过简单的代码来回溯(或实时)解析日志,并对数据做任何你想做的事:将它存储在数据库中、另存为 CSV 文件,或者立即使用 Python 进行更多分析。

Lars 是 Dave Jones 写的另一个隐藏的宝石。我最初是在本地 Python 用户组中看到 Dave 演示 lars。几年后,我们开始在 piwheels 项目中使用它来读取 Apache 日志并将行插入到我们的 Postgres 数据库中。当树莓派用户从 piwheels.org下载 Python 包时,我们会记录文件名、时间戳、系统架构(Arm 版本)、发行版名称/版本,Python 版本等。由于它是一个关系数据库,因此我们可以将这些结果加入其他表中以获得有关文件的更多上下文信息。

u=1011479349,1607728672&fm=26&gp=0

你可以使用以下方法安装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)

它解析了日志条目,并将数据放入结构化格式中。该条目已成为具有与条目数据相关属性的命名元组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,这些并不难。它不会告诉我们有关用户的任何答案。我们仍然需要进行数据分析,但它去掉了复杂不便的文件格式,并以我们可以利用的方式将它放入我们的数据库。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

img
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部