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.x版本中新的字符串格式化方法
Apr 24 Python
python导入时小括号大作用
Jan 10 Python
python executemany的使用及注意事项
Mar 13 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
python 对key为时间的dict排序方法
Oct 17 Python
浅析Python 引号、注释、字符串
Jul 25 Python
详解用python生成随机数的几种方法
Aug 04 Python
python防止随意修改类属性的实现方法
Aug 21 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 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个人网站架设连环讲(一)
2006/10/09 PHP
php相当简单的分页类
2008/10/02 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
jquery 注意事项与常用语法小结
2010/06/07 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
详解如何运行vue项目
2019/04/15 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
python验证码图片处理(二值化)
2019/11/01 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
Python能做什么
2020/06/02 Python
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
小班评语大全
2014/05/04 职场文书
二手房购房协议书范本
2014/10/05 职场文书
感谢信怎么写
2015/01/21 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
python 如何执行控制台命令与操作剪切板
2021/05/20 Python