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 网络编程起步(Socket发送消息)
Sep 06 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
基python实现多线程网页爬虫
Sep 06 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
深入理解Python中装饰器的用法
Jun 28 Python
python web基础之加载静态文件实例
Mar 20 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
python实现ftp文件传输功能
Mar 20 Python
Python并发concurrent.futures和asyncio实例
May 04 Python
python super()函数的基本使用
Sep 10 Python
七个非常实用的Python工具包总结
Jun 15 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就可用
2010/10/12 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
利用Psyco提升Python运行速度
2014/12/24 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
Python打印输出数组中全部元素
2018/03/13 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python异常的检测和处理方法
2018/10/26 Python
Python版中国省市经纬度
2020/02/11 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
护校行动方案
2014/05/31 职场文书
活动总结格式
2014/08/30 职场文书
受资助学生感谢信
2015/01/21 职场文书
初中英语教学随笔
2015/08/15 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang