Python 分析Nginx访问日志并保存到MySQL数据库实例

以下是详细的Python分析Nginx访问日志并保存到MySQL数据库实例的攻略:

1. 了解Nginx访问日志格式

在保存Nginx访问日志之前,我们需要了解Nginx日志格式的设置。默认情况下,Nginx日志格式的设置会输出一行类似以下的记录:

10.0.10.153 - - [17/Jan/2022:14:57:24 +0800] "GET /index.html HTTP/1.1" 200 663 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"

如果要保存更详细的信息,比如用户的访问时间、请求的URL等,我们可以在Nginx的配置文件中进行设置。下面是一些常见的Nginx日志格式设置:

  • $remote_addr:客户端IP地址。
  • $remote_user:客户端用户名。
  • $time_local:本地时间,格式是"DD/MM/YYYY:HH:MM:SS +时区"。
  • $request:请求的URI和协议。
  • $status:HTTP状态码。
  • $body_bytes_sent:返回的消息体大小,不包括HTTP头部。
  • $http_referer:来源页面的URL。
  • $http_user_agent:浏览器客户端的信息。

配置文件的示例如下:

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

  access_log  /var/log/nginx/access.log  main;
}

2. 使用Python解析Nginx日志文件

Python是一种流行的编程语言,也是一个强大的工具,可以用来解析Nginx日志文件。具体可以通过正则表达式对记录进行解析。

下面是一个示例,显示了如何使用Python从Nginx日志文件中提取关键信息:

import re

def nginx_parse_log(log_line):
    pattern = r'^(\S+) - (\S+) \[(.*?)\] "(.*?)" (\d+) (\d+) "(.*?)" "(.*?)"$'
    match = re.match(pattern, log_line)
    if not match:
        return None
    fields = match.groups()
    return {
        "remote_addr": fields[0],
        "remote_user": fields[1],
        "time": fields[2],
        "request": fields[3],
        "status": fields[4],
        "size": fields[5],
        "referer": fields[6],
        "user_agent": fields[7],
    }

# 示例:解析单行日志
log_line = '10.0.10.153 - - [17/Jan/2022:14:57:24 +0800] "GET /index.html HTTP/1.1" 200 663 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"'
parsed = nginx_parse_log(log_line)
print(parsed)

输出结果如下:

{
    "remote_addr": "10.0.10.153",
    "remote_user": "-",
    "time": "17/Jan/2022:14:57:24 +0800",
    "request": "GET /index.html HTTP/1.1",
    "status": "200",
    "size": "663",
    "referer": "-",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}

3. 将解析的信息保存到MySQL数据库实例

Python可以使用MySQL官方提供的Python客户端库——“mysql-connector-python”——连接MySQL服务并将数据写入数据库。

下面是示例代码,说明了如何将解析的Nginx日志数据存储到MySQL数据库中:

import mysql.connector

# 创建数据库连接
conn = mysql.connector.connect(
    user="root",
    password="password",
    host="127.0.0.1",
    port=3306,
    database="access_log",
    charset="utf8",
)

