运维工程师免费技术教程之tomcat动态日志监控

在负载均衡(如 LVS/Nginx 转发)模式下查看两台 Tomcat 的动态日志,核心是「实时跟踪每台 Tomcat 的日志文件」,并可通过「日志关键词过滤」「多终端聚合」等方式定位请求走向。以下是分场景的实操方案,覆盖基础实时查看、聚合分析、精准定位请求等需求:

一、基础方案:单台 Tomcat 动态日志查看(最常用)

Tomcat 的核心日志分为 访问日志 (记录所有 HTTP 请求)和 应用日志(如业务报错、Tomcat 运行日志),分别对应不同文件,需针对性跟踪:

1. 实时跟踪 Tomcat 访问日志(判断请求是否转发到该节点)

访问日志默认路径:TOMCAT_HOME/logs/localhost_access_log.*.txt(或自定义命名,如你之前配置的 blog_access_log.txt)。

bash 复制代码
# 登录 Tomcat 节点(如 tomcat01),实时跟踪访问日志(动态刷新)
tail -f /usr/local/tomcat/logs/localhost_access_log.2025-12-08.txt

# 若你自定义了访问日志名称(如 blog_access_log.txt),则:
tail -f /usr/local/tomcat/logs/blog_access_log.txt
  • 关键作用 :只要负载均衡将请求转发到该 Tomcat,日志会立即显示请求的 Host 头、请求路径、状态码等,可直接判断「该节点是否收到请求」。

  • 过滤关键请求 (如只看某域名/路径):

    bash 复制代码
    # 只显示包含 www.cloudcpblog.com 的请求
    tail -f /usr/local/tomcat/logs/blog_access_log.txt | grep "www.cloudcpblog.com"
    # 只显示 500 错误的请求(定位服务异常)
    tail -f /usr/local/tomcat/logs/blog_access_log.txt | grep " 500 "
2. 实时跟踪 Tomcat 应用/运行日志(定位报错)

应用日志默认路径:TOMCAT_HOME/logs/catalina.out(包含 Tomcat 启动日志、应用代码报错、JVM 信息等)。

bash 复制代码
# 实时跟踪 catalina.out,动态查看报错/运行信息
tail -f /usr/local/tomcat/logs/catalina.out

# 过滤报错关键词(如 Exception/Error)
tail -f /usr/local/tomcat/logs/catalina.out | grep -i "exception\|error"
  • 关键作用:若请求到达 Tomcat 但业务报错(如数据库连接失败、代码异常),可在此日志中找到具体堆栈信息。

二、进阶方案:同时查看两台 Tomcat 的动态日志(聚合分析)

负载均衡模式下,需同时观察两台 Tomcat 的日志,判断「请求是否按负载规则分发」(如轮询、权重),有 3 种常用方式:

方式 1:多终端分屏(最简单)
  • 打开 2 个 SSH 终端,分别登录 tomcat01tomcat02
  • 各自执行 tail -f 跟踪访问日志,同时操作客户端访问域名,观察两台日志的请求记录(如轮询模式下会交替出现请求)。
方式 2:使用 multitail 工具(单终端聚合多日志)

multitail 可在单个终端同时显示多个远程/本地日志,适合无多终端的场景:

bash 复制代码
# 1. 安装 multitail(CentOS/Rocky Linux)
yum install -y multitail

# 2. 同时跟踪两台 Tomcat 的访问日志(需先配置 SSH 免密登录,避免重复输密码)
multitail \
  -l "ssh root@tomcat01 'tail -f /usr/local/tomcat/logs/blog_access_log.txt'" \
  -l "ssh root@tomcat02 'tail -f /usr/local/tomcat/logs/blog_access_log.txt'"
  • 操作快捷键
    • j/k 切换日志窗口;
    • Ctrl+C 退出;
    • F 可过滤关键词(如输入 www.cloudcpblog.com 只看目标请求)。
方式 3:日志集中收集(ELK,适合生产环境)

