有个需求要分析nginx日志,也懒得去研究logstach之类的开源工具,干脆直接写一个脚本,自己根据需求来实现:

先看日志格式:我们跟别人的不太一样,所以没办法了:

12.195.166.35 [10/May/2015:14:38:09 +0800] "list.xxxx.com" "GET /new/10:00/9.html?cat=0,0&sort=price_asc HTTP/1.0" 200 42164 "http://list.zhonghuasuan.com/new/10:00/8.html?cat=0,0&sort=price_asc" "Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; H60-L02 Build/HDH60-L02) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.4.0.558 U3/0.8.0 Mobile Safari/534.30"

上面是我的日志格式:

脚本如下:

#!/usr/bin/env python
#-*- coding:utf-8 –*-
#Author:xiaoluo
#QQ:942729042
#date:2015:05:12
import re
import sys
log = sys.argv[1]
ip = r"?P<ip>[\d.]*"
date = r"?P<date>\d+"
month = r"?P<month>\w+"
year = r"?P<year>\d+"
log_time = r"?P<time>\S+"
timezone = r"""?P<timezone>[^\"]*"""
name = r"""?P<name>\"[^\"]*\"     """
method = r"?P<method>\S+"
request = r"?P<request>\S+"
protocol = r"?P<protocol>\S+"
status = r"?P<status>\d+"
bodyBytesSent = r"?P<bodyBytesSent>\d+"
refer = r"""?P<refer>\"[^\"]*\""""
userAgent=r"""?P<userAgent>.*"""
#f = open('access1.log','r')
#for logline in f.readlines():
p = re.compile(r"(%s)\ \[(%s)/(%s)/(%s)\:(%s)\ (%s)\ (%s)\ (%s)\ (%s)\ (%s)\ (%s)\ (%s)\ (%s)\ (%s)" %(ip, date, month, year, log_time,timezone,name,method,request,protocol,status,bodyBytesSent,refer,userAgent), re.VERBOSE)
def getcode():codedic={}f = open(log,'r')for logline in f.readlines():matchs = p.match(logline)if matchs !=None:allGroups =matchs.groups()status= allGroups[10]codedic[status]=codedic.get(status,0) +1return codedicf.close()
def getIP():f = open(log,'r') IPdic={}for logline in f.readlines():matchs = p.match(logline)if matchs !=None:allGroups =matchs.groups()IP=allGroups[0] IPdic[IP] = IPdic.get(IP,0) +1IPdic=sorted(IPdic.iteritems(),key=lambda c:c[1],reverse=True)IPdic=IPdic[0:21:1]return IPdicf.close()
def getURL():f = open(log,'r')URLdic={}for logline in f.readlines():matchs = p.match(logline)if matchs !=None:allGroups =matchs.groups()urlname = allGroups[6] URLdic[urlname] = URLdic.get(urlname,0) +1URLdic=sorted(URLdic.iteritems(),key=lambda c:c[1],reverse=True)URLdic=URLdic[0:21:1]           return URLdic
def getpv():f = open(log,'r')pvdic={}for logline in f.readlines():matchs = p.match(logline)if matchs !=None:allGroups =matchs.groups()timezone=allGroups[4]time = timezone.split(':')minute = time[0]+":"+time[1]pvdic[minute]=pvdic.get(minute,0) +1pvdic=sorted(pvdic.iteritems(),key=lambda c:c[1],reverse=True)pvdic=pvdic[0:21:1]return pvdic
if __name__=='__main__':print "网站监控状况检查状态码"print getcode() print "网站访问量最高的20个IP地址"print getIP()print "网站访问最多的20个站点名"print getURL()print getpv()

这里要指出的是。我当初是给正则匹配的时候单独封装一个函数的,这样就省去了下面每个函数要打开之前都要单独打开一遍文件,但是我return的时候只能用列表的形式返回,结果列表太大把我的内存耗光了,我的是32G的内存,15G的日志。

效果:

最后一个函数是统计每分钟,访问的数量

转载于:https://blog.51cto.com/xiaoluoge/1651021

