1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author:Random_lee
  4. import time
  5. import os
  6. import re
  7.  
  8. class StatusPV(object):
  9. def __init__(self):
  10. self.log_path = '/opt/apache-tomcat-7.0.69/logs/'
  11. self.log_time = time.strftime("%Y-%m-%d")
  12. self.log_name = 'localhost_access_log.%s.txt'%(self.log_time)
  13. self.logfile = os.path.join(self.log_path, self.log_name)
  14.  
  15. def get_filesize(self):
  16. file_size = os.path.getsize(self.logfile)
  17. f = open(self.logfile, 'r')
  18. if file_size > 1000000000:
  19. # 文件大小超过1G从中间读取
  20. f.seek(0, 2)
  21. self.seek= f.tell()/5
  22. else:
  23. self.seek=0
  24. f.close()
  25. def count_pv(self):
  26. self.get_filesize()
  27. if not os.path.exists(self.logfile):
  28. print('error:' + self.logfile + ' not existed.')
  29. return 0
  30. else:
  31. f = open(self.logfile, 'r')
  32. f.seek(self.seek,0)
  33. num = 0
  34. for line in f:
  35. data = time.strftime('%d/%b/%Y:%H:', time.localtime())
  36. if data in line:
  37. expr = re.compile('^(?P<RemoteIP>.*) - - (?P<datatime>.*) (?P<request>".+") (?P<status>\d{3}) (?P<web_size>\d{1,10})')
  38. # 日志格式 10.116.201.71 - - [02/Sep/2018:09:44:13 +0800] "POST /servlet/UpdateJavaFXServlet HTTP/1.0" 200 268
  39. try:
  40. log_info = expr.search(line)
  41. log_info = log_info.groupdict()
  42.  
  43. # 解析日志信息
  44. datatime = log_info["datatime"]
  45. # 取出日志信息中的datatime
  46. datatime = datatime.replace('[', '')
  47. datatime = datatime.replace(']', '')
  48. # 去掉[]
  49. data_time = datatime.split(' ')[0]
  50. # 取出日期时间
  51. time_zone = datatime.split(' ')[1]
  52. # 取出时区
  53. if time_zone == '+0800':
  54. # print(time_zone)
  55. # print(data_time)
  56. ctime = time.strptime(data_time, '%d/%b/%Y:%H:%M:%S')
  57. # 转换为格式化时间 24/Aug/2018:15:42:08
  58. time_stamp = time.mktime(ctime)
  59. # 转换为时间戳
  60. # print(time_stamp)
  61. if time.time() - time_stamp <= 300:
  62. # 观测的时间间隔
  63. num += 1
  64. # print(datatime)
  65. else:
  66. # print("error data_time:%s"%datatime)
  67. pass
  68. else:
  69. print("log format error")
  70. except:
  71. pass
  72. else:
  73. pass
  74. f.close()
  75. print(num)
  76.  
  77. if __name__ == '__main__':
  78. obj_StatusPV = StatusPV()
  79. obj_StatusPV.count_pv()

  

统计nginx日志里每五分钟的访问量的更多相关文章

  1. 统计nginx日志里流量

    用awk可以,比如,我想统计nginx日志里,今天下午3点0分,这一分钟内,访问的流量(文件的大小) grep "07/Nov/2013:15:00:"  *.log|awk '{ ...

  2. 统计nginx日志里访问次数最多的前十个IP

    awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -k1 | head -n 10

  3. 用shell统计访问日志里每个ip访问次数【转】

    今天,要统计一个系统的每个ip访问次数,于是我找到该系统访问日志,并写脚本实现.   访问日志情况: [root@qular ~]# cd /usr/local/nginx/logs/ [root@q ...

  4. 统计nginx日志

    .根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l .统计访问URL统计PV awk '{print $7}' access.l ...

  5. 统计Apache或nginx日志里访问次数最多的前十个IP

    1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print $7}' access ...

  6. 通过python统计nginx日志定位php网站响应慢的问题

    # 公司网站反映很慢,可能是一些页面的访问方法或者页面引起,通过程序统计nginx访问日志的页面和具体的action方法访问次数以及平均响应时间可以为程序开发的同事提供参考定位具体的代码 # 默认的n ...

  7. 使用Python 统计nginx日志前十ip访问量并以柱状图显示

    脚本内容: import matplotlib.pyplot as plt # nginx_file = '10.6.11.91_access.log-2018-12-27' ip = {} #筛选n ...

  8. linux统计nginx日志中请求访问量命令

    Nginx 三种分配策略:轮询.权重.ip_hash(比如你登录了一个网站,登录信息已经保存到 a 机器,但当你做后续操作时的请求会到 b 机器,那么就获取不到你原来登录的信息,此时你就需要重新登录了 ...

  9. 统计nginx日志单IP访问请求数排名

    下面是我截取一段nginx日志 /Jan/::: +] "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gec ...

随机推荐

  1. [Codeforces 449B] Jzzhu and Cities

    [题目链接] https://codeforces.com/contest/449/problem/B [算法] 最短路 时间复杂度 : O(N ^ 2) [代码] #include<bits/ ...

  2. POJ2451 Uyuw's Concert (半平面交)

    POJ2451  给定N个半平面 求他们的交的面积. N<=20000 首先参考 POJ1279 多边形的核 其实就是这里要求的半平面交 但是POJ1279数据较小 O(n^2)的算法 看起来是 ...

  3. 如何过滤 adb logcat 输出(转载)

    转自:http://www.cnblogs.com/imouto/archive/2012/12/11/filtering-adb-logcat-output.html 简介: 本文介绍如何在 she ...

  4. bzoj 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果【tarjan+记忆化搜索】

    对这个奇形怪状的图tarjan,然后重新连边把图变成DAG,然后记忆化搜索即可 #include<iostream> #include<cstdio> using namesp ...

  5. codevs1669(dfs)子集和目标值

    1692 子集和的目标值  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 给定n个整数in和目标值T,求某一非空子集 ...

  6. JSON使用讲解

    前端操作json  一.JSON字符串与JSON对象的区别 1. 一个对象以“{”  开始,     “}”结束.   每个“名称”后跟一个“:”(冒号):“‘名称/值’ 对”之间运用 “,”(逗号) ...

  7. 64位linux安装wine等软件

    我的系统是centos7 64位的,安装wine的时候以为和32位的一样,结果执行./configure的时候,出现错误(无法建立一个32位程序,您需要安装32位的开发库) configure: er ...

  8. Python的变量类型

    一.概要   二.数字类型(Numbers) 1.Python支持的数字类型 int(有符号整型) long(长整型) float(浮点型) complex(复数) 2.类型转换 int(x ) #将 ...

  9. (三)Mybatis总结之动态sql

    动态sql 为何需要动态sql?因为简单的sql语句已经不能满足复杂的业务需求 动态sql相当于sql语句拼接 1.if语句 if语句:判断,如果执行多条件查询,如果中间某个条件变量为空,就跳过当前判 ...

  10. Java编程思想读书笔记_第三章

    本章提到的关于==的部分,一个完整的实验如下: class Test { public static void main(String[] args) { Integer i = new Intege ...