python写的一个squid访问日志分析的小程序


Posted in Python onSeptember 17, 2014

这两周组里面几位想学习python,于是我们就创建了一个这样的环境和氛围来给大家学习。

昨天在群里,贴了一个需求,就是统计squid访问日志中ip 访问数和url的访问数并排序,不少同学都大体实现了相应的功能,我把我简单实现的贴出来,欢迎拍砖:

日志格式如下:

%ts.%03tu %6tr %{X-Forwarded-For}>h %Ss/%03Hs %<st %rm %ru  %un %Sh/%<A %mt "%{Referer}>h" "%{User-Agent}>h" %{Cookie}>h
1372776321.285      0 100.64.19.225 TCP_HIT/200 8560 GET http://img1.3water.com/games/0908/19/1549401_3_80x100.jpg  - NONE/- image/jpeg "https://3water.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; QQDownload 734; .NET4.0C; .NET CLR 2.0.50727)" pcsuv=0;%20pcuvdata=lastAccessTime=1372776317582;%20u4ad=33480hn;%20c=14arynt;%20uf=1372776310453
#!/usr/bin/python

# -*- coding: utf-8 -*-

import sys

from optparse import OptionParser

'''

    仅仅是一个关于日志文件的测试,统计处access.log 的ip数目

'''

try:

    f = open('/data/proclog/log/squid/access.log')

except IOError,e:

    print "can't open the file:%s" %(e)

 

def log_report(field):

    '''

        return the field of the access log

    '''

    if field == "ip":

        return  [line.split()[2] for line in f]

    if field == "url":

        return  [line.split()[6] for line in f]

def log_count(field):

    '''

        return a dict of like {field:number}

    '''

    fields2 = {}

    fields = log_report(field)

    for field_tmp in fields:

        if field_tmp in fields2:

            fields2[field_tmp] += 1

        else:

            fields2[field_tmp] = 1

    return fields2

def log_sort(field,number = 10 ,reverse = True):

    '''

        print the sorted fields to output

    '''

    for v in sorted(log_count(field).iteritems(),key = lambda x:x[1] , reverse = reverse )[0:int(number)]:

        print v[1],v[0]

if __name__ == "__main__":

    parser =OptionParser(usage="%prog [-i|-u] [-n num | -r]" ,version = "1.0")

    parser.add_option('-n','--number',dest="number",type=int,default=10,help=" print top line of the ouput")

    parser.add_option('-i','--ip',dest="ip",action = "store_true",help="print ip information of access log")

    parser.add_option('-u','--url',dest="url",action = "store_true",help="print url information of access log")

    parser.add_option('-r','--reverse',action = "store_true",dest="reverse",help="reverse output ")

    (options,args) = parser.parse_args()

 

    if len(sys.argv) < 2:

        parser.print_help()

    if options.ip and options.url:

         parser.error(' -i and -u  can not be execute at the same time ')

    if options.ip :

        log_sort("ip", options.number , True and options.reverse  or False)

    if options.url:

        log_sort("url", options.number , True and  options.reverse or False)

 

    f.close()

效果如下:

python写的一个squid访问日志分析的小程序

python写的一个squid访问日志分析的小程序

Python 相关文章推荐
python使用marshal模块序列化实例
Sep 25 Python
Python计算回文数的方法
Mar 11 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
python pandas生成时间列表
Jun 29 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
python 制作磁力搜索工具
Mar 04 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
python进程管理工具supervisor使用实例
Sep 17 #Python
Python实现备份文件实例
Sep 16 #Python
Python多进程编程技术实例分析
Sep 16 #Python
Python专用方法与迭代机制实例分析
Sep 15 #Python
跟老齐学Python之有容乃大的list(3)
Sep 15 #Python
跟老齐学Python之有容乃大的list(2)
Sep 15 #Python
跟老齐学Python之有容乃大的list(1)
Sep 14 #Python
You might like
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
理解PHP中的stdClass类
2014/04/18 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
js如何打印object对象
2015/10/16 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
详解自动生成博客目录案例
2016/12/09 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
vue登录注册实例详解
2019/09/14 Javascript
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
十八大闭幕感言
2014/01/22 职场文书
公司委托书格式范文
2014/04/04 职场文书
灰雀教学反思
2014/04/28 职场文书
校庆活动策划方案
2014/06/05 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
婚宴领导致辞
2015/07/28 职场文书
创业计划书详解
2019/07/19 职场文书
virtualenv隔离Python环境的问题解析
2022/06/21 Python