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

相关推荐
python百炼成钢2 小时前
解决——linux通过网络挂载tftp无法下载
linux·运维·网络
无奈笑天下2 小时前
银河麒麟高级服务器版本【更换bond绑定的网卡】操作方法
linux·运维·服务器·arm开发·经验分享
深海里的鱼(・ω<)★2 小时前
CentOS 7 默认 yum 源官方不维护解决方案
linux·运维·centos
猫头虎-人工智能2 小时前
openEuler远程批量部署实战 SSH VNC IPMI全流程解析
运维·git·开源·ssh·github·开放原子·开源软件
weixin_307779132 小时前
Jenkins Metrics 插件全解析:从数据采集到智能监控的实践指南
运维·开发语言·架构·jenkins
gavin_gxh2 小时前
SAP MM 采购订单号 excel上传 获取订单状态 审批 取消审批
运维·经验分享·其他
菜鸟小九2 小时前
mysql运维(读写分离)
运维·数据库·mysql
菜鸟小九2 小时前
mysql运维(分库分表)
运维·数据库·mysql
邪恶喵喵2 小时前
nginx反向代理和负载均衡
运维·nginx·负载均衡