Debian Tomcat 访问日志能揭示的关键信息
一 日志位置与格式
- 访问日志默认位于 $CATALINA_HOME/logs/localhost_access_log.*.txt,由 AccessLogValve 写入;常见默认格式为 common:%h %l %u %t “%r” %s %b。常见字段含义:%h 远程主机(IP/名称)、%l 远程逻辑用户名(通常为 -)、%u 已认证远程用户(无则 -)、%t 请求时间、%r 请求首行(方法+URI+协议)、%s HTTP 状态码、%b 响应字节数(不含首部,为 0 时显示 -)。在 Debian 上,若使用系统包安装,日志目录也可能是 /var/log/tomcat。这些基础字段足以重建一次请求的关键画像。
二 能直接得到的维度
- 来源与身份:从 %h/%A 识别客户端与服务端 IP;结合 %u 与认证体系了解已认证用户分布。
- 时间与频率:从 %t 还原请求时点,用于峰值时段、潮汐流量与 SLA 观测。
- 方法与资源:从 %m 与 %r/%U 知道是 GET/POST 等以及访问的具体路径/查询串(%q),定位热点接口与异常资源。
- 结果与规模:用 %s 判断成功/失败分布(如 2xx/3xx/4xx/5xx),用 %b 评估返回体量与带宽占用。
- 性能与连接:以 %D/%T 衡量处理耗时(毫秒/秒),以 %I 关联线程,%X 观察连接是否在响应后保持(Keep-Alive)。
- 上下文线索:借助 %{Referer}i、%{User-Agent}i、%{Cookie}i 等请求头还原来源页面、终端类型与会话特征,辅助安全与体验分析。
三 典型诊断场景与可观测信号
- 错误与异常定位:大量 4xx/5xx 集中出现时,按 URI/方法/IP 聚合即可快速定位问题页面或接口;结合 %t 判断是否为突发。
- 性能瓶颈识别:对 %D/%T 做分布统计(P95/P99),找出慢请求;若某接口耗时突增,可进一步用 %I 关联线程、用 %r 回溯具体调用。
- 攻击与滥用发现:%h 的异常聚集、User-Agent 异常特征、Referer 缺失或不合理、对敏感路径(如 /manager、/admin)的探测,都可在访问日志中显现。
- 业务与流量洞察:按 %U 统计热门资源,按 %m 观察读写比例,按 %b 评估下行带宽;配合 %t 做日内/周内趋势,辅助容量规划。
四 常用分析命令示例
- 实时查看最新访问:tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt
- Top N 来源 IP:
grep -oh ‘[0-9]+.[0-9]+.[0-9]+.[0-9]+’ localhost_access_log.*.txt | sort | uniq -c | sort -nr | head
- 状态码分布:
awk ‘{print $9}’ localhost_access_log.*.txt | sort | uniq -c | sort -nr
- 慢请求 Top N(阈值示例 1000ms):
awk ‘$NF > 1000 {print $0}’ localhost_access_log.*.txt | sort -kNF -nr | head
- 按小时请求量趋势:
awk ‘{print substr($4, 2, 13)}’ localhost_access_log.*.txt | sort | uniq -c
说明:字段位置会随 pattern 不同而变化,上例以常见的 common/combined 样式为前提;必要时先用 head 查看样例行确认列序。
五 如何配置更丰富的访问日志
- 在 server.xml 的 AccessLogValve 中自定义 pattern,加入耗时、线程、请求头等字段,例如:
<Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs”
prefix=“localhost_access_log” suffix=“.txt”
pattern=“%a %l %u %t “%r” %s %b %D “%{Referer}i” “%{User-Agent}i” %I %X” />
这样可同时记录 客户端IP、响应字节数、处理耗时(毫秒)、Referer、User-Agent、线程名 与 连接状态,显著提升可观测性与排障效率。
- 日志轮转与保留:使用 logrotate 对 localhost_access_log* 做按日轮转与压缩,避免单文件过大、便于长期留存与合规审计。