温馨提示×

Tomcat日志中慢查询怎么定位

小樊
39
2025-11-30 16:18:51
栏目: 智能运维

定位思路与准备

  • 明确“慢”的定义:设定阈值(如800 ms2 s),用于后续筛选。
  • 找到日志文件:Tomcat常见日志目录为**/var/log/tomcat//opt/tomcat/logs/;访问日志通常为localhost_access_log.YYYY-MM-DD.txt**,运行日志为catalina.out
  • 确认日志格式:若访问日志包含QTime(请求处理耗时,单位毫秒),可直接按QTime筛选;否则需先调整访问日志的pattern以输出耗时字段。

快速命令行定位

  • 基本筛选:从访问日志中找出包含QTime的行
    • grep ‘QTime’ /var/log/tomcat/localhost_access_log.*.txt
  • 阈值筛选:以800 ms为例,提取QTime大于阈值的请求
    • 写法A(兼容性好):cat /var/log/tomcat/localhost_access_log.*.txt | grep ‘QTime’ | awk -F’QTime=’ ‘{if($2+0>800) print}’
    • 写法B(字段分隔更稳健):cat /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘$2+0>800 {print}’
  • 时间范围提取:将某段时间日志导出到单独文件(示例为10:00–11:00)
    • sed -n ‘/2025-03-12 10:00/,/2025-03-12 11:00/p’ /var/log/tomcat/catalina.out > today.log
  • 实时监控:观察新增慢请求
    • tail -f /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘$2+0>800 {print "[慢] " $0}’
  • 说明:QTime后的数值是毫秒;上述命令中的**$2+0**用于把字符串转为数值进行比较。

进阶分析与可视化

  • 集中化分析:将Tomcat日志采集到ELK Stack(Elasticsearch + Logstash + Kibana)Graylog,用Kibana/Graylog建立QTime分布直方图Top慢接口按IP/UA/接口聚合等可视化面板,便于长期观测与告警。
  • 数据库侧慢SQL:若瓶颈在数据库,开启数据库慢查询日志(如MySQL设置slow_query_log=ONlong_query_time=2),再用pt-query-digest分析,定位执行计划与索引问题。注意:pt-query-digest分析的是数据库慢日志,并非Tomcat访问日志。
  • 关联排查:结合catalina.out错误日志、线程转储(jstack)JVM监控(JConsole/VisualVM/Prometheus+Grafana)数据库连接池指标,判断是应用、容器还是数据库导致的慢。

访问日志配置建议

  • server.xmlAccessLogValve中输出耗时字段(示例含QTime与Usec):
    • <Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs” prefix=“localhost_access_log” suffix=“.txt” pattern=“%h %l %u %t “%r” %s %b %D %F QTime=%D Usec=%{us}T” />
  • 字段含义要点:
    • %D:请求处理时间,单位毫秒(适合做QTime阈值筛选)。
    • %F:响应提交时间,单位毫秒(从请求开始到响应提交)。
    • %T:请求处理时间,单位(浮点)。
    • %{us}T:请求处理时间,单位微秒(便于更细粒度分析)。
  • 修改配置后重启Tomcat,新的访问日志将包含耗时字段,便于后续命令与可视化直接筛选。

0