(本文字数:3262,阅读时长大概:4分钟)
是否想晓得有多少访问者访问过你的网站?或那个页面、文章或下载最受欢迎?假如你是自托管的博客或网站linux下查看python版本信息,这么无论你使用的是Apache、Nginx还是MicrosoftIIS(是的,没错),lars都可以为你提供帮助。
Lars是Python写的Web服务器日志工具包。这意味着你可以使用Python通过简单的代码来回溯(或实时)解析日志,并对数据做任何你想做的事:将它存贮在数据库中、另存为CSV文件,或则立刻使用Python进行更多剖析。
Lars是DaveJones写的另一个隐藏的宝石。我最初是在本地Python用户组中见到Dave演示lars。几年后嵌入式linux驱动程序设计从入门到精通,我们开始在piwheels项目中使用它来读取Apache日志并将行插入到我们的Postgres数据库中。当猕猴桃派用户从下载Python包时,我们会记录文件名、时间戳、系统构架(Arm版本)、发行版名称/版本,Python版本等。因为它是一个关系数据库,因而我们可以将这种结果加入其他表中以获得有关文件的更多上下文信息。
你可以使用以下方式安装lars:
$ pip install lars
在个别系统上,正确的方法是sudopip3installlars。
首先,找到一个Web访问日志并制做一个副本。你须要将日志文件下载到计算机上进行操作。我在示例中使用的是Apache日志,并且经过一些小(且直观)的修改,你可以使用Nginx或IIS。在典型的Web服务器上,你会在/var/log/apache2/中找到Apache日志,一般是access.log、ssl_access.log(对于HTTPS)或gzip压缩后的轮转日志文件,如access-20200101.gz或则ssl_access-20200101.gz。
首先虚拟主机 linux,日志是哪些样的?
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)等的恳求。
你的日志文件将饱含这样的条目,除了是每位打开的页面linux下查看python版本信息,还包括返回的每位文件和资源:每位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提供的出众工具!
最初发布在BenNuttall的ToolingBlog中,并获许重新发布。
via:
作者:BenNuttall选题:lujun9972译者:geekpi校对:wxy
本文由LCTT原创编译,Linux中国荣誉推出