温馨提示×

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 为 commoncombined
  • 常用字段释义(配合示例理解):
    • 示例行:
      • 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/路径/时间 进行回溯。

四 负载均衡与跨节点定位

  • 多终端分屏:分别在 tomcat01tomcat02 执行 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.xmlAccessLogValve 中启用包含 %D%{Referer}i%{User-Agent}i%{X-Forwarded-For}i 的 pattern,便于安全与性能分析;
    • 反向代理/负载均衡前置时,优先记录 X-Forwarded-For 以获取真实客户端 IP;
    • 为故障排查加入 trace-id 并记录到访问日志。

0