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中zip()方法应用实例分析
Apr 16 Python
python字符串查找函数的用法详解
Jul 08 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
Python交互式图形编程的实现
Jul 25 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
python 实现全球IP归属地查询工具
Dec 18 Python
Python Matplotlib绘制动画的代码详解
May 30 Python
python 镜像环境搭建总结
Sep 23 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序列号生成函数和字符串替换函数代码
2012/06/07 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
python多维数组切片方法
2018/04/13 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
儿科护士自我鉴定
2013/10/14 职场文书
事务机电主管工作职责
2014/02/25 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
2015年消防工作总结
2015/04/24 职场文书
结婚幸福感言
2015/08/01 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL