温馨提示×

如何解析debian nginx日志

小樊
33
2026-09-28 11:36:58
栏目: 智能运维

在 Debian 上,Nginx 的日志通常位于:

  • 访问日志:/var/log/nginx/access.log
  • 错误日志:/var/log/nginx/error.log

下面从日志格式、常用命令、工具、自动化分析几个方面说明如何解析。


一、确认 Nginx 日志格式

Debian 默认使用 combined 格式,定义在 /etc/nginx/nginx.conf 中:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

一条典型访问日志:

192.168.1.10 - - [12/Apr/2024:10:23:45 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0"

含义:

  • remote_addr:客户端 IP
  • time_local:访问时间
  • request:请求方法与路径
  • status:HTTP 状态码
  • body_bytes_sent:响应大小
  • http_user_agent:浏览器/客户端

二、基础命令行解析(最常用)

1. 查看实时日志

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

2. 统计访问最多的 IP

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

3. 统计状态码分布

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

4. 查看 404 请求

grep ' 404 ' /var/log/nginx/access.log

5. 按时间段分析(如某天)

grep '12/Apr/2024' /var/log/nginx/access.log

三、使用 GoAccess(实时可视化,推荐)

安装

sudo apt update
sudo apt install goaccess

命令行分析

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

浏览器打开 report.html 即可看到:

  • 访问量
  • 状态码
  • 浏览器
  • 地理分布(需额外配置)

四、使用 awk / jq(结构化分析)

提取某 IP 的所有请求

awk '$1=="192.168.1.10"' /var/log/nginx/access.log

统计最热门 URL

awk -F\" '{print $2}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

五、日志轮转(防止文件过大)

Debian 默认使用 logrotate:

cat /etc/logrotate.d/nginx

一般配置:

  • 每日
  • 保留 14 天
  • 压缩

手动执行:

sudo logrotate -f /etc/logrotate.d/nginx

六、进阶方案(适合生产环境)

  • ELK / Grafana + Loki:集中式日志分析
  • fail2ban:自动封禁恶意 IP
  • nginx-prometheus-exporter:指标监控

如果你有具体需求(比如:

  • 只想看爬虫
  • 分析接口耗时
  • 统计某个 URL 的访问来源

可以告诉我,我可以给你更精确的命令或脚本。

0 踩