温馨提示×

怎样过滤debian nginx日志

小樊
62
2026-09-01 09:12:19
栏目: 智能运维

在 Debian 上过滤 Nginx 日志,常见做法有 命令行过滤、按条件统计、以及 使用日志分析工具。下面按实用场景给你总结。


一、Nginx 日志位置(Debian 默认)

/var/log/nginx/access.log
/var/log/nginx/error.log

二、基础命令行过滤(最常用)

1. 按 IP 过滤

grep "192.168.1.100" /var/log/nginx/access.log

2. 按状态码过滤

# 404
grep " 404 " /var/log/nginx/access.log

# 500 及以上错误
awk '$9 >= 500' /var/log/nginx/access.log

3. 按请求路径过滤

grep "/api/login" /var/log/nginx/access.log

4. 按时间过滤

# 某一天
grep "10/Apr/2024" /var/log/nginx/access.log

# 某小时
grep "10/Apr/2024:14:" /var/log/nginx/access.log

三、统计类过滤(很实用)

1. 统计访问最多的 IP

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

2. 统计状态码分布

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

3. 统计最频繁的 URL

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

四、实时过滤(排错用)

tail -f /var/log/nginx/access.log | grep "500"

或只看法师错误:

tail -f /var/log/nginx/error.log

五、使用 jq(如果是 JSON 日志)

如果你配置了 Nginx JSON 日志:

log_format json escape=json '{ "time":"$time_local", "ip":"$remote_addr", "status":$status }';

过滤示例:

cat access.log | jq 'select(.status == 500)'

六、进阶:用 GoAccess 可视化过滤

sudo apt install goaccess
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED

浏览器打开 report.html 即可筛选 IP、URL、状态码等。


七、日志轮转注意

Debian 默认用 logrotate:

/etc/logrotate.d/nginx

旧日志可能是:

access.log.1
access.log.2.gz

过滤历史日志:

zcat /var/log/nginx/access.log.2.gz | grep "404"

如果你能告诉我:

  • 是 access.log 还是 error.log
  • 想过滤 IP / 状态码 / 时间 / URL
  • 是否 实时

我可以给你更精确的命令。

0 踩