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实现的石头剪子布代码分享
Aug 22 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
Django中提供的6种缓存方式详解
Aug 05 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
解决django model修改添加字段报错的问题
Nov 18 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
python中if及if-else如何使用
Jun 02 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
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
js精确的加减乘除实例
2017/11/14 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
python实现数独算法实例
2015/06/09 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Python 创建TCP服务器的方法
2020/07/28 Python
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
初中高效课堂实施方案
2014/02/26 职场文书
购房意向书
2014/04/01 职场文书
团队队名口号大全
2014/06/06 职场文书
公司租房协议书
2014/10/14 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
高中同学会致辞
2015/08/01 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers