分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

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

发布时间:2023-11-01 15:52责任编辑:顾先生关键词:暂无标签

如果你的网站通过 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数量 即是统计后的访问数量。

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

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved