温馨提示×

Ubuntu Tomcat日志中的慢查询如何定位

小樊
45
2025-12-21 21:19:04
栏目: 智能运维

Ubuntu Tomcat日志中的慢查询定位

一 定位与准备

  • 确认日志目录:Tomcat 常用日志路径为 /var/log/tomcat//opt/tomcat/logs/;常见文件包括 catalina.outlocalhost_access_log.YYYY-MM-DD.txt。进入目录并先列出文件确认名称与日期:
    • cd /var/log/tomcat && ls -l
  • 确认访问日志已输出处理时间:在 conf/server.xmlAccessLogValve 中确保开启并记录处理时间(常见为 %D%T,单位分别为毫秒/秒)。示例:
    • <Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs” prefix=“localhost_access_log” suffix=“.txt” pattern=“%h %l %u %t “%r” %s %b %D” />
    • 重启 Tomcat 后,访问日志行将包含处理时间字段(如 %D=毫秒%T=秒)。以上路径与字段识别方法可直接用于后续筛选。

二 命令行快速筛选

  • 基本筛选(按阈值,单位毫秒):从访问日志中找出处理时间超过阈值的请求。示例阈值 800 ms
    • grep ‘QTime=’ /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘{if($2+0>800) print}’
    • 若你的日志使用 %T(秒),将阈值改为 0.8 并调整比较:
      • grep ‘processingTime=’ /var/log/tomcat/localhost_access_log.*.txt | awk -F’processingTime=’ ‘{if($2>0.8) print}’
  • 按时间窗口提取:先用 sed 截取某天/某时段日志,再用上面的筛选命令。示例提取 2025-03-07 全天:
    • sed -n ‘/2025-03-07/,/2025-03-08/p’ /var/log/tomcat/catalina.out > today.log
  • 实时观察慢请求:
    • tail -f /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘{if($2+0>800) print "[慢] "$0}’
  • 说明:Tomcat 访问日志中常见时间字段名可能为 QTime(部分 Valve 配置)或 processingTime(自定义 pattern);若未显式输出时间字段,请先在 server.xmlAccessLogValve pattern 中加入 %D/%T 再分析。

三 进阶分析与可视化

  • 集中化与检索:将 Tomcat 访问日志接入 ELK Stack(Elasticsearch + Logstash + Kibana)Graylog,按 URL、status、QTime/processingTime、remoteIP、UA 等维度建立索引与可视化面板,便于按时间段、接口、来源等快速定位持续性慢请求与异常峰值。
  • 若慢的根本在数据库:当 Tomcat 通过 JDBC 访问 MySQL 时,开启并收集数据库慢查询日志,使用 pt-query-digest 对慢 SQL 进行聚合、指纹识别与样本定位,结合应用日志中的 requestId/用户/时间 回放与优化。

四 常见陷阱与优化建议

  • 单位混淆:%D 输出为毫秒%T 输出为;设置阈值时务必与字段单位一致(例如 800 ms 对应 %D>800,或 %T>0.8)。
  • 日志轮转与保留:配置 logrotate 或按日期切分(如使用 cronolog),避免单文件过大导致分析困难与磁盘占满。
  • 关联排查:当发现大量慢请求时,结合系统层面进一步排查 CPU、内存、带宽、连接数 等,以区分是 应用处理慢 还是 外部依赖慢(如数据库、下游服务、网络)。

0