CentOS Tomcat日志中关键指标有哪些
小樊
44
2025-12-23 13:15:48
CentOS Tomcat日志关键指标
一 日志类型与定位
- 访问日志 AccessLog:记录每一次 HTTP 请求的明细,默认位于 $CATALINA_HOME/logs/localhost_access_log.*.txt,由 AccessLogValve 写入,适合统计 PV/UV、响应时间、吞吐量、状态码分布、来源与 UA 等。
- 运行与错误日志:核心为 catalina.out(标准输出/错误)、localhost..log(本地主机应用日志)、以及可选的 manager..log / host-manager..log,用于发现 异常堆栈、启动失败、部署与运行期错误。
- 日志目录通常为 $CATALINA_HOME/logs(Linux/CentOS 环境)。
二 访问日志关键字段与含义
- 基础字段
- %h:远程主机(IP/主机名)
- %l:远程逻辑用户名(identd,通常为 -)
- %u:已认证远程用户(若无则为 -)
- %t:请求时间(常见格式如 [18/Jul/2018:17:00:01+0800])
- %r:请求首行(方法 + URL + 协议)
- %s:HTTP 状态码(如 200/404/500)
- %b:发送给客户端的字节数(不含响应头;为 0 时可能显示为 -)
- 性能与时延
- %D:处理请求耗时(毫秒)
- %T:处理请求耗时(秒,毫秒级精度)
- %F:提交响应耗时(毫秒)
- 连接与协议
- %p:接收请求的本地端口
- %H:请求协议(如 HTTP/1.1)
- 请求细节
- %m:请求方法(GET/POST 等)
- %U:请求 URL 路径(不含查询串)
- %q:查询字符串(若有,前缀 ?)
- %I:当前请求线程名(便于与线程转储/堆栈对齐)
- 请求头/响应头/Cookie
- %{xxx}i:请求头(如 %{User-Agent}i、%{Referer}i、%{X-Forwarded-For}i)
- %{xxx}o:响应头
- %{xxx}c:Cookie
- 连接状态
- %X:响应完成时的连接状态(X=响应完成前连接中止;+=响应后可能保持长连接;-=响应后关闭)
- 常用组合
- common:%h %l %u %t “%r” %s %b
- combined:在 common 基础上增加 “%{Referer}i” “%{User-Agent}i”
- 生产建议
- 在反向代理/负载均衡后,优先记录 %{X-Forwarded-For}i 以获取真实客户端 IP。
- 为性能分析建议包含 %D/%T/%F、%r、%s、%b、%I。
三 错误与运行日志关键信号
- 日志级别与来源:关注 SEVERE/WARN/ERROR 级别,定位 catalina.out 与 localhost..log 中的异常与堆栈。
- 异常解读要点:
- 异常类型(如 NullPointerException/IOException)
- 异常消息(直接指向根因)
- 堆栈跟踪(定位到具体类/方法/行号)
- 请求上下文(URL、方法、参数、客户端 IP,便于复现)
- 运行环境信息(Tomcat 版本、JVM 信息等)
- 常见故障线索:
- 端口冲突(启动失败,端口被占用)
- 类/资源未找到(部署或依赖问题)
- 数据库连接失败(URL/账号/网络/数据库可用性)
- 排查动作:结合 tail -f 实时观察、grep/awk 过滤关键字、必要时提高日志级别或开启更详细访问日志以还原现场。
四 从日志计算的核心监控指标与示例
- 吞吐量与并发
- QPS/RPS:单位时间请求数(如每分钟/每秒计数)
- 并发连接/请求数:结合访问日志时间与状态码进行窗口统计
- 时延与性能分布
- 平均/中位数/分位时延(P95/P99):基于 %D/%T 计算
- 响应提交耗时:基于 %F 识别慢提交/慢刷盘
- 成功率与错误率
- HTTP 错误率:统计 %s >= 400 的占比
- 异常率:错误日志中 ERROR/SEVERE 占比或计数
- 流量与负载
- 出站流量:对 %b 求和(字节/秒或字节/分钟)
- 热点接口/资源:按 %r(URI) 分组统计次数与总耗时
- 客户端与链路
- Top IP/UA/Referer:按 %h / %{User-Agent}i / %{Referer}i 分组
- 真实来源 IP:使用 %{X-Forwarded-For}i 还原
- 示例命令(按分钟统计 QPS、P95 与错误率)
- QPS(每分钟)
- awk -F’[’ ‘{gsub(/-/,“:”,$2); print $2}’ access_log.*.txt | sort | uniq -c | awk ‘{print $2":"$1}’ | sort
- P95 时延(毫秒,基于 %D)
- awk ‘{print $NF}’ access_log..txt | sort -n | awk '{a[NR]=$1} END {print "P95="a[int(NR0.95)]}’
- 错误率(5xx 占比)
- awk '$9 ~ /^[5]/ {err++; total++} END {printf “ErrorRate=%.2f%%\n”, err/total100}’ access_log..txt
- 可视化与告警
- 建议接入 ELK/Logstash/Elasticsearch/Kibana 或 Grafana Loki 做指标化与可视化,配置阈值告警(如 P95 时延、错误率、QPS 突增)。
五 日志配置与采集建议
- 访问日志建议 Pattern(示例)
- 兼顾性能与可观测性:
- pattern=“%h %l %u %t “%r” %s %b %D %F %{User-Agent}i %{Referer}i %{X-Forwarded-For}i”
- 运行日志建议
- 使用 AsyncFileHandler 提升高并发写入性能,设置合理的 maxDays 做日志保留,避免磁盘被占满。
- 日志轮转与保留
- 代理/网关前置
- 在 AccessLogValve 中记录 X-Forwarded-For;在 logging.properties 中合理设置日志级别,避免产生过多调试日志。