错误日志的价值
Web 服务访问异常应先看错误日志:502 与 504 指向上游连接问题,Permission denied 指向文件与目录权限,配置错误会直接给出指令与行号。相比访问日志,错误日志对根因的表达更直白。
应急时的用法
被利用的组件常常在错误日志里直接现形:PHP 报错栈、模板解析失败、模块加载错误都会留下可定位的线索,因此应急第一步扫 error.log 往往比翻 access.log 更快。
基本信息
| 常见路径 | /var/log/nginx/error.log、/www/wwwlogs/*.error.log |
|---|---|
| 关键行 | connect() failed、Permission denied、upstream timed out |
| 优先级别 | error、crit、emerg |
| 配对分析 | 与 access.log 同一时间窗对照 |
| 关联日志 | PHP-FPM 与后端应用自身的错误日志 |
| 权限要求 | 读取日志通常需 root 或日志组 |
典型使用场景
- 定位 502 与 504 等访问异常
- 确认是否被利用组件漏洞
- 排查权限与配置导致的故障
- 与访问日志配合还原攻击时间窗
- 复盘时说明根因与修复方式
检索错误日志关键行
检索错误日志关键行
tail -n 100 /var/log/nginx/error.log
grep -E 'crit|emerg|connect\(\) failed' /var/log/nginx/error.log | tail -n 30
grep -a '2026/10/01' /var/log/nginx/error.log | tail -n 50
zgrep -ah 'Permission denied' /var/log/nginx/error.log*.gz 2>/dev/null | tail -n 20
ls -la /var/log/nginx/ | head输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| 时间与级别 | 发生时间与严重程度 | crit 与 emerg 优先处理 |
| 错误描述 | 如 connect() failed | 直接指向连接层问题 |
| 上游地址 | upstream 目标 | 用于确认后端服务是否存活 |
| 请求信息 | 相关 URI 与客户端 | 与 access.log 对照定位具体请求 |
不要只翻 access.log:根因常常只在错误日志里,尤其是组件报错与权限类问题。
只看日志尾部会漏掉故障前的记录:用 grep 按时间窗定位,并检查轮转后的日志与压缩归档,否则会把「没看到」当成「没发生」。
完整取证动作
- 把当前错误日志复制到证据目录并计算哈希
- 记录日志文件的最后写入时间与体积
- 标明采集时刻,说明覆盖的时间范围
- 把访问日志与错误日志成对归档
与其他日志的配合
- 访问日志用于确认请求来源与访问路径
- 后端服务日志用于确认应用层错误与堆栈
- 系统日志用于确认服务是否被重启或被杀
- 防火墙与 WAF 记录用于确认请求是否被拦截
排查顺序建议
- 先按级别筛出 crit 与 emerg
- 再按时间窗聚焦异常时段
- 然后与访问日志对照同一时刻的请求
- 最后确认对应服务进程与配置是否被改动