Ubuntu Tomcat日志中如何识别异常请求
导读:Ubuntu Tomcat日志中识别异常请求的实用方法 一 日志位置与关键文件 常见日志目录:/var/log/tomcat9/、/opt/tomcat/logs/ 或 $CATALINA_HOME/logs/。 关键文件与作用: ca...
Ubuntu Tomcat日志中识别异常请求的实用方法
一 日志位置与关键文件
- 常见日志目录:/var/log/tomcat9/、/opt/tomcat/logs/ 或 $CATALINA_HOME/logs/。
- 关键文件与作用:
- catalina.out:标准输出与错误日志,包含启动、运行、异常堆栈等。
- localhost..log:应用抛出的未捕获异常、业务错误。
- host-manager..log / manager..log:管理应用的访问与操作日志。
- access_log / localhost_access_log..txt:访问日志,记录客户端IP、时间、方法、URL、状态码、耗时等,用于发现异常访问模式。
- 建议先确认实际目录与文件名,再进行分析与告警配置。
二 命令行快速识别异常
- 实时观察与关键字过滤
- 实时查看:
tail -f /var/log/tomcat9/catalina.out - 错误与异常堆栈:
grep -i "ERROR\|Exception" /var/log/tomcat9/catalina.out
- 实时查看:
- 访问日志定位异常请求
- 高频 404:疑似扫描或失效链接
awk '$9==404 { print $1,$7,$9} ' access_log | sort | uniq -c | sort -nr | head - 可疑方法:
awk '$6 ~ /OPTIONS|PUT|DELETE|TRACE/ { print $1,$6,$7} ' access_log | sort | uniq -c | sort -nr - 短时爆发:
awk '{ print $4} ' access_log | cut -d: -f2-3 | sort | uniq -c | sort -nr | head(按分钟统计请求数)
- 高频 404:疑似扫描或失效链接
- 统计与去重
- Top 异常URL:
grep -i "ERROR" catalina.out | awk '{ print $NF} ' | sort | uniq -c | sort -nr | head
- Top 异常URL:
- 时间段定位
- 按时间窗口查看:
sed -n '/2025-11-14 10:00:00/,/2025-11-14 10:05:00/p' catalina.out
- 按时间窗口查看:
- 日志级别与输出
- 若异常信息不足,可在 conf/logging.properties 中适当调高相关 logger 级别(如
org.apache.catalina、org.apache.coyote)以获取更详细输出。
- 若异常信息不足,可在 conf/logging.properties 中适当调高相关 logger 级别(如
三 异常模式与日志特征对照
| 异常类型 | 典型特征 | 优先查看 | 快速命令示例 |
|---|---|---|---|
| 客户端请求错误(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..log 堆栈丰富 | catalina.out、localhost..log | grep -i "Exception" catalina.out |
| 请求耗时异常 | access_log 响应时间字段异常偏高(需启用耗时记录) | access_log | `awk ‘{ print $NF} ’ access_log |
| 说明:400 类错误常见于请求行/头包含非法字符(不符合 RFC 7230/3986),例如 URL 含未编码的 { } 等,Tomcat 会记录解析错误;此类问题在 catalina.out 有明显特征。 |
四 进阶分析与自动化
- 集中化与可视化
- 使用 ELK(Elasticsearch/Logstash/Kibana) 或 Graylog 收集 catalina.out、localhost、access_log,通过 Grok 解析字段(如时间戳、日志级别、线程、类、消息、HTTP 方法、URL、状态码、耗时、UA、IP),在 Kibana 建立可视化与阈值告警。
- 安全加固与降噪
- 在 web.xml 禁用不必要方法(如 OPTIONS/PUT/DELETE/TRACE),减少攻击面;对异常 IP/UA 实施黑名单与速率限制;持续更新 Tomcat 与相关组件,降低被已知漏洞利用的风险。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat日志中如何识别异常请求
本文地址: https://pptw.com/jishu/748084.html
