温馨提示×

怎样分析nginx日志

小樊
33
2026-08-17 21:05:36
栏目: 编程语言

分析 Nginx 日志是排查问题、性能优化和安全审计的重要手段。下面从日志类型、常用字段、分析思路、工具与实战示例几个方面系统说明。


一、Nginx 日志类型

Nginx 主要有两类日志:

1. 访问日志(Access Log)

记录每一次 HTTP 请求。

常见路径:

/var/log/nginx/access.log

2. 错误日志(Error Log)

记录运行错误、配置问题、后端异常等。

常见路径:

/var/log/nginx/error.log

二、访问日志格式解析

默认日志格式(combined)

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

常见字段含义

字段 含义
$remote_addr 客户端 IP
$time_local 访问时间
$request 请求方法和 URL
$status HTTP 状态码
$body_bytes_sent 返回字节数
$http_referer 来源页面
$http_user_agent 浏览器/爬虫

示例:

192.168.1.10 - - [10/Jan/2026:10:01:23 +0800] "GET /index.html HTTP/1.1" 200 1024 "-" "Mozilla/5.0"

三、错误日志级别

error_log /var/log/nginx/error.log warn;

级别(从低到高):

debug < info < notice < warn < error < crit < alert < emerg

✅ 生产环境一般使用 warnerror


四、分析思路(非常重要)

1️⃣ 访问日志分析方向

✅ 流量分析

  • PV / UV
  • 热门 URL
  • 访问趋势(按小时/天)

✅ 异常分析

  • 4xx(404、403)
  • 5xx(502、503、504)

✅ 性能分析

  • 响应时间(需开启 $request_time
  • 慢请求

✅ 安全分析

  • 恶意爬虫
  • 暴力访问
  • 异常 IP

2️⃣ 错误日志分析重点

  • upstream 连接失败
  • 权限问题
  • 配置错误
  • 后端超时

五、常用命令行分析(不用工具)

1. 统计 IP 访问次数

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

2. 统计访问最多的 URL

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

3. 统计 HTTP 状态码

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

4. 查看 500 错误

awk '$9>=500 {print $0}' access.log

5. 统计每分钟请求数

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

六、增强日志(推荐)

增加响应时间

log_format main '$remote_addr - $request - $status - $request_time';

字段说明:

  • $request_time:请求总耗时
  • $upstream_response_time:后端耗时

七、专业分析工具(强烈推荐)

1. GoAccess(最常用)

实时可视化分析

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

功能:

  • PV / UV
  • 状态码
  • 热门页面
  • 操作系统/浏览器

2. ELK(企业级)

  • Elasticsearch
  • Logstash
  • Kibana

适合:

  • 多服务器
  • 长期存储
  • 复杂查询

3. Prometheus + Grafana

适合监控:

  • QPS
  • 延迟
  • 错误率

八、真实案例示例

案例 1:发现大量 404

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

可能原因:

  • 恶意扫描
  • 前端路径错误

案例 2:某 IP 访问异常

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

封禁 IP:

deny 1.2.3.4;

九、分析总结流程(建议)

  1. 确定问题(慢?报错?攻击?)
  2. 先看错误日志
  3. 再看访问日志
  4. 按 IP / URL / 状态码 聚合
  5. 必要时增强日志字段
  6. 长期分析用 ELK / GoAccess

如果你愿意,我可以:

  • ✅ 帮你解读一段真实 Nginx 日志
  • ✅ 给你定制分析脚本
  • ✅ 帮你设计日志格式和监控方案

直接把日志贴出来即可。

0