# 创建MySQL表
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS nginx_log (
    log_id INT(11) NOT NULL AUTO_INCREMENT,
    remote_addr VARCHAR(15),
    remote_user VARCHAR(20),
    time DATETIME,
    request TEXT,
    status SMALLINT(3),
    size INT(11),
    referer TEXT,
    user_agent TEXT,
    PRIMARY KEY (log_id)
)
""")

# 准备查询模板
query_template = (
    "INSERT INTO nginx_log "
    "(remote_addr, remote_user, time, request, status, size, referer, user_agent) "
    "VALUES "
    "(%(remote_addr)s, %(remote_user)s, %(time)s, %(request)s, %(status)s, %(size)s, %(referer)s, %(user_agent)s)"
)

# 处理日志文件
with open("/var/log/nginx/access.log") as f:
    for line in f:
        record = nginx_parse_log(line)
        if record:
            try:
                cursor.execute(query_template, record)
                conn.commit()
            except Exception as e:
                print("Failed to write record:", e)

# 关闭连接
cursor.close()
conn.close()

该代码将Nginx日志文件中的记录解析为Python的字典形式,然后将其写入MySQL数据库中。在Nginx日志文件中,记录的每行都代表一个字典形式的记录。程序会尝试将每条记录插入到名为“nginx_log”的MySQL表中。注意,在实现代码时,需要指定正确的数据库名称、用户名和密码信息。

4. 其它说明

上述示例仅为参考,实际情况下需要根据具体需求进行调整。例如,可能需要对解析的数据进行更复杂的处理,或者存储到不同的MySQL表中。此外,还需要注意到数据的处理效率,比如使用批量插入来提高写入和读取的效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 分析Nginx访问日志并保存到MySQL数据库实例 - Python技术站

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

相关文章

  • 搜狐云发展中DomeOS的开发与Docker的应用

    搜狐云发展中DomeOS的开发与Docker的应用 搜狐云是搜狐公司旗下的云计算服务提供商,提供云服务器、云数据库、云存储等多种云计算服务。其中,DomeOS是搜狐云自主研发的容器云平台,支持Docker容器的部署、管理和监控。下面是一份关于搜狐云发展中DomeOS的开发与Docker的应用的完整攻略,包括背景介绍、DomeOS的开发过程、Docker的应用…

    云计算 2023年5月16日
    00
  • BoCloud博云获京东云、京东金融联合战略投资 云计算PaaS市场现重磅操作

    2018年6月26日,国内PaaS领域卓越的企业级解决方案提供商BoCloud博云,宣布完成B+轮近亿元融资,本轮融资是由京东云、京东金融联合战略投资。 通过本次战略投资引入,BoCloud博云也将成为京东云在云计算市场的重要合作伙伴,双方将会在技术、产品、市场层面进行更多合作,帮助博云进一步扩大在国内PaaS领域的领先优势,继续为实现企业数字化转型提供更优…

    云计算 2023年4月12日
    00
  • Python数据集库Vaex秒开100GB加数据

    首先我们需要了解一下什么是Vaex。 什么是Vaex? Vaex是一个用于(超)大数据集的Python库,它可以处理比内存大得多的数据集,并有效地支持快速、交互式地执行各种操作,如过滤、转换、计算、汇总、可视化等。同时,Vaex使用异步I/O和各种智能编译技术,从而可以在几秒钟内对高达数百GB甚至几TB的数据集进行操作了。 Vaex的安装 使用pip进行安装…

    云计算 2023年5月18日
    00
  • 点云法线计算

    法线在点云的处理中有着重要的意义,大部分点云的处理都要用到法线如:点云平滑滤波、配准、特征计算与提取,曲率计算等都息息相关。关于法线的计算最早应该来源于“Surface Reconstruction from Unorganized Points” Hugues Hoppe的文章。 其中Hoppe关于法线的计算方法如下:         这个计算过程和方法对…

    云计算 2023年4月12日
    00
  • Intel CPU 曝致命漏洞,Linux、Windows 面临重新设计,云计算厂商全受影响

    TPU 称,亚马逊、微软和谷歌是三个受影响最深的云计算厂商,如果漏洞被利用,那么在同一物理空间的虚拟用户 A 可以任意访问到另一个虚拟用户B的数据,包括受保护的密码、应用程序密匙等。– John Leyden, Chris Williams 本文导航◈ 影响范围19%◈ 这个安全漏洞怎么会被滥用?38%◈ 共享系统(云服务)78%◈ 更新92%编译自 | …

    云计算 2023年4月12日
    00
  • 云计算和大数据时代网络技术揭秘(十七)VOQ机制

    VOQ机制   本章介绍的VOQ是一种新型的QoS机制,目的是为了解决著名的交换机HoL难题。 但VOQ强烈依赖于调度算法,例如,一个48口的交换机,每个端口都要维护48-1个FIFO缓存队列, 一共48×47=2256个缓存队列,这一方面对交换机的硬件条件提出了较高要求,也对如何设计良好 的转发包调度算法提出了巨大的挑战,目前仅有Cisco一家推出了商用产…

    云计算 2023年4月11日
    00
  • 我们究竟如何考量云计算是否适合自己的业务?

    在高性能工作负载中使用云计算的情况正在上升。现在大多数云提供商提供的最先进的CPUs、GPUs、高性能存储和网络的HPC节点。尽管如此,决定是否使用云计算也突然变得棘手。在这篇短文,我们讨论五个关键考虑因素,来帮助你决定云计算是否适合你的业务。 (云计算) 1、计算真实成本 云计算比管理本地服务器便宜是公共认知。虽然经常是真的,这也不是一直在任何情况下都正确…

    云计算 2023年4月12日
    00
  • 区块链数字资产是什么意思?区块链数字资产属性分析

    区块链数字资产是什么意思? 区块链数字资产是指使用区块链技术进行发行、交易和管理的数字资产。它们可以是数字货币、代币、证券等,具有可编程性、去中心化、不可篡改等特点。以下是区块链数字资产的属性分析。 1. 可编程性 区块链数字资产可以使用智能合约进行编程,实现自动化的交易和管理。例如,可以使用智能合约实现代币的发行、分配、销毁等操作,也可以使用智能合约实现数…

    云计算 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部