首页主机资讯如何利用日志进行Ubuntu Tomcat负载均衡

如何利用日志进行Ubuntu Tomcat负载均衡

时间2025-11-20 23:36:03发布访客分类主机资讯浏览618
导读:利用日志进行 Ubuntu Tomcat 负载均衡 一 架构与日志来源 前端负载均衡器:使用 Apache HTTP Server + mod_proxy_balancer(HTTP)或 mod_jk(AJP)。负载均衡器自身产生访问与错...

利用日志进行 Ubuntu Tomcat 负载均衡

一 架构与日志来源

  • 前端负载均衡器:使用 Apache HTTP Server + mod_proxy_balancer(HTTP)或 mod_jk(AJP)。负载均衡器自身产生访问与错误日志,用于观察请求分发、策略与健康检查。
  • Tomcat 节点:每个实例输出 catalina.outlocalhost..loglocalhost_access_log..txt 等。其中访问日志包含客户端 IP、请求时间、方法、URI、状态码、处理时间等,是评估负载均衡效果与定位异常的核心数据源。
  • 集中化分析:将各节点日志统一采集到 ELK(Elasticsearch、Logstash、Kibana)/Graylog,便于跨实例聚合、可视化与告警。

二 日志配置与采集

  • Tomcat 访问日志启用与规范
    • server.xmlHost 中确保存在 AccessLogValve,并统一格式(便于后续解析与对比)。示例:
      <
          Valve className="org.apache.catalina.valves.AccessLogValve"
             directory="logs"
             prefix="localhost_access_log"
             suffix=".txt"
             pattern="%h %l %u %t "%r" %s %b %D" />
      
      
      关键字段含义:%h(客户端IP)、%t(时间)、%r(请求行)、%s(状态码)、%b(字节数)、%D(处理时间,毫秒)。
    • 日志位置通常为 $CATALINA_HOME/logs/localhost_access_log..txt
  • 日志轮转与保留
    • 使用 cronolog 按日期切割 catalina.out,避免单文件过大:
      1. 安装 cronolog;2) 修改 catalina.sh,将标准输出重定向为:
        “/usr/local/sbin/cronolog ${ CATALINA_BASE} /logs/catalina.%Y-%m-%d.out”;3) 重启 Tomcat。
  • 集中采集到 Rsyslog/ELK
    • Rsyslog 采集 Tomcat 文件示例(/etc/rsyslog.d/tomcat.conf):
      $ModLoad imfile
      $InputFilePollInterval 10
      $WorkDirectory /var/spool/rsyslog
      $PrivDropToGroup adm
      
      $InputFileName /opt/tomcat/logs/catalina.out
      $InputFileTag tomcat-catalina
      $InputFileStateFile stat-catalina-out
      $InputFileSeverity info
      $InputFilePersistStateInterval 25000
      $InputRunFileMonitor
      
      $InputFileName /opt/tomcat/logs/localhost_access_log.*
      $InputFileTag tomcat-access
      $InputFileStateFile stat-access
      $InputFileSeverity info
      $InputFilePersistStateInterval 25000
      $InputRunFileMonitor
      
      local7.*    /var/log/tomcat/tomcat.log
      
      之后可由 Logstash 消费并送入 Elasticsearch,在 Kibana 中构建按实例、按接口的负载与错误面板。

三 基于日志的负载评估方法

  • 分发均匀性
    • 在 Kibana 或命令行统计各实例的访问计数:
      # 按实例统计(假设已通过 tag 或字段区分实例)
      grep 'localhost_access_log' /var/log/tomcat/tomcat.log | \
        awk '{
          ip=$1;
           gsub(/\./,"_",ip);
       print ip}
      ' | sort | uniq -c | sort -nr
      
      # 按 URI 统计 TopN
      awk '{
      print $7}
          ' /opt/tomcat/logs/localhost_access_log.* | sort | uniq -c | sort -nr | head
      
    • 若明显不均,可在负载均衡器调整 lbmethod=byrequests/bybusyness 或调整 loadfactor
  • 会话粘性与后端路由
    • 使用 mod_proxy_balancer 时开启粘性:
      <
          Proxy balancer://mycluster>
          
        BalancerMember http://tomcat1:8080 route=tomcat1
        BalancerMember http://tomcat2:8080 route=tomcat2
        ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid
      <
          /Proxy>
          
      ProxyPass / balancer://mycluster
      ProxyPassReverse / balancer://mycluster
      
    • 使用 mod_jk 时,Tomcat 的 Engine 需配置 jvmRoute,与 workers.properties 的 route 一致,保证会话粘性与定位。
  • 错误与慢请求定位
    • 统计各实例 5xx/4xx 比例与 Top 错误 URI:
      awk '$9 >
      = 500 {
      print $1,$7,$9}
          ' /opt/tomcat/logs/localhost_access_log.* | sort | uniq -c | sort -nr
      
    • %D(毫秒)识别慢请求:
      awk '$NF >
       1000 {
      print $7,$NF}
      ' /opt/tomcat/logs/localhost_access_log.* | sort -k2 -nr | head
      
    • catalina.out 中检索 ERROR/Exception/OutOfMemoryError 等关键字,结合时间戳与实例标识定位根因。
  • 健康与后端可达性
    • 观察负载均衡器错误日志(如 Apache 的 error.log)中的连接失败、超时、重试等信息,快速判断后端 Tomcat/AJP 是否异常或网络是否抖动。

四 快速命令清单

  • 实时查看某实例访问日志并按状态码筛选:
    tail -f /opt/tomcat1/logs/localhost_access_log.* | awk '$9 ~ /^[45]/ {
    print $0}
    '
    
  • 统计各实例近 1 万条请求的状态分布:
    tail -n 10000 /opt/tomcat*/logs/localhost_access_log.* | awk '{
    a[$9]++}
     END {
    for(k in a) print k,a[k]}
    '
    
  • 找出最慢的 10 个 URI(单位毫秒):
    awk '{
    print $7,$NF}
        ' /opt/tomcat*/logs/localhost_access_log.* | sort -k2 -nr | head
    
  • 跨实例聚合 Top 错误 URI(需先集中到 ELK 或用 rsyslog 统一 tag):
    grep 'localhost_access_log' /var/log/tomcat/tomcat.log | \
      awk '$9 >
    = 500 {
    print $7}
        ' | sort | uniq -c | sort -nr | head
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何利用日志进行Ubuntu Tomcat负载均衡
本文地址: https://pptw.com/jishu/752595.html
优化Ubuntu Tomcat配置以减少日志量 如何通过日志分析提升Ubuntu Tomcat安全性

游客 回复需填写必要信息