page contents

Python 每日实战:Nginx 日志分析,找出访问最多的 IP!

今天我们用 pandas + Nginx 日志,实现了一个轻量级的日志分析工具,短短几十行代码,就能替代很多 grep/awk 的工作。

attachments-2025-09-F7CAUajg68ba3b61ac0d2.png“pandas 不止能处理表格,它同样是运维工程师的日志分析利器。”

实战目标

我们有一份 Nginx 访问日志,格式如下(access.log):

192.168.1.10 - - [20/Aug/2025:12:00:01 +0800] "GET /index.html HTTP/1.1" 200 1024

192.168.1.11 - - [20/Aug/2025:12:00:02 +0800] "POST /login HTTP/1.1" 302 512

192.168.1.10 - - [20/Aug/2025:12:00:05 +0800] "GET /about.html HTTP/1.1" 200 2048

192.168.1.12 - - [20/Aug/2025:12:00:10 +0800] "GET /index.html HTTP/1.1" 404 256

192.168.1.11 - - [20/Aug/2025:12:00:20 +0800] "GET /index.html HTTP/1.1" 200 1024

我们希望用 pandas 来完成以下分析:

统计每个 IP 的访问次数

找出最常见的状态码

统计访问最多的 URL

代码实现

import pandas as pd

# 读取日志文件,每行按空格切分

df = pd.read_csv(

    "access.log",

    sep=" ",              # 按空格分割

    header=None,          # 没有表头

    usecols=[0, 3, 5, 6, 8],  # 选取需要的列

    names=["ip", "time", "method", "url", "status"]  # 重命名列

)


# 清理 time 字段,去掉前面的 [

df["time"] = df["time"].str.strip("[")


# 转换状态码为整数

df["status"] = df["status"].astype(int)


print("=== 日志前5行 ===")

print(df.head())


# 统计每个 IP 的访问次数

ip_counts = df["ip"].value_counts().reset_index()

ip_counts.columns = ["ip", "访问次数"]


print("\n=== 访问次数最多的 IP ===")

print(ip_counts.head())


# 最常见的状态码

status_counts = df["status"].value_counts().reset_index()

status_counts.columns = ["状态码", "次数"]


print("\n=== 最常见的状态码 ===")

print(status_counts)


# 统计访问最多的 URL

url_counts = df["url"].value_counts().reset_index()

url_counts.columns = ["URL", "访问次数"]


print("\n=== 访问最多的 URL ===")

print(url_counts.head())

输出结果=== 日志前5行 ===

             ip                 time method          url  status

0  192.168.1.10  20/Aug/2025:12:00:01    GET   /index.html     200

1  192.168.1.11  20/Aug/2025:12:00:02   POST      /login     302

2  192.168.1.10  20/Aug/2025:12:00:05    GET  /about.html     200

3  192.168.1.12  20/Aug/2025:12:00:10    GET   /index.html     404

4  192.168.1.11  20/Aug/2025:12:00:20    GET   /index.html     200


=== 访问次数最多的 IP ===

            ip  访问次数

0  192.168.1.10     2

1  192.168.1.11     2

2  192.168.1.12     1


=== 最常见的状态码 ===

   状态码  次数

0   200   3

1   302   1

2   404   1


=== 访问最多的 URL ===

            URL  访问次数

0   /index.html     3

1      /login       1

2  /about.html      1

实战意义

安全运维:快速找出异常 IP(如暴力攻击)网站优化:分析最常访问的 URL,优化缓存策略故障排查:监控 404 / 500 状态码比例,定位服务异常

总结: 今天我们用 pandas + Nginx 日志,实现了一个轻量级的日志分析工具,短短几十行代码,就能替代很多 grep/awk 的工作。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2180 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2180 文章
  3. Pack 1343 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章