nginx 日志的导出方式取决于你的使用场景(是临时导出、定期备份、还是实时采集)。下面按常见需求给你一个完整说明。
常见路径(不同系统可能不同):
# 访问日志
/var/log/nginx/access.log
# 错误日志
/var/log/nginx/error.log
如果你自定义过 nginx.conf,以配置为准:
access_log /data/logs/nginx/access.log;
error_log /data/logs/nginx/error.log;
cp /var/log/nginx/access.log /tmp/access.log
或打包:
tar czf nginx-logs.tar.gz /var/log/nginx/
awk -v start="$(date -d '1 hour ago' '+%d/%b/%Y:%H:%M:%S')" \
'$4 "[" start {print}' access.log
grep "21/Jan/2025" access.log > access_20250121.log
awk '{print $1","$4","$7","$9","$10}' access.log > access.csv
字段含义:
$1:IP$4:时间$7:请求路径$9:状态码$10:响应大小awk '{
print "{\"ip\":\""$1"\",\"time\":\""$4"\",\"url\":\""$7"\"}"
}' access.log
tail -f /var/log/nginx/access.log
tail -f access.log | grep "POST" > post.log
nginx 日志通常会被 logrotate 切割:
access.log
access.log.1
access.log.2.gz
导出历史日志:
zcat access.log.2.gz > access_old.log
access_log /data/export/logs/access.log main;
然后:
cp /data/export/logs/access.log /backup/
✅ 不要直接 mv 正在写入的日志
✅ 使用:
nginx -s reopen
或:
kill -USR1 $(cat /var/run/nginx.pid)
✅ 自动备份示例:
0 0 * * * cp /var/log/nginx/access.log /backup/access_$(date +\%F).log
| 需求 | 推荐方式 |
|---|---|
| 临时导出 | cp / scp |
| 分析日志 | grep + awk |
| 实时采集 | tail -f |
| 历史日志 | logrotate + gzip |
| 大数据/ELK | filebeat / rsyslog |
如果你能告诉我:
我可以帮你直接给你可用的脚本或配置。