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中的代码编码格式转换问题
Jun 10 Python
python写日志封装类实例
Jun 28 Python
python设计模式大全
Jun 27 Python
利用Python获取操作系统信息实例
Sep 02 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
selenium+PhantomJS爬取豆瓣读书
Aug 26 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
Selenium 配置启动项参数的方法
Dec 04 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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
Admin generator, filters and I18n
2011/10/06 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python中单、双下划线的区别总结
2017/12/01 Python
python操作oracle的完整教程分享
2018/01/30 Python
Python编程argparse入门浅析
2018/02/07 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python远程连接MySQL数据库
2019/04/19 Python
python 两个数据库postgresql对比
2019/10/21 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
Python如何获取文件指定行的内容
2020/05/27 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
超市中秋节促销方案
2014/03/21 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android
vue 给数组添加新对象并赋值
2022/04/20 Vue.js