windows下Nginx日志处理脚本

下面是关于“Windows下Nginx日志处理脚本”的详细攻略。

一、背景

Nginx是一款高性能的Web服务器,它能够快速处理大量请求。在开发网站时,我们会使用Nginx来提供网站服务。Nginx会记录访问日志,其中包含了访问者的IP地址、请求的URL、响应状态码等信息。

针对这些Nginx记录的日志信息,我们需要分析日志才能更好地了解网站的访问情况、用户行为等信息。而在Windows系统中,我们可以用python的实现的一个简单的日志处理脚本来实现这一目标。

二、先决条件

为了运行这个处理脚本,我们需要先满足以下要求:
1. 安装Python; 脚本采用Python开发,确保安装有Python环境。
2. 安装Nginx; Nginx需正常运行,才能产生访问日志,我们才需要去分析日志。

三、Nginx日志格式

以下是默认情况下的Nginx日志格式:

$log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

其中,日志中的各个字段对应的含义分别是:
- $remote_addr:客户端IP地址
- $remote_user:客户端用户
- $time_local:访问时间和时区
- "request":请求的页面和协议
- $status:请求状态响应
- $body_bytes_sent:发送页面的大小
- "http_referer":引导用户查找页面的来源页面地址
- "http_user_agent":浏览器相关信息
- "http_x_forwarded_for":反向代理相关信息

四、脚本开发

参考脚本内容如下,针对具体需求可以进行二次开发。

import re

# 日志文件路径
log_path = "E:/wwwlogs/access.log"
# 分别统计每个url的访问量和ip出现次数
url_count = {}
ip_count = {}

with open(log_path, "r") as f:
    for line in f:
        # 提取访问URL和客户端IP地址
        pattern = re.compile(r'(.+\?.+ )')
        result = pattern.findall(line)
        url = ''
        if result:
            url = result[0].split()[1]
        ip = line.split()[0]

        # 统计每个URL的访问量
        if url in url_count:
            url_count[url] += 1
        else:
            url_count[url] = 1

        # 统计每个IP出现的次数
        if ip in ip_count:
            ip_count[ip] += 1
        else:
            ip_count[ip] = 1

# 按照访问量倒序排列
sorted_url_count = sorted(url_count.items(), key=lambda k: k[1], reverse=True)
print('\nURL访问量:')
for url, count in sorted_url_count:
    print(url, count)

# 按照IP出现次数倒序排列
sorted_ip_count = sorted(ip_count.items(), key=lambda k: k[1], reverse=True)
print('\nIP出现次数:')
for ip, count in sorted_ip_count:
    print(ip, count)

五、实施过程

  1. 打开安装好的Python,新建一个处理日志的脚本文件,例如filename.py。
  2. 将脚本复制到该文件中。
  3. 设置log_path为Nginx日志文件路径,保存脚本文件。
  4. 打开命令行工具(如cmd),定位到处理日志的脚本文件所在的路径中。
  5. 输入如下命令,运行脚本。执行这个命令后,会在命令行中输出URL的访问量和IP的出现次数统计结果。如果期望将结果输出到文件中,则可以在命令末尾加上“>filename.txt”来实现。
python filename.py

例如,在Windows系统中将处理日志的脚本文件保存为analysis_log.py,Nginx日志文件为access.log,运行下面命令:

python analysis_log.py > result.txt

结果将被输出到result.txt文件中。

六、示例说明

下面是两个使用示例:

示例1

这个项目的一个典型应用场景是,对Nginx服务器的访问进行量化和统计,以更好地了解它所面临的流量状态和类型。例如,我们想要了解最常被访问的页面或文件。为此,我们可以执行以下操作:
1. 执行脚本:python analysis_log.py > result.txt
2. 打开输出文件result.txt,查看URL访问量排名。

例如输出文件中几行结果如下:

/to-kfjfsdk.fj 50
?to=htt%3a%2f%2fwww.ppcfudjkfohsdflkoe.com%2ffkjfsdk 20
/test.htm 15

说明网站中最受欢迎的页面是to-kfjfsdk.fj,该页面访问量为50次。

示例2

