分析Nginx日志统计访问状态码为404的IP及出现次数 ?

参考回答:

要分析 Nginx 访问日志中状态码为 404 的 IP 地址及其出现次数,可以通过以下步骤:

  1. 定位 Nginx 访问日志文件:Nginx 的访问日志通常位于 /var/log/nginx/access.log,但具体路径可以根据系统的配置有所不同。

  2. 使用 grep 过滤出状态码为 404 的日志行:通过 grep 过滤出日志中返回 404 错误的行。

  3. 提取 IP 地址:使用 awk 提取每一行中的 IP 地址字段(通常是第 1 个字段)。

  4. 统计每个 IP 地址的访问次数:通过 sortuniq -c 统计每个 IP 地址访问 404 页面出现的次数。

  5. 排序和输出:使用 sort 按照访问次数排序,并输出结果。

命令示例:

grep ' 404 ' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10

命令解析
grep ' 404 ' /var/log/nginx/access.log:过滤出所有 HTTP 状态码为 404 的日志行。
awk '{print $1}':提取日志中的第 1 个字段,即客户端 IP 地址。
sort:对提取出的 IP 地址进行排序。
uniq -c:统计每个 IP 地址出现的次数,即统计每个 IP 地址访问 404 页面出现的次数。
sort -nr:按照访问次数降序排序。
head -n 10:输出访问 404 页面最多的前 10 个 IP 地址。

详细讲解与拓展:

1. Nginx 访问日志格式

Nginx 默认的访问日志格式是 combined,每行记录了请求的客户端 IP 地址、请求时间、请求方法、请求路径、HTTP 状态码、响应体大小等信息。一个典型的日志条目示例如下:

127.0.0.1 - - [14/Mar/2019:10:05:23 +0000] "GET /nonexistent-page.html HTTP/1.1" 404 0 "-" "Mozilla/5.0"

其中,第 1 个字段(127.0.0.1)表示客户端 IP 地址,第 9 个字段(404)表示 HTTP 状态码。

2. 过滤出状态码为 404 的日志

通过 grep ' 404 ' 可以过滤出所有返回 404 错误的日志行。需要注意,404 前后有空格,确保准确匹配。

3. 提取 IP 地址

使用 awk '{print $1}' 提取日志中的第 1 个字段,即客户端的 IP 地址。这样就能获得所有访问 404 页面请求的 IP 地址。

4. 统计每个 IP 的访问次数

通过 sortuniq -c 对提取的 IP 地址进行排序,并统计每个 IP 地址访问 404 页面的次数。uniq -c 会输出每个 IP 地址及其出现的次数。

5. 排序并输出

使用 sort -nr 按照访问次数进行降序排序,head -n 10 可以输出访问 404 页面最多的前 10 个 IP 地址。如果需要更详细的信息,可以去掉 head -n 10,显示所有 IP。

6. 扩展与优化

  • 按时间段分析:如果需要分析特定日期或时间段内访问 404 页面最多的 IP,可以先通过 grep 过滤出特定日期的日志。例如,分析 2019 年 3 月 14 日的数据:
    grep '14/Mar/2019' /var/log/nginx/access.log | grep ' 404 ' | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
    
  • 分析特定路径的 404 请求:如果你想分析特定路径的 404 错误(比如 /api),可以结合 grep 筛选特定路径:
    grep ' 404 ' /var/log/nginx/access.log | grep '/api' | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
    
  • 监控和告警:通过定期分析 Nginx 日志中的 404 错误,可以帮助发现可能的爬虫、恶意请求或其他异常情况。对于生产环境,推荐将日志分析过程自动化,使用工具如 GoAccessELK Stack 进行实时监控和告警。

总结:

通过分析 Nginx 访问日志中返回 404 错误的 IP 地址,我们可以快速识别哪些 IP 地址经常访问不存在的页面,帮助定位爬虫、异常流量或攻击源。使用 grepawksortuniq 等工具,可以高效地提取、统计并分析日志中的数据,对于大规模日志数据,可以考虑使用日志分析平台进行进一步处理和可视化。

发表评论

后才能评论