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之入门(五)缩进和选择
May 27 Python
Python3基础之list列表实例解析
Aug 13 Python
python一键升级所有pip package的方法
Jan 16 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
Python hexstring-list-str之间的转换方法
Jun 12 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
python二元表达式用法
Dec 04 Python
Python爬虫防封ip的一些技巧
Aug 06 Python
python 实现简易的记事本
Nov 30 Python
Python中的datetime包与time包包和模块详情
Feb 28 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 构造函数construct的前下划线是双的_
2009/12/08 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
微信小程序App生命周期详解
2018/01/31 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
python中import与from方法总结(推荐)
2019/03/21 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
Python pandas库中的isnull()详解
2019/12/26 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
在python中使用nohup命令说明
2020/04/16 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
倡议书格式
2014/04/14 职场文书
升职感谢信
2015/01/22 职场文书
培训班通知
2015/04/25 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android