当前位置: 首页 > 科技观察

使用此Python工具分析您的Web服务器日志文件

时间:2023-03-15 23:57:58 科技观察

此Python模块收集各种格式的网站使用日志,并输出结构良好的数据以供分析。想知道有多少访客访问过您的网站吗?或者哪些页面、文章或下载最受欢迎?如果您要自行托管博客或网站,无论您使用的是Apache、Nginx还是MicrosoftIIS(是的,没错),lars都可以为您提供帮助。Lars是一个用Python编写的Web服务器日志记录工具包。这意味着您可以使用Python通过简单代码追溯(或实时)解析日志,并对数据做任何您想做的事情:将其存储在数据库中,将其另存为CSV文件,或者立即使用Python做更多事情分析。Lars是DaveJones写的另一个隐藏的宝石。我第一次看到Davedemolars是在一个当地的Python用户组。几年后,我们开始在piwheels项目中使用它来读取Apache日志并将行插入我们的Postgres数据库。当RaspberryPi用户从piwheels.org下载Python包时,我们会记录文件名、时间戳、系统架构(Arm版本)、分发名称/版本、Python版本等。由于它是关系数据库,我们可以将这些结果加入到其他表以获取有关该文件的更多上下文信息。您可以使用以下命令安装lars:$pipinstalllars在某些系统上,正确的方法是sudopip3installlars。首先,找到一个网络访问日志并复制一份。您需要将日志文件下载到您的计算机上才能进行操作。我在示例中使用Apache日志,但通过一些小的(直观的)更改,您可以使用Nginx或IIS。在典型的Web服务器上,您会在/var/log/apache2/中找到Apache日志,通常是access.log、ssl_access.log(用于HTTPS)或gzipped旋转日志文件,如access-20200101.gz或ssl_access-20200101。广州。首先,日志是什么样的?81.174.152.222--[30/Jun/2020:23:38:03+0000]"GET/HTTP/1.1"2006763"-""Mozilla/5.0(X11;Ubuntu;Linuxx86_64;rv:77.0)Gecko/20100101Firefox/77.0"这是一个显示请求源IP地址、时间戳、请求的文件路径(在本例中为homepage/)、HTTP状态代码、用户代理(Ubuntu上的Firefox)等的请求。您的日志文件将被填充像这样的条目,不仅针对每个打开的页面,还针对每个返回的文件和资源:每个CSS样式表、JavaScript文件和图像、每个404请求、每个重定向、每个爬虫。要从日志中获取有意义的数据,您需要对条目进行解析、过滤和排序。这就是Lars的用武之地。这个例子将打开一个日志文件并打印每一行的内容:withopen('ssl_access.log')asf:withApacheSource(f)assource:forrowinsource: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)解析日志条目并将数据放入结构化格式。该条目已成为具有与条目数据关联的属性的命名元组,因此例如您可以使用row.status访问状态代码和使用row.request.url.path_str的路径:withopen('ssl_access.log')asf:withApacheSource(f)assource:forrowinsource:print(f'hit{row.request.url.path_str}withstatuscode{row.status}')如果你只想显示404请求,你可以做以下内容:withopen('ssl_access.log')asf:withApacheSource(f)assource:forrowinsource:ifrow.status==404:print(row.request.url.path_str)你可能想要删除这些数据并打印独立404页面的数量:s=set()withopen('ssl_access.log')asf:withApacheSource(f)assource:forrowinsource:ifrow.status==404:s.add(row.request.url.path_str)print(len(s))Dave和我一直致力于扩展piwheel的记录器以包括页面点击、包搜索等,感谢lars,这些并不困难。它没有告诉我们有关用户的任何信息。我们仍然需要做数据分析,但是它去掉了复杂和不方便的文件格式,并以我们可以利用的方式将其放入我们的数据库中。查看lars的文档,了解如何阅读Apache、Nginx和IIS日志,并了解您还可以用它做什么。再次感谢Dave提供的好工具!