温馨提示×

Debian Nginx日志如何排序

小樊
44
2026-08-24 05:25:53
栏目: 智能运维

在 Debian 上,Nginx 的日志(通常是 /var/log/nginx/access.logerror.log本身是按时间顺序写入的,但如果你需要对日志进行排序、分析或按时间/字段整理,可以用下面几种常见方式。


一、默认情况(无需排序)

Nginx 日志默认就是按时间顺序写入的,例如:

192.168.1.10 - - [10/Jan/2026:10:01:02 +0800] "GET / HTTP/1.1" 200 ...
192.168.1.10 - - [10/Jan/2026:10:01:05 +0800] "GET /index.html HTTP/1.1" 200 ...

一般不需要额外排序


二、按时间排序(最常见)

1️⃣ 按时间字段排序(推荐)

Nginx 默认日志时间格式是:

[10/Jan/2026:10:01:02 +0800]

使用 sort

sort -t'[' -k2 /var/log/nginx/access.log

解释:

  • -t'[':以 [ 作为分隔符
  • -k2:按第二部分(时间)排序

2️⃣ 按行时间排序(适合乱序日志)

如果日志被合并或打乱:

sort -k4,5 /var/log/nginx/access.log

三、按 IP 排序

sort -k1,1 /var/log/nginx/access.log

或去重统计:

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

四、按状态码排序

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

五、按访问量排序(URL)

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

六、按时间范围过滤再排序

查看某天的日志

grep "10/Jan/2026" /var/log/nginx/access.log | sort

查看某小时

grep "10/Jan/2026:10:" /var/log/nginx/access.log

七、日志已轮转(.gz)如何排序

Debian 默认使用 logrotate,旧日志是 .gz

zcat /var/log/nginx/access.log.1.gz | sort -t'[' -k2

多个日志合并排序:

zcat /var/log/nginx/access.log.*.gz | cat - /var/log/nginx/access.log | sort -t'[' -k2

八、使用 goaccess(强烈推荐)

如果你是想可视化排序分析

sudo apt install goaccess
goaccess /var/log/nginx/access.log -c

或生成 HTML 报告:

goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED

九、总结(常用命令速查)

需求 命令
按时间排序 sort -t'[' -k2 access.log
按 IP 排序 sort -k1 access.log
统计访问 IP awk + sort + uniq -c
查看某天日志 grep "10/Jan/2026"
分析日志 goaccess

如果你愿意,可以把你的 Nginx 日志格式贴出来nginx.conf 里的 log_format),我可以给你精确排序命令

0