python正则分析nginx的访问日志

 更新时间:2017年01月17日 09:19:21   作者:mindg.cn  
最近工作中遇到一个需求,是要分析nginx的访问日志,觉着利用python来实现比较合适,所以下面这篇文章主要介绍了利用python正则如何分析nginx的访问日志,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

本文的脚本是分析nginx的访问日志, 主要为了检查站点uri的访问次数的,检查的结果会提供给研发人员做参考,因为谈到分析嘛,那肯定要用到正则表达式了,所以请没有接触过正则的小伙伴自行补脑,因为涉及正则的内容,实在没法展开写,正则的内容太过庞大,根本不是一篇两篇能写清楚的。

开始前,我们先看看要分析的日志结构:

127.0.0.1 - - [19/Jun/2012:09:16:22 +0100] "GET /GO.jpg HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; SE 2.X MetaSr 1.0)"
127.0.0.1 - - [19/Jun/2012:09:16:25 +0100] "GET /Zyb.gif HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QQDownload 711; SV1; .NET4.0C; .NET4.0E; 360SE)"

这是修改过的日志内容,敏感内容都以删除或替换了,不过不影响我们的分析结果,当然格式什么的这都不重要,Nginx访问日志是可以自定义的,每家公司可能都会稍有不同,所以要能理解脚本内容,并通过自己修改应用到了自己工作中才是重点,我给的日志格式也就是个参考,我打赌你在你公司服务器上看到的日志格式肯定跟我的格式不一样, 看完日志格式,我们开始要写我们的脚本了

我先贴代码,稍后解释:

import re
from operator import itemgetter
 
def parser_logfile(logfile):
 pattern = (r''
   '(\d+.\d+.\d+.\d+)\s-\s-\s' #IP address
   '\[(.+)\]\s' #datetime
   '"GET\s(.+)\s\w+/.+"\s' #requested file
   '(\d+)\s' #status
   '(\d+)\s' #bandwidth
   '"(.+)"\s' #referrer
   '"(.+)"' #user agent
  )
 fi = open(logfile, 'r')
 url_list = []
 for line in fi:
  url_list.append(re.findall(pattern, line))
 fi.close()
 return url_list
 
def parser_urllist(url_list):
 urls = []
 for url in url_list:
  for r in url: 
   urls.append(r[5])
 return urls
 
def get_urldict(urls):
 d = {}
 for url in urls:
  d[url] = d.get(url,0)+1
 return d
 
def url_count(logfile):
 url_list = parser_logfile(logfile)
 urls = parser_urllist(url_list)
 totals = get_urldict(urls)
 return totals
 
if __name__ == '__main__':
 urls_with_counts = url_count('example.log')
 sorted_by_count = sorted(urls_with_counts.items(), key=itemgetter(1), reverse=True)
 print(sorted_by_count)

脚本解释,parser_logfile()函数功能是分析日志,返回匹配的行列表,正则部分就不解释了,大家看注释应该知道它是匹配什么内容的,parser_urllist()函数功能是将获取用户访问的url,get_urldict()函数功能是返回一个字典,以url为键,如果键相同值增1,返回的字典是每个url和最大的访问次数,url_count()函数功能就是调用了之前定义的函数,主函数部分,就说说itemgetter,它可以实现按指定元素进行排序,举例就明白了:

>>> from operator import itemgetter
>>> a=[('b',2),('a',1),('c',0)] 
>>> s=sorted(a,key=itemgetter(1))
>>> s
[('c', 0), ('a', 1), ('b', 2)]
>>> s=sorted(a,key=itemgetter(0))
>>> s
[('a', 1), ('b', 2), ('c', 0)]

reverse=True参数表示降序排序,就是从大到小排序,脚本运行结果:

[('http://domain.com/htm_data/7/1206/758536.html', 141), ('http://domain.com/?q=node&page=12', 3), ('http://website.net/htm_data/7/1206/758536.html', 1)]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Python实现抓取HTML网页并以PDF文件形式保存的方法

    Python实现抓取HTML网页并以PDF文件形式保存的方法

    这篇文章主要介绍了Python实现抓取HTML网页并以PDF文件形式保存的方法,结合实例形式分析了PyPDF2模块的安装及Python抓取HTML页面并基于PyPDF2模块生成pdf文件的相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • 基于Python实现的影视数据智能分析系统

    基于Python实现的影视数据智能分析系统

    数据分析与可视化是当今数据分析的发展方向,大数据时代,数据资源具有海量特征,数据分析和可视化主要通过Python数据分析来实现,本文给大家介绍了如何基于Python实现的影视数据智能分析系统,文中给出了部分详细代码,感兴趣的朋友跟着小编一起来看看吧
    2024-01-01
  • Python Selenium截图功能实现代码

    Python Selenium截图功能实现代码

    这篇文章主要介绍了Python Selenium截图功能实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 解决python2中unicode()函数在python3中报错的问题

    解决python2中unicode()函数在python3中报错的问题

    这篇文章主要介绍了在python2中unicode()函数在python3中报错的解决方案,希望给大家做个参考,下次出现这个问题的时候,也知道如何应对
    2021-05-05
  • python使用Pygal创建交互式图表的示例代码

    python使用Pygal创建交互式图表的示例代码

    Pygal 是一个用于生成高质量、可缩放(SVG 格式)、可交互图表的 Python 图表库,与传统的图表库不同,Pygal 的输出是基于矢量图形的,本文给大家介绍了python使用Pygal创建交互式图表的方法示例,需要的朋友可以参考下
    2024-12-12
  • python开头的coding设置方法

    python开头的coding设置方法

    今天小编就为大家分享一篇python开头的coding设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python实现堆和索引堆的代码示例

    python实现堆和索引堆的代码示例

    本篇文章主要介绍了python实现堆和索引堆的代码示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Python持续监听文件变化代码实例

    Python持续监听文件变化代码实例

    这篇文章主要介绍了Python持续监听文件变化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • pyinstaller使用大全

    pyinstaller使用大全

    这篇文章主要介绍了pyinstaller使用大全,pyinstaller可以方便地将脚本编译成exe,本文结合实例代码给大家详细讲解,需要的朋友可以参考下
    2023-02-02
  • 如何使用Python 绘制瀑布图

    如何使用Python 绘制瀑布图

    这篇文章主要介绍了如何使用Python 绘制瀑布图,我们一起了解瀑布图的重要性,以及如何使用不同的绘图库绘制瀑布图。瀑布图是一种二维图表,专门用于了解随着时间或多个步骤或变量的增量正负变化的影响,下文更多详细内容需要的小伙伴可以参考一下
    2022-05-05

最新评论