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中返回字典键的值的values()方法使用
May 22 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
Python中协程用法代码详解
Feb 10 Python
Python 查找字符在字符串中的位置实例
May 02 Python
python实现推箱子游戏
Mar 25 Python
Python实现微信翻译机器人的方法
Aug 13 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Python 如何批量更新已安装的库
May 26 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 Python
Python实现Hash算法
Mar 18 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简单统计在线人数的方法
2016/05/10 PHP
PHP数组实例详解
2016/06/26 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
python创建线程示例
2014/05/06 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
Python中实现输入一个整数的案例
2020/05/03 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
完美的中文自荐信
2014/05/24 职场文书
应用心理学专业求职信
2014/08/04 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
教师师德工作总结2015
2015/07/22 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
js之ajax文件上传
2021/05/13 Javascript
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
全网非常详细的pytest配置文件
2022/07/15 Python