温馨提示×

怎样用linux分析nginx日志

小樊
48
2026-09-23 22:12:08
栏目: 智能运维

在 Linux 下分析 Nginx 日志,通常分为 查看日志位置 → 了解日志格式 → 用命令行工具分析 → 进阶工具/可视化 几个步骤。下面给你一套实用方案。


一、先确认 Nginx 日志位置

通常默认路径:

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

也可以在配置中查看:

nginx -T 2>/dev/null | grep -E "access_log|error_log"

二、Nginx 默认访问日志格式

常见格式(combined):

$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"

示例:

192.168.1.10 - - [10/Apr/2024:12:00:01 +0800] "GET /index.html HTTP/1.1" 200 1024 "https://example.com/" "Mozilla/5.0"

三、常用 Linux 命令分析日志

1️⃣ 查看最近访问

tail -n 100 /var/log/nginx/access.log

实时查看:

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

2️⃣ 统计访问最多的 IP

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

3️⃣ 统计状态码分布

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

只看 4xx / 5xx:

awk '$9 ~ /^4|^5/ {print $9, $1}' access.log

4️⃣ 统计热门 URL

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

5️⃣ 统计某个 IP 的访问

grep "192.168.1.10" access.log

6️⃣ 统计每小时请求量

awk '{print $4}' access.log | cut -d: -f1-2 | sort | uniq -c

7️⃣ 找出响应时间慢的请求(需 log_format 含 $request_time)

awk '{print $NF, $7}' access.log | sort -nr | head

四、错误日志分析

tail -n 50 /var/log/nginx/error.log

常见关键词:

  • permission denied
  • upstream timed out
  • 502 Bad Gateway

五、日志切割(很重要)

Nginx 日志会越来越大,建议用 logrotate:

cat /etc/logrotate.d/nginx

示例:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        nginx -s reload
    endscript
}

六、进阶工具(强烈推荐)

1️⃣ GoAccess(实时可视化)

apt install goaccess
goaccess access.log -o report.html --log-format=COMBINED

2️⃣ awk + 脚本(自动化分析)

可写 shell 脚本每天统计并发邮件。


3️⃣ ELK / Grafana + Loki

适合生产环境、集群日志分析。


七、常见分析场景速查表

目的 命令
访问最多 IP `awk ‘{print $1}’
错误最多的 URL `awk ‘$9 ~ /^5/ {print $7}’
爬虫识别 grep -i bot access.log
某天日志 grep "10/Apr/2024" access.log

如果你愿意,可以:

  • 贴一段 你的 access_log 格式
  • 告诉我 你想分析什么(攻击?性能?用户?)

我可以直接帮你写 精确命令或脚本。

0 踩