python 正则分析nginx日志相关推荐

  1. python分析nginx日志

    利用python脚本分析nginx日志内容,默认统计ip.访问url.状态,可以通过修改脚本统计分析其他字段. 一.脚本运行方式 python count_log.py -f med.xxxx.com ...

  2. python分析nginx日志_利用python分析nginx日志

    最近在学习python,写了个脚本分析nginx日志,练练手.写得比较粗糙,但基本功能可以实现. 脚本功能:查找出当天访问次数前十位的IP,并获取该IP来源,并将分析结果发送邮件到指定邮箱. 实现前两 ...

  3. SRE从踩坑到牛逼(二)利用Python进行Arcgis站点分析+Nginx日志分析

    前面是日记,或者是牢骚吧 就感觉挺可惜的,一月份的时候因为分析日志的需求,写过一个几十行的代码,能够做到Arcgis站点分析,并且录入到Excel,根据Arcgis站点信息进行日志分析的部分还没写,这 ...

  4. awk分析nginx日志里面的接口响应时间

    2019独角兽企业重金招聘Python工程师标准>>> 最近,有客户反应客户端卡,老板集合技术人员开会讨论,找出慢的原因,由此产生了分析nginx响应时间,由于线上环境nginx日志 ...

  5. 403 forbidden nginx_5,Logstash正则提取Nginx日志 - pwcc

    Logstash正则提取Nginx日志 为什么需要提取?使用一整行日志无法分析,需要提取单独的字段分析哪个IP访问量大分析Nginx的响应状态码Nginx日志格式192.168.238.90 - - ...

  6. elk平台分析nginx日志的基本搭建

    一.elk套件介绍 ELK 由 ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.官方网站: https://www.elastic.co/products El ...

  7. 使用GoAccess分析Nginx日志

    下载 GoAccess 的源代码.编译和安装: http://www.goaccess.io/download # wget http://tar.goaccess.io/goaccess-0.9.6 ...

  8. CentOS 7.2下ELK分析Nginx日志生产实战(高清多图)

    注:本文系原创投稿 本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名 ...

  9. 烂泥:利用awstats分析nginx日志

    昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割nginx日志>这篇文章. 今天打算分析下nginx日志,要分析nginx日志,我们可以通过shell脚本 ...

最新文章

  1. 消息中间件的意义和应用场景 (activeMq)
  2. java redis 命名空间_redis里通过命名空间存储缓存,根据结构生成树型
  3. 右边补0 润乾报表_制作按奖金分段统计的员工业绩报表
  4. Android拖拽详解
  5. 你知道你的模型可以为公司赚多少钱吗
  6. sqlserver 中事务与错误机制的处理
  7. php文件上传非法,ThinkPHP 3.2.3 版本上传文件出现“非法上传文件!”错误解决办法...
  8. 2013年6月12日星期三
  9. 6.UNIX 环境高级编程--系统数据文件和信息
  10. java Spring菜鸟教程,只需一篇文章吃透Java多线程技术
  11. 专题页汇聚seo流量的葵花宝典
  12. Linux为sh脚本文件添加执行权限
  13. 微信小程序开发 发送模板信息
  14. Ubuntu16.04 cp xorg.conf.failsafe xorg.conf后无法设置分辨率的解决办法
  15. mysql 生日_MySQL数据库之MySql查询生日的两种方式
  16. 什么是MAC多播地址
  17. 计算机毕业设计SSM餐厅管理系统【附源码数据库】
  18. gitlab安装教程、gitlab官网、英文文档
  19. 华为gt3智能跑步计划体验:心率监测、gps轨迹、训练计划
  20. Python猫眼电影最近上映的电影票房信息

热门文章

  1. 为什么java安装卡在满格_Java面试总结(JVM)
  2. 余额 微信钱包图片_微信储值会员卡小程序,微信会员卡功能系统。
  3. BeagleBone Black快速入门教程第1章嵌入式Linux之于Maker们
  4. java typeof_js中typeof的用法汇总
  5. 使用python实现knn算法_使用python实现knn算法
  6. caffe安装_keras/tensorflow1.x模型转换为caffe推理模型
  7. 研究人员使用脑机接口从神经信号中重建单词
  8. 我,谷歌AI编舞师,能根据音乐来10种freestyle,想看霹雳还是爵士芭蕾?
  9. 别笑,日本疫苗的温控方案真是这个
  10. Jupyter Notebook已出现“返祖现象”,这款工具让你在终端里使用它