📊 一、日志级别一览表

级别 英文名称 说明 使用场景
DEBUG 调试 最详细的日志信息,包含所有调试细节 开发环境、问题深度排查
INFO 信息 常规信息,记录正常操作流程 开发环境、测试环境
NOTICE 通知 正常但值得注意的事件 测试环境、预发布环境
WARN 警告 警告信息,潜在问题但不影响运行 生产环境(推荐)
ERROR 错误 错误信息,影响功能但服务仍运行 生产环境(推荐)
CRIT 严重 严重错误,部分功能失效 生产环境(仅关键业务)
ALERT 警报 警报信息,需要立即处理 生产环境(高可用系统)
EMERG 紧急 系统不可用,需要立即处理 所有环境(最低级别)

📝 日志级别配置流程

开始配置
选择环境
生产环境
warn/error
测试环境
notice/info
调试环境
debug
应用配置

🔄 二、日志记录流程

2.1 请求日志记录序列图

┌─────────┐     ┌──────────┐     ┌─────────┐     ┌──────────┐     ┌─────────┐
│ Client  │     │  Nginx   │     │  Log    │     │ Upstream │     │ Analyst │
│         │     │  Core    │     │ Module  │     │  Server  │     │         │
└────┬────┘     └────┬─────┘     └────┬────┘     └────┬─────┘     └────┬────┘
     │                │                │                │                │
     │ HTTP Request   │                │                │                │
     │───────────────>│                │                │                │
     │                │                │                │                │
     │                │ 记录请求开始   │                │                │
     │                │───────────────>│                │                │
     │                │ 写入 access_log│                │                │
     │                │                │                │                │
     │                │ proxy_pass     │                │                │
     │                │───────────────────────────────>│                │
     │                │                │                │                │
     │                │ 记录上游响应   │                │                │
     │                │───────────────>│                │                │
     │                │ $upstream_*    │                │                │
     │                │                │                │                │
     │ HTTP Response  │                │                │                │
     │<───────────────│                │                │                │
     │                │                │                │                │
     │                │ 记录响应完成   │                │                │
     │                │───────────────>│                │                │
     │                │ $status, $body_bytes_sent      │                │
     │                │                │                │                │
     │                │                │                │   分析日志     │
     │                │                │               [│──────────────>│
     │                │                │                │                │
                    

2.2 日志变量对照表

变量分类 变量名 说明 示例值
客户端信息 $remote_addr 客户端 IP 192.168.1.100
$http_user_agent User-Agent Mozilla/5.0...
$http_referer 来源页面 https://google.com
请求信息 $request 完整请求 GET /api HTTP/1.1
$request_time 处理时间 0.523s
响应信息 $status 状态码 200, 404
$body_bytes_sent 发送字节 1234
上游信息 $upstream_connect_time 连接时间 0.002s
$upstream_header_time 响应头时间 0.150s
$upstream_response_time 响应总时间 0.489s

🔧 三、调试工作流

1 实时查看日志
2 识别错误模式
3 分析根本原因
4 实施解决方案
5 验证修复效果

常用调试命令流程

发现问题
nginx -t
测试配置
tail -f
查看日志
分析原因
修改配置
nginx -s reload
重载配置
验证结果

🌳 四、错误诊断决策树

❓ 用户报告访问问题
403 Forbidden

权限问题

404 Not Found

文件不存在

502 Bad Gateway

后端问题

504 Timeout

超时问题

常见错误矩阵

403
Forbidden

权限不足或文件不存在

✓ 检查文件权限 ✓ 检查 index 配置 ✓ 查看 allow/deny 规则
404
Not Found

请求的资源不存在

✓ 检查文件路径 ✓ 检查 root/alias ✓ 检查 rewrite 规则
502
Bad Gateway

后端服务不可达

✓ 检查后端状态 ✓ 检查端口配置 ✓ 查看 error.log
504
Gateway Timeout

后端响应超时

✓ 增加超时时间 ✓ 优化后端性能 ✓ 检查资源使用

📊 五、日志分析工具对比

工具 类型 优点 缺点 适用场景
tail + grep 命令行 简单、实时、无需安装 功能有限、无可视化 快速排查、实时监控
GoAccess 终端/HTML 实时、可视化、易安装 功能相对简单 中小型网站、快速分析
AWStats Web 界面 功能全面、报告详细 配置复杂、更新慢 传统网站统计
ELK Stack 企业平台 功能强大、可扩展、实时 资源消耗大、学习曲线陡 大型企业、多服务日志
awk 脚本 自定义 灵活、可定制、轻量 需要编程知识 特定需求分析

工具选择决策流程

需要分析日志
实时查看?

tail -f
可视化?
简单
GoAccess
企业级
ELK

✅ 交互式调试检查清单

🔧 服务状态

📝 日志检查

🌐 网络检查

💻 系统检查

调试命令速查表

# ===== 服务管理 =====
systemctl status nginx    # 查看服务状态
systemctl restart nginx   # 重启服务
systemctl reload nginx    # 重载配置(不中断)

# ===== 配置测试 =====
nginx -t                  # 测试配置语法
nginx -t -V               # 显示详细信息

# ===== 日志查看 =====
tail -f /var/log/nginx/error.log    # 实时错误日志
tail -f /var/log/nginx/access.log   # 实时访问日志
tail -fn 100 /var/log/nginx/error.log # 最近 100 行

# ===== 日志分析 =====
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# Top 10 IP 地址

awk '$9 ~ /^5[0-9]{2}$/' access.log
# 所有 5xx 错误

# ===== 网络测试 =====
curl -v http://localhost/           # 详细请求测试
ab -n 1000 -c 100 http://localhost/ # 压力测试