若为生产环境,推荐搭建 ELK 栈(Elasticsearch + Logstash + Kibana)

  1. 在两台 Tomcat 上部署 Filebeat,实时采集访问日志/应用日志;
  2. Filebeat 将日志发送到 Logstash 清洗、打标签(如标记 tomcat01/tomcat02);
  3. Elasticsearch 存储日志,Kibana 提供可视化面板,可:
    • 实时搜索所有日志(按节点、时间、请求路径过滤);
    • 统计两台 Tomcat 的请求量(验证负载均衡权重是否生效);
    • 定位某条请求具体落在哪个 Tomcat 节点。

三、精准方案:定位「单个请求」落在哪个 Tomcat 节点

若需追踪「某一次客户端请求」具体转发到了哪台 Tomcat,可通过「请求唯一标识」实现:

  1. 客户端请求时添加自定义头/参数 (如 trace-id):

    bash 复制代码
    # 用 curl 发送请求,添加自定义 trace-id=123456
    curl -H "trace-id: 123456" http://www.cloudcpblog.com
  2. 修改 Tomcat 访问日志格式,记录自定义头
    编辑 Tomcat 的 conf/server.xml,在 <AccessLogValve>pattern 中添加 %{trace-id}i(记录 trace-id 头):

    xml 复制代码
    <Valve className="org.apache.catalina.valves.AccessLogValve" 
           directory="logs" prefix="blog_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot;%{trace-id}i&quot;" />
  3. 重启 Tomcat 后,在两台日志中搜索 trace-id=123456

    bash 复制代码
    # 在 tomcat01 搜索
    grep "123456" /usr/local/tomcat/logs/blog_access_log.txt
    # 在 tomcat02 搜索
    grep "123456" /usr/local/tomcat/logs/blog_access_log.txt
    • 哪个节点的日志能搜到,说明请求转发到了该节点。

四、关键注意事项

  1. 日志时间同步 :确保两台 Tomcat 节点的系统时间同步(执行 ntpdate ntp.aliyun.com),否则日志时间不一致会导致分析混乱;
  2. 负载均衡转发规则 :若使用 Nginx 负载均衡,需确保配置中开启 proxy_set_header Host $host;(传递域名),否则 Tomcat 访问日志的 Host 头会显示 IP,无法匹配虚拟主机;
  3. 日志轮转 :若 Tomcat 开启了日志轮转(如按天生成日志文件),需确认跟踪的是当天的日志文件(如 localhost_access_log.2025-12-08.txt),而非历史文件。

总结

场景 推荐方案
快速验证单节点是否收到请求 tail -f 跟踪访问日志
同时观察两台节点的请求分发 multitail 聚合日志 / 多终端分屏
生产环境长期监控/分析 ELK 日志集中收集
定位单个请求的转发节点 自定义 trace-id + 日志过滤

按以上方法,可清晰掌握负载均衡模式下两台 Tomcat 的请求接收、运行状态,快速定位「请求未转发」「节点报错」「负载规则未生效」等问题。

相关推荐
J2虾虾6 小时前
Docker启动超时,吓得我一身汗
运维·docker·容器
一生只为赢6 小时前
通俗易懂:ARM指令的寻址方式(三)
运维·arm开发·数据结构·嵌入式实时数据库
运维行者_7 小时前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
液态不合群7 小时前
Nginx多服务静态资源路径冲突解决方案
运维·nginx
Getgit7 小时前
Linux 下查看 DNS 配置信息的常用命令详解
linux·运维·服务器·面试·maven
数通工程师8 小时前
企业级硬件防火墙基础配置实战:从初始化到规则上线全流程
运维·网络·网络协议·tcp/ip·华为
岁岁种桃花儿9 小时前
详解kubectl get replicaset命令及与kubectl get pods的核心区别
运维·nginx·容器·kubernetes·k8s
捷智算云服务9 小时前
告别运维割裂!捷智算GPU维修中心重新定义“全栈式”维修新标准
运维·服务器·性能优化
青火coding9 小时前
SOFAServerless架构的意义
java·运维·中间件·架构·serverless
橘颂TA9 小时前
【Linux 网络】TCP 拥塞控制与异常处理:从原理到实践的深度剖析
linux·运维·网络·tcp/ip·算法·职场和发展·结构与算法