如何有效追踪 Nginx 中特定状态码的请求 IP 及请求次数?(实用查询技巧揭秘)

在 Nginx 的 access_log 中,状态码是评估请求成功与否的关键指标之一。当遇到问题如服务器错误(5xx系列)、客户端错误(4xx系列)或是其他特定代码时,能够快速定位请求源变得至关重要。以下是针对特定 HTTP 状态码,如 404 Not Found,追踪相关请求的 IP 地址及请求次数的有效方法。

基础命令

首先,让我们聚焦于如何从 Nginx 日志中抽取出对应某个状态码的所有记录:

grep ' 404 ' /var/log/nginx/access.log

这将列出所有包含 ” 404 “(空格后紧跟 404 后还有空格)的日志行,也就是 HTTP 404 Not Found 错误。

抽取 IP 地址

接着,从这些记录中提取 IP 地址。由于 IP 地址通常位于每行的第一个字段,可以使用 awk 命令:

grep ' 404 ' /var/log/nginx/access.log | awk '{print $1}'

计算请求次数

再进一步,我们要统计每个 IP 发起此类请求的次数:

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

组合命令

将上述命令串接起来,形成一次性执行的功能链:

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

为了更好地理解和阅读结果,我们可以添加额外的 sort 和 head 指令,展示请求次数最多的前 10 个 IP:

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

创建可重用脚本

为了便利性和重复使用,你可以把这些命令打包进一个 shell 脚本里:

#!/bin/bash
status_code="$1"
grep " ${status_code} " /var/log/nginx/access.log |
awk '{print $1}' |
sort |
uniq -c |
sort -nr |
head -n 10

保存为 .sh 文件,如 track_ip_by_status.sh,赋予执行权限 (chmod +x track_ip_by_status.sh),即可通过传递不同的 HTTP 状态码参数运行它。

扩展技巧

  • 使用正则表达式匹配更多状态码模式。
  • 结合日志分割,对历史日志进行趋势分析。
  • 自动化日志清理或压缩以维持系统性能。

通过上述方法,你不仅可以快速追踪 Nginx 中特定状态码相关的请求 IP 及请求次数,还能在此基础上扩展出更复杂的日志分析场景。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
赵其鑫的头像赵其鑫管理团队

相关推荐

返回顶部