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 open读写文件实现脚本
Sep 06 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
详解在Python中处理异常的教程
May 24 Python
python 性能提升的几种方法
Jul 15 Python
django 实现电子支付功能的示例代码
Jul 25 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
python文件操作的简单方法总结
Nov 07 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
opencv 图像轮廓的实现示例
Jul 08 Python
python openCV自制绘画板
Oct 27 Python
Spy++的使用方法及下载教程
Jan 29 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 extract 将数组拆分成多个变量的函数
2010/06/30 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
10个php函数实用却不常见
2015/10/13 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
js加强的经典分页实例
2013/03/15 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
Python实现类继承实例
2014/07/04 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
python定义类的简单用法
2020/07/24 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
个人自我评价分享
2013/12/20 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android