如何利用日志进行Ubuntu Tomcat负载均衡
导读:利用日志进行 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.out、localhost..log、localhost_access_log..txt 等。其中访问日志包含客户端 IP、请求时间、方法、URI、状态码、处理时间等,是评估负载均衡效果与定位异常的核心数据源。
- 集中化分析:将各节点日志统一采集到 ELK(Elasticsearch、Logstash、Kibana)/Graylog,便于跨实例聚合、可视化与告警。
二 日志配置与采集
- Tomcat 访问日志启用与规范
- 在 server.xml 的 Host 中确保存在 AccessLogValve,并统一格式(便于后续解析与对比)。示例:
关键字段含义:%h(客户端IP)、%t(时间)、%r(请求行)、%s(状态码)、%b(字节数)、%D(处理时间,毫秒)。< Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b %D" /> - 日志位置通常为 $CATALINA_HOME/logs/localhost_access_log..txt。
- 在 server.xml 的 Host 中确保存在 AccessLogValve,并统一格式(便于后续解析与对比)。示例:
- 日志轮转与保留
- 使用 cronolog 按日期切割 catalina.out,避免单文件过大:
- 安装 cronolog;2) 修改 catalina.sh,将标准输出重定向为:
“/usr/local/sbin/cronolog ${ CATALINA_BASE} /logs/catalina.%Y-%m-%d.out”;3) 重启 Tomcat。
- 安装 cronolog;2) 修改 catalina.sh,将标准输出重定向为:
- 使用 cronolog 按日期切割 catalina.out,避免单文件过大:
- 集中采集到 Rsyslog/ELK
- Rsyslog 采集 Tomcat 文件示例(/etc/rsyslog.d/tomcat.conf):
之后可由 Logstash 消费并送入 Elasticsearch,在 Kibana 中构建按实例、按接口的负载与错误面板。$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
- Rsyslog 采集 Tomcat 文件示例(/etc/rsyslog.d/tomcat.conf):
三 基于日志的负载评估方法
- 分发均匀性
- 在 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。
- 在 Kibana 或命令行统计各实例的访问计数:
- 会话粘性与后端路由
- 使用 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 一致,保证会话粘性与定位。
- 使用 mod_proxy_balancer 时开启粘性:
- 错误与慢请求定位
- 统计各实例 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 等关键字,结合时间戳与实例标识定位根因。
- 统计各实例 5xx/4xx 比例与 Top 错误 URI:
- 健康与后端可达性
- 观察负载均衡器错误日志(如 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
