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 相关文章推荐
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
基于python OpenCV实现动态人脸检测
May 25 Python
Python格式化日期时间操作示例
Jun 28 Python
python树莓派红外反射传感器
Jan 21 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
python使用threading.Condition交替打印两个字符
May 07 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
Python基于类路径字符串获取静态属性
Mar 12 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
PHP开发文件系统实例讲解
2006/10/09 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
清空上传控件input file的值
2010/07/03 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
Json解析的方法小结
2016/06/22 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
Python实现CET查分的方法
2015/03/10 Python
Python实现的桶排序算法示例
2017/11/29 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
pandas数据集的端到端处理
2019/02/18 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
想学画画?python满足你!
2020/12/24 Python
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
毕业生自我推荐
2013/11/04 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
先进学校事迹材料
2014/12/30 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
党小组推荐意见
2015/06/02 职场文书
企业培训简报范文
2015/07/20 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android