Tomcat日志中的访问记录怎么分析
小樊
31
2025-12-20 09:54:23
Tomcat访问日志分析实操指南
一 日志位置与类型
- 访问日志:记录每一次 HTTP 请求,默认文件为 $CATALINA_HOME/logs/localhost_access_log.*.txt。
- 运行与应用日志:如 catalina.out,包含启动信息、业务异常堆栈等。
- 常见目录:Linux 常见为 /var/log/tomcat 或 $CATALINA_HOME/logs。
- 负载均衡场景:需分别登录各 Tomcat 节点查看各自的访问日志,或使用集中式方案统一收集。
二 访问日志格式与关键字段
- 启用与位置:在 conf/server.xml 中通过 AccessLogValve 配置,常见默认 pattern 为 common 或 combined。
- 常用字段释义(配合示例理解):
- 示例行:
- 192.168.10.66 - - [26/Feb/2020:17:52:00 +0800] “GET /getIndex HTTP/1.1” 200 54
- 字段对照:
- %h:远端主机名或 IP(示例:192.168.10.66)
- %l:远端逻辑用户名(通常为 -)
- %u:已认证用户(无则 -)
- %t:日期时间(示例:[26/Feb/2020:17:52:00 +0800])
- %r:请求第一行(示例:“GET /getIndex HTTP/1.1”)
- %s:HTTP 状态码(示例:200)
- %b:响应字节数,不含首部;为 0 时显示 -(示例:54)
- 扩展性能字段:%D(毫秒)、%T(秒)
- 扩展请求信息:%{Referer}i、%{User-Agent}i 等
- 常用 pattern 别名:
- common:%h %l %u %t “%r” %s %b
- combined:%h %l %u %t “%r” %s %b “%{Referer}i” “%{User-Agent}i”
- 自定义头与 Cookie:
- 记录请求头:%{HeaderName}i(如 %{X-Forwarded-For}i、%{trace-id}i)
- 记录 Cookie:%{CookieName}c
- 记录会话/请求属性:%{xxx}s、%{xxx}r
- 性能与归档:
- 耗时分析建议记录 %D(毫秒);
- 大流量可按小时切分:如 fileDateFormat=“yyyy-MM-dd.HH”。
三 命令行快速分析
- 实时查看访问日志:
- tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt
- 实时过滤错误码(如 500):
- tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt | grep " 500 "
- 统计 Top N IP:
- awk ‘{print $1}’ $CATALINA_HOME/logs/localhost_access_log.*.txt | sort | uniq -c | sort -nr | head -n 20
- 统计 Top N 请求路径(按 URI 路径,不含查询串):
- awk -F" ‘{print $2}’ $CATALINA_HOME/logs/localhost_access_log.*.txt | awk ‘{print $2}’ | sort | uniq -c | sort -nr | head -n 20
- 统计每分钟请求量(按日志时间字段,适配 common/combined):
- awk ‘{print substr($4,2,16)}’ $CATALINA_HOME/logs/localhost_access_log.*.txt | sort | uniq -c
- 统计响应时间分布(基于 %D,单位毫秒):
- awk '{print int($NF/100)100}’ $CATALINA_HOME/logs/localhost_access_log..txt | sort | uniq -c
- 关联访问与错误:
- 先获取异常路径或时段,再在访问日志中 grep 对应 IP/路径/时间 进行回溯。
四 负载均衡与跨节点定位
- 多终端分屏:分别在 tomcat01 与 tomcat02 执行 tail -f,观察请求是否按策略分发。
- 单终端聚合:使用 multitail 同时跟踪多节点日志,便于横向比对。
- 集中式收集:生产环境建议用 Filebeat → Logstash → Elasticsearch → Kibana,按节点、时间、路径等维度统一检索与可视化。
- 单条请求追踪:在请求中注入唯一标识(如 trace-id 请求头),并在 AccessLogValve 的 pattern 中加入 %{trace-id}i;随后在各节点日志中 grep 该标识即可定位落在的节点。
五 可视化与长期治理
- 可视化平台:
- ELK Stack(Elasticsearch + Logstash + Kibana):构建访问量、错误率、耗时 P95/P99、Top URL/IP、UA 分布等面板;
- Graylog / Splunk:集中检索、告警与报表。
- 日志轮转与清理:
- 使用 logrotate/cronolog 按日/小时切分并压缩归档,控制单文件大小与保留周期,避免磁盘被占满。
- 配置优化建议:
- 在 server.xml 的 AccessLogValve 中启用包含 %D、%{Referer}i、%{User-Agent}i、%{X-Forwarded-For}i 的 pattern,便于安全与性能分析;
- 反向代理/负载均衡前置时,优先记录 X-Forwarded-For 以获取真实客户端 IP;
- 为故障排查加入 trace-id 并记录到访问日志。