在某些情况下,可能想了解网站的访问来源或者攻击地址。这时就需要分析访问日志中的客户端IP地址。例如,运行以下操作完全可以过滤掉所有外部IP流量,只分析目标服务器生成的数据.
1. 通过firewall等工具设置规则:仅允许某些IP地址访问Nginx服务器。
2. 执行脚本:python analysis_log.py > result.txt
3. 打开输出文件result.txt,查看IP出现次数排名。

例如输出文件中几行结果如下:

192.168.1.1 5100
192.168.1.2 3618
192.168.1.3 2036

说明IP地址为192.168.1.1最多,出现次数为5100次。这告诉我们,这个IP可能是站点的某个管理员。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:windows下Nginx日志处理脚本 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django返回HTML文件的实现方法

    当我们在Django中创建视图函数时,经常需要返回HTML文件以渲染给用户。下面是返回HTML文件的实现方法的详细攻略。 1. 创建HTML文件 首先,我们需要创建一个HTML文件,用来表示我们想要返回给用户的页面。HTML文件可以包含任意的HTML、CSS和JavaScript代码。我们可以在Django项目的template文件夹中创建一个新的子文件夹来…

    人工智能概论 2023年5月25日
    00
  • 可视化pytorch 模型中不同BN层的running mean曲线实例

    让我来为您详细讲解一下“可视化pytorch模型中不同BN层的running mean曲线实例”的攻略。 1. 什么是BatchNorm? BatchNorm,即Batch Normalization,是一种常用的深度学习网络加速和优化的技巧。BatchNorm可以对每一层的输入数据进行归一化,使得数据分布更加稳定,从而加速网络的训练过程。 2. BN层的r…

    人工智能概论 2023年5月25日
    00
  • python性能测试工具locust的使用

    下面是关于Python性能测试工具Locust的详细使用攻略。 一、Locust简介 Locust是Python编写的基于协程的开源负载测试工具,它提供了Web UI界面方便用户进行测试,并且支持分布式负载测试。Locust可以实现在Python代码中编写灵活的测试代码,并且支持针对API、网站和其他Web应用程序进行负载测试。 二、Locust安装及使用 …

    人工智能概览 2023年5月25日
    00
  • windows中为php安装mongodb与memcache

    为Windows中的PHP安装MongoDB和Memcache需要遵循以下步骤: 安装PHP扩展管理器 首先,需要安装PHP扩展管理器,可以从官方网站或GitHub上获取扩展程序,链接为:https://pecl.php.net/ 下载完成后,将下载的zip文件解压到某个目录中,例如C:\php7\ext,并命名为php_sdks或其他名字。 安装Mongo…

    人工智能概论 2023年5月25日
    00
  • MS-SQL Server 中单引号的两种处理方法

    当在 MS-SQL Server 中使用带有单引号的字符串时,需要注意单引号会被视为字符串的结束符号,可能会导致语法错误。以下是两种处理方法: 1. 双单引号 使用两个单引号替代一个单引号,可以避免语法错误。例如,下面的 SQL 查询使用双单引号来处理单引号: SELECT Name FROM Customers WHERE LastName = ‘O”B…

    人工智能概览 2023年5月25日
    00
  • Pytorch中torch.argmax()函数使用及说明

    以下是关于“Pytorch中torch.argmax()函数使用及说明”的完整攻略。 什么是torch.argmax()函数? torch.argmax()函数是Pytorch中的一个操作,用于在一个张量中找到最大值的索引。这个函数可以用于寻找在某个目标函数下的最优解,或者用于构建预测模型,找到预测结果中的最大概率。 torch.argmax()使用示例 示…

    人工智能概论 2023年5月25日
    00
  • Python OpenCV绘制各类几何图形详解

    下面是Python OpenCV绘制各类几何图形的完整攻略: 前言 在计算机视觉的应用中,常常需要在图像上绘制各种几何图形,如:线段、矩形、圆等等。本文将详细讲解如何使用Python的OpenCV库在图像上绘制各类几何图形。 绘制线段 OpenCV中提供了cv2.line()函数来绘制线段,函数原型如下: cv2.line(img, pt1, pt2, co…

    人工智能概论 2023年5月25日
    00
  • node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】

    下面我来详细讲解“node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】”的完整攻略。 环境准备 在阿里云服务器上,我们首先需要安装好 Node 和 MongoDB。在 Ubuntu 下,安装命令如下: 安装 Node.js $ curl -sL https://deb.nodesource.com/setup_12.x | sudo -…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部