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实现检测服务器是否可以ping通的2种方法
Jan 01 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
深入浅析Python中的yield关键字
Jan 24 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
深入理解Python爬虫代理池服务
Feb 28 Python
python ddt实现数据驱动
Mar 14 Python
python3对拉勾数据进行可视化分析的方法详解
Apr 03 Python
django实现支付宝支付实例讲解
Oct 17 Python
python能自学吗
Jun 18 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
python3 hdf5文件 遍历代码
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
PHP实现用户认证及管理完全源码
2007/03/11 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
js中this对象用法分析
2018/01/05 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
Python入门篇之文件
2014/10/20 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
python对excel文档去重及求和的实例
2018/04/18 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
Python API len函数操作过程解析
2020/03/05 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
入党积极分子自我鉴定范文
2014/03/25 职场文书
超市创业计划书
2014/09/15 职场文书
学校运动会报道稿
2014/09/23 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python