切分Nginx日志,完成网站访问量的自动统计

如果你的网站通过 Nginx 代理,那么本文将为你提供一个自动统计网站访问量的方案。

方案在实现步骤上,一个分为三步:

  1. 运行 shell 脚本,移动 Nginx 日志到指定文件夹,并运行 Python 脚本;

  2. 执行 Python 脚本,统计有效的 IP 访问量

  3. 设置 crontab 定时任务。

一、shell 脚本

  通过 Nginx 配置文件,查看监听端口的日志文件,并移动到指定的路径。

  然后运行 Python 脚本,执行处理 Nginx 日志文件的 Python 脚本。

  • shell 脚本

      NGINX=/usr/local/nginx/  # 设置变量
      $NGINX/sbin/nginx -s stop  # 停止 Nginx
      mv $NGINX/logs/access.log ~/nginx_logs/  # 移动日志文件
      $NGINX/sbin/nginx  # 启动 Nginx,会自动生成日志文件
      workon django  # 进入 虚拟环境
      /root/project/path.py  # 执行 Python 脚本

二、Python 脚本  

  • python 脚本

      import os
      import sys
      import django
      BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
      sys.path.append(BASE_DIR)
    
      os.environ.setdefault("DJANGO_SETTINGS_MODULE", "path.settings")  # 如果不用 django 提供的 cache,可以直接导入 Redis 包
      django.setup()
    
      class Pv:
          def __init__(self):
              self.file = open(‘/root/nginx_logs/access.log‘, ‘r‘)  # 日志路径
    
          def foo(self):
              import re
              res = re.finditer(‘(\\d+\\.\\d+\\.\\d+\\.\\d+).*?\\n‘, self.file.read())  # 正则切分
              for i in res:
                  yield i.group(1)
    
          def result(self):
              lis = []
              for i in self.foo():
                  if len(lis):     # lis 为空,会发生越界错误
                      if i == lis[-1]:
                          continue
                  lis.append(i)
              from django.core.cache import cache
              pv = cache.get(‘nginx_pv‘) or 1    # 如果不存在则为1,否则为None时,不同类型相加会报错
              cache.set(‘nginx_pv‘, lis.__len__() + pv)
              return lis.__len__()
    
          def __del__(self):
              self.file.close()   # 关闭文件
    
          def __str__(self):
              return str(self.result())
    
      Pv().result()

三、crontab 设置

    2 0 * * * /bin/sh /root/nginx_log.sh

     每天的两点定时执行 shell 脚本

脚本写完了,在你的django 项目中,渲染前台页面时,只要从redis中获取 Python脚本中对应的key,就可以拿到网站访问量的统计了。

当然,在 Python 脚本中,处理有效访问量的手段并不好,因为在网站访问量较高时,同一个用户的访问IP并不会是完全连续的,因此这时的访问量就偏高了。解决这个问题的办法--通过统计学来精确访问量。比如1个ip对应的请求为5次,那么所有的ip数量 / 去重后的ip数量(通过字典实现效率也更高),值与5的比例 * 去重后的ip数量 即是统计后的访问数量。

原文地址:https://www.cnblogs.com/wang-kai-1994/p/10803223.html

时间: 2024-10-12 19:35:21

切分Nginx日志,完成网站访问量的自动统计的相关文章

nginx日志中得到访问量最高前10个IP

~ cat access.log.10 | awk '{a[$1]++} END {for(b in a) print b"\t"a[b]}' | sort -k2 -r | head -n 10 163.177.71.12   972 101.226.68.137  972 183.195.232.138 971 50.116.27.194   97 14.17.29.86     96 61.135.216.104  94 61.135.216.105  91 61.186.190

用Hive分析nginx日志

这里用到的nginx日志是网站的访问日志,比如: [java] view plain copy 180.173.250.74 - - [08/Jan/2015:12:38:08 +0800] "GET /avatar/xxx.png HTTP/1.1" 200 968 "http://www.iteblog.com/archives/994" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (

网站访问量实时统计

一.需求:统计网站访问量(实时统计) 技术选型:特点(数据量大.做计算.实时) 实时流式计算框架:storm 1)spout 数据源,接入数据源 本地文件 2)splitbolt 业务逻辑处理 切分数据 拿到网址 3)bolt 累加次数求和 1.PvCountSpout类 package com.demo.pvcount; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFo

大数据学习之Storm实时统计网站访问量案例35

案例一:统计网站访问量(实时统计)   实时流式计算框架:storm 1)spout 数据源,接入数据源 本地文件如下 编写spout程序: package pvcount; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader;

Awk,Cat,Head分析Nginx日志常用命令

Nginx 日志分析 1.根据访问IP统计UV awk '{print $1}'  access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print $7}' access.log|wc -l 3.查询访问最频繁的URL awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more 4.查询访问最频繁的IP awk '{print $1}' access.log|sort |

2018/10/10 awk 分析 nginx 日志

废话不多说,简单了解一下 awk - 强大的文本分析工具,也就是分析日志 最常用的就是分析日志了吧,做统计什么,这里也拿 nginx 日志来做分析 1:统计出现次数 - 比如状态码出现次数 - 先直接上命令 awk '{print $9}' access_log | sort | uniq -c | sort -rn - 可能会有一些疑惑,这个$9 是什么? - 我们拿出一条日志来看一下先 123.124.16.83 - - [10/Oct/2018:10:24:56 +0800] "GET /

Goaccess自动分割nginx日志

GoAccess 是一款开源的网站日志实时分析工具.GoAccess 的工作方式很容易理解,就是读取和解析 Apache/Nginx/Lighttpd 的访问日志文件 access log,然后以更友好的方式把统计信息显示出来.统计的内容包括:访问概况.动态页面请求.静态页面请求(如图片.样式表.脚本等).访客排名,访客使用的操作系统,访客使用的浏览器,来路域名,404 错误,搜索爬虫,搜索关键词等等. 安装组件yum -y install glib2 glib2-devel ncurses n

nginx 日志统计接口每个小时访问量

指定时间段增量统计nginx日志不同接口的访问量: #!/bin/bash#此脚本用于统计nginx日志当前时间15分钟之内不同接口(URL)的访问量统计LOG=/usr/local/nginx/logs/interface.access.logTMP=/tmp/url.tmpURLSTATS=/var/log/interface_urlstats.logRECEIVERS="[email protected] [email protected]"#删除临时统计文件[ -f $TMP

使用nginx lua实现网站统计中的数据收集

使用nginx lua实现网站统计中的数据收集 导读 网站数据统计分析工具是各网站站长和运营人员经常使用的一种工具,常用的有 谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于javascript的.在此简要分析数据收集的原理,并按照步骤,带领大家一同搭建一个实际的数据收集系统. 数据收集原理分析 简单来说,网站统计分析工具需要收集到用户浏览目标网站的行为(如打开某网页.点击某按钮.将商品加入购物车等)及行为附加数据(如某下单