Nginx 日志分析与优化

LinuxBeginner
立即练习

介绍

在这个项目中,你将学习如何对 Nginx 服务器的访问日志进行日志分析。你将从日志中检索有价值的信息,例如按访问次数排名的前 5 个 IP 地址、在服务器上访问次数至少为 10 次的 IP 地址、访问量最大的请求以及状态码为 404 的请求地址。

🎯 任务

在这个项目中,你将学习:

  • 如何从特定日期中检索访问次数最多的 5 个 IP 地址
  • 如何在给定日期范围内找到所有在服务器上访问次数至少为 10 次的 IP 地址
  • 如何从日志文件中检索访问量最大的前十个请求,不包括静态文件和资源
  • 如何从日志文件中写入所有状态码为 404 的请求地址

🏆 成果

完成这个项目后,你将能够:

  • 从 Nginx 访问日志中分析和提取有意义的信息
  • 使用 shell 脚本自动化日志分析任务
  • 理解并应用常见的日志分析技术,如过滤、排序和计数
  • 以结构化的方式管理和组织分析结果

从 2015 年 4 月 10 日起检索访问次数最多的 5 个 IP 地址

在这一步中,你将学习如何从 2015 年 4 月 10 日的access.log文件中检索访问次数最多的 5 个 IP 地址。请按照以下步骤完成此操作:

  1. 打开终端并导航到/home/labex/project目录。
  2. 使用以下命令从 2015 年 4 月 10 日的日志中检索访问次数最多的 5 个 IP 地址:
grep '10/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 | awk '{print $2}' > output1

此命令执行以下操作:

  • grep '10/Apr/2015' access.log:过滤日志文件,只包含 2015 年 4 月 10 日的行。
  • awk '{print $1}':从每条日志行中提取 IP 地址(第一个字段)。
  • sort:对 IP 地址进行排序。
  • uniq -c:统计每个 IP 地址出现的次数。
  • sort -rn:按计数降序对 IP 地址进行排序。
  • head -5:选择前 5 个 IP 地址。
  • awk '{print $2}':从排序和计数后的输出中提取 IP 地址(第二个字段)。
  • > output1:将输出重定向到output1文件。
  1. 验证output1文件的内容,确保它包含 2015 年 4 月 10 日访问次数最多的 5 个 IP 地址,每行一个 IP 地址,且无空行。
216.244.66.249
216.244.66.231
140.205.225.185
140.205.201.39
140.205.201.32
✨ 查看解决方案并练习

找出在 2015 年 4 月 11 日期间至少访问服务器 10 次的所有 IP 地址

在这一步中,你将学习如何找出在 2015 年 4 月 11 日至 2015 年 4 月 11 日期间至少访问服务器 10 次的所有 IP 地址。请按照以下步骤完成此操作:

  1. 使用以下命令找出在 2015 年 4 月 11 日至 2015 年 4 月 11 日期间至少访问服务器 10 次的所有 IP 地址:
grep '11/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | awk '$1 >= 10 {print $2}' > output2

此命令执行以下操作:

  • grep '11/Apr/2015' access.log:过滤日志文件,只包含 2015 年 4 月 11 日的行。
  • awk '{print $1}':从每条日志行中提取 IP 地址(第一个字段)。
  • sort:对 IP 地址进行排序。
  • uniq -c:统计每个 IP 地址出现的次数。
  • awk '$1 >= 10 {print $2}':过滤出现次数为 10 次或更多的 IP 地址,并打印 IP 地址(第二个字段)。
  • > output2:将输出重定向到output2文件。
  1. 验证output2文件的内容,确保它包含在 2015 年 4 月 11 日至 2015 年 4 月 11 日期间至少访问服务器 10 次的所有 IP 地址,每行一个 IP 地址,且无空行。
108.245.182.93
123.127.3.30
140.205.201.39
216.244.66.231
216.244.66.249
218.75.230.17
✨ 查看解决方案并练习

从日志文件中检索访问量最高的十个请求

在这一步中,你将学习如何从access.log文件中检索访问量最大的前十个请求,不包括静态文件、图像或类似资源。请按照以下步骤完成此操作:

  1. 使用以下命令从日志文件中检索访问量最大的前十个请求:
grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10 | awk '{print $2}' > output3

此命令执行以下操作:

  • grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log:过滤日志文件,排除包含/robots.txt.js.css.png的行。
  • awk '{print $7}':从每条日志行中提取请求地址(第七个字段)。
  • sort:对请求地址进行排序。
  • uniq -c:统计每个请求地址出现的次数。
  • sort -rn:按计数降序对请求地址进行排序。
  • head -10:选择前 10 个请求地址。
  • awk '{print $2}':从排序和计数后的输出中提取请求地址(第二个字段)。
  • > output3:将输出重定向到output3文件。
  1. 验证output3文件的内容,确保它包含日志文件中访问量最大的前十个请求,每行一个请求地址,且无空行。
/
/j_acegi_security_check
/favicon.ico
400
/xref/linux-3.18.6/
/pmd/index.php
/pma/index.php
/phpMyAdmin/index.php
/phpmyadmin/index.php
check.best-proxies.ru:80
✨ 查看解决方案并练习

记录日志文件中所有状态码为 404 的请求地址

在这一步中,你将学习如何把access.log文件中所有状态码为 404 的请求地址写入到output4文件中。请按照以下步骤完成此操作:

  1. 使用以下命令将日志文件中所有状态码为 404 的请求地址写入到output4文件中:
grep ' 404 ' access.log | awk '{print $7}' | sort | uniq > output4

此命令执行以下操作:

  • grep ' 404 ' access.log:过滤日志文件,只包含包含状态码 404 的行。
  • awk '{print $7}':从每条日志行中提取请求地址(第七个字段)。
  • sort:对请求地址进行排序。
  • uniq:去除任何重复的请求地址。
  • > output4:将输出重定向到output4文件。
  1. 验证output4文件的内容,确保它包含日志文件中所有状态码为 404 的请求地址,每行一个请求地址且无重复。
/about/
/cgi?2
/cgi-bin/cgiSrv.cgi
/clusters.jsf
/dfshealth.jsp
/dnieyraqcvtu
/favicon.ico
/ganglia/index.php
/hadoop/dfshealth.jsp
/history/linux-3.18.6/arch/ia64/include/asm/processor.h
/history/linux-3.18.6/arch/m68k/amiga/
/history/linux-3.18.6/arch/m68k/kernel/
/history/linux-3.18.6/arch/s390/include/asm/lowcore.h
/history/linux-3.18.6/arch/s390/kernel/entry64.S
/history/linux-3.18.6/arch/tile/kernel/intvec_64.S
/history/linux-3.18.6/arch/unicore32/include/asm/thread_info.h
/history/linux-3.18.6/arch/unicore32/include/asm/unistd.h
/history/linux-3.18.6/arch/x86/include/asm/processor.h
/history/linux-3.18.6/arch/x86/include/asm/unistd.h
/history/linux-3.18.6/arch/x86/kernel/entry_64.S
 ...
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。