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 相关文章推荐
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
python操作kafka实践的示例代码
Jun 19 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
python 双循环遍历list 变量判断代码
May 04 Python
django中related_name的用法说明
May 20 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 Python
手残删除python之后的补救方法
Jun 26 Python
Anaconda配置各版本Pytorch的实现
Aug 07 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+MySQL的聊天室设计
2006/10/09 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
python缩进区别分析
2014/02/15 Python
python批量同步web服务器代码核心程序
2014/09/01 Python
Python实现将xml导入至excel
2015/11/20 Python
python打开windows应用程序的实例
2019/06/28 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
2014年党务公开方案
2014/05/08 职场文书
教师听课评语大全
2014/12/31 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript