Ubuntu Tomcat日志中识别异常请求的实用方法
一 日志位置与关键文件
二 命令行快速识别异常
tail -f /var/log/tomcat9/catalina.outgrep -i "ERROR\|Exception" /var/log/tomcat9/catalina.outawk '$9==404 {print $1,$7,$9}' access_log | sort | uniq -c | sort -nr | headawk '$6 ~ /OPTIONS|PUT|DELETE|TRACE/ {print $1,$6,$7}' access_log | sort | uniq -c | sort -nrawk '{print $4}' access_log | cut -d: -f2-3 | sort | uniq -c | sort -nr | head(按分钟统计请求数)grep -i "ERROR" catalina.out | awk '{print $NF}' | sort | uniq -c | sort -nr | headsed -n '/2025-11-14 10:00:00/,/2025-11-14 10:05:00/p' catalina.outorg.apache.catalina、org.apache.coyote)以获取更详细输出。三 异常模式与日志特征对照
| 异常类型 | 典型特征 | 优先查看 | 快速命令示例 |
|---|---|---|---|
| 客户端请求错误(400/414/431 等) | catalina.out 出现 “Error parsing HTTP request header”“Invalid character in request target” 等;access_log 状态码为 400,偶见 “GET null null” | catalina.out、access_log | grep -i "Error parsing HTTP request header" catalina.out;`awk ‘$9==400 {print $0}’ access_log |
| 资源不存在或被扫描 | access_log 大量 404,伴随非常规路径(如 /wp-admin, /.env) | access_log | `awk ‘$9==404 {print $1,$7}’ access_log |
| 可疑或危险方法 | access_log 出现 OPTIONS/PUT/DELETE/TRACE 等非业务常用方法 | access_log | `awk '$6 ~ /OPTIONS |
| 拒绝访问与权限问题 | catalina.out 出现 AccessDeniedException 或应用层权限异常;access_log 状态码 403 | catalina.out、access_log | grep -i "AccessDenied" catalina.out;awk '$9==403 {print $1,$7}' access_log |
| 服务端处理异常 | catalina.out 出现未捕获 Exception、数据库/连接池异常;localhost. |
catalina.out、localhost. |
grep -i "Exception" catalina.out |
| 请求耗时异常 | access_log 响应时间字段异常偏高(需启用耗时记录) | access_log | `awk ‘{print $NF}’ access_log |
| 说明:400 类错误常见于请求行/头包含非法字符(不符合 RFC 7230/3986),例如 URL 含未编码的 { } 等,Tomcat 会记录解析错误;此类问题在 catalina.out 有明显特征。 |
四 进阶分析与自动化