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实现分页效果
Oct 25 Python
python 移除字符串尾部的数字方法
Jul 17 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
Python删除n行后的其他行方法
Jan 28 Python
对python 自定义协议的方法详解
Feb 13 Python
Python中使用logging和traceback模块记录日志和跟踪异常
Apr 09 Python
Python实现插入排序和选择排序的方法
May 12 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
python面向对象 反射原理解析
Aug 12 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 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获取指定月份第一天和最后一天的方法
2015/07/18 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
python检测服务器是否正常
2014/02/16 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python 实现数组相减示例
2019/12/27 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
花卉与景观设计系大学生求职信
2013/10/01 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
关于迟到的检讨书
2014/01/26 职场文书
小学校本培训方案
2014/06/06 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技