在 Debian 上过滤 Nginx 日志,常见做法有 命令行过滤、按条件统计、以及 使用日志分析工具。下面按实用场景给你总结。
/var/log/nginx/access.log
/var/log/nginx/error.log
grep "192.168.1.100" /var/log/nginx/access.log
# 404
grep " 404 " /var/log/nginx/access.log
# 500 及以上错误
awk '$9 >= 500' /var/log/nginx/access.log
grep "/api/login" /var/log/nginx/access.log
# 某一天
grep "10/Apr/2024" /var/log/nginx/access.log
# 某小时
grep "10/Apr/2024:14:" /var/log/nginx/access.log
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
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)'
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"
如果你能告诉我:
我可以给你更精确的命令。