运维工程师免费技术教程之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 的请求接收、运行状态,快速定位「请求未转发」「节点报错」「负载规则未生效」等问题。

相关推荐
阿梦Anmory2 分钟前
Ubuntu配置代理最详细教程
linux·运维·ubuntu
呉師傅16 分钟前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
heartbeat..19 分钟前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
小Tomkk1 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
赌博羊1 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·运维·gnu
消失的旧时光-19431 小时前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑1 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
小天源1 小时前
Cacti在Debian/Ubuntu中安装及其使用
运维·ubuntu·debian·cacti
Trouvaille ~2 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
芷栀夏2 小时前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann