通过Ubuntu系统分析Tomcat日志中的请求,核心围绕定位日志文件、查看与过滤内容、分析请求特征、自动化处理及优化工具使用展开,以下是具体步骤:
Tomcat的日志文件主要分布在/var/log/tomcat
(默认安装路径)或/opt/tomcat/logs
(自定义安装路径)目录下,常见文件包括:
${catalina.base}/logs/localhost_access_log.*.txt
,如localhost_access_log.2025-09-24.txt
);catalina.out
或按日期分割的catalina.YYYY-MM-DD.out
;manager.log
。ls /var/log/tomcat/
或ls /opt/tomcat/logs/
确认日志文件位置。tail -f
命令跟踪日志文件的新增内容(如访问日志或Catalina日志),便于及时发现问题:tail -f /var/log/tomcat/catalina.out # 实时查看Catalina日志
tail -f /var/log/tomcat/localhost_access_log.2025-09-24.txt # 实时查看访问日志
less
或more
命令分页浏览日志(适合查看大文件),例如:less /var/log/tomcat/catalina.out # 按上下箭头浏览,按q退出
sed
命令提取指定时间范围的日志(如2025-09-24 12:00至12:05的记录):sed -n '/2025-09-24 12:00:00/,/2025-09-24 12:05:00/p' /var/log/tomcat/catalina.out
grep
命令筛选包含特定关键字的日志行(如错误信息、特定URL),例如:grep "ERROR" /var/log/tomcat/catalina.out # 筛选错误日志
grep "/api/user" /var/log/tomcat/localhost_access_log.2025-09-24.txt # 筛选/api/user路径的请求
awk
、sort
、uniq
命令统计请求数(如按IP、时间、URL统计),例如:awk '{print $1}' /var/log/tomcat/localhost_access_log.2025-09-24.txt | sort | uniq -c | sort -nr # 统计各IP的请求数(降序)
awk '{print $4}' /var/log/tomcat/localhost_access_log.2025-09-24.txt | cut -d: -f1 | sort | uniq -c | sort -nr # 统计各小时的请求数
awk
计算平均响应时间,例如:awk '{sum+=$12; count++} END {print "Average response time:", sum/count, "ms"}' /var/log/tomcat/localhost_access_log.2025-09-24.txt # 假设第12列为处理时间(%T格式)
默认情况下,Tomcat可能未开启访问日志或格式较简单。可通过修改server.xml
文件(位于${catalina.base}/conf/
)自定义日志格式,添加**处理时间(%T)、请求URL(%U)、Referer(%{Referer}i)、User-Agent(%{User-Agent}i)**等关键字段,便于后续分析:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log."
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b %T "%{Referer}i" "%{User-Agent}i""
resolveHosts="false"/>
%h
:客户端IP地址;%t
:访问时间;%r
:HTTP请求行(如GET /api/user HTTP/1.1
);%s
:HTTP状态码(如200、404);%T
:处理请求的耗时(毫秒);%{Referer}i
:请求来源页面的URL;%{User-Agent}i
:客户端浏览器/设备信息。sudo systemctl restart tomcat # Ubuntu系统使用systemctl重启Tomcat
对于海量日志或需要可视化的场景,可使用以下工具提升分析效率:
grok
过滤器提取字段);server.xml
中Connector的URIEncoding
属性(设置为UTF-8
),并确保系统环境变量LANG
为en_US.UTF-8
或zh_CN.UTF-8
:<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
catalina.out
或localhost.YYYY-MM-DD.log
中的SEVERE
、ERROR
级别日志(如java.lang.OutOfMemoryError
表示内存溢出,org.apache.catalina.connector.ClientAbortException
表示客户端中断连接)。通过以上步骤,可系统性地分析Ubuntu Tomcat日志中的请求信息,快速定位性能瓶颈、错误问题或安全威胁。