📊 一、日志级别一览表
| 级别 | 英文名称 | 说明 | 使用场景 |
|---|---|---|---|
| DEBUG | 调试 | 最详细的日志信息,包含所有调试细节 | 开发环境、问题深度排查 |
| INFO | 信息 | 常规信息,记录正常操作流程 | 开发环境、测试环境 |
| NOTICE | 通知 | 正常但值得注意的事件 | 测试环境、预发布环境 |
| WARN | 警告 | 警告信息,潜在问题但不影响运行 | 生产环境(推荐) |
| ERROR | 错误 | 错误信息,影响功能但服务仍运行 | 生产环境(推荐) |
| CRIT | 严重 | 严重错误,部分功能失效 | 生产环境(仅关键业务) |
| ALERT | 警报 | 警报信息,需要立即处理 | 生产环境(高可用系统) |
| EMERG | 紧急 | 系统不可用,需要立即处理 | 所有环境(最低级别) |
📝 日志级别配置流程
开始配置
→
选择环境
→
生产环境
warn/error
warn/error
测试环境
notice/info
notice/info
调试环境
debug
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
tail -f
可视化?
→
简单
GoAccess
GoAccess
企业级
ELK
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/ # 压力测试