Ubuntu Tomcat 日志监控应用状态实操指南
一 日志位置与关键文件
- 常见日志目录:/var/log/tomcatX/(X 为版本号)或 /opt/tomcatX/logs/;核心文件包括:catalina.out(运行与异常输出)、localhost.<日期>.log(本地主机日志)、host-manager.<日期>.log / manager.<日期>.log(管理应用日志)、以及按应用配置的访问日志 access_log(记录请求与状态码)。这些文件是判断应用健康、错误与性能瓶颈的主要依据。
二 命令行快速监控与告警
- 实时查看与关键字检索
- 实时跟踪:tail -f /path/to/tomcat/logs/catalina.out
- 错误统计:awk ‘/ERROR/ {count++} END {print “ERROR count:”, count}’ /path/to/tomcat/logs/catalina.out
- 最近 N 分钟 ERROR:grep “$(date -d ‘5 minutes ago’ ‘+%b %d, %Y %H:%M’)” /path/to/tomcat/logs/catalina.out | grep ERROR
- 访问日志洞察负载与异常
- Top 10 客户端 IP:awk ‘{print $1}’ /path/to/tomcat/logs/access_log | sort | uniq -c | sort -nr | head
- 高频 5xx:awk ‘$9 >= 500 {print $1, $7, $9}’ /path/to/tomcat/logs/access_log | sort | uniq -c | sort -nr | head
- 慢请求定位(假设日志含响应时间字段 $NF):awk ‘$NF > 3000 {print $0}’ /path/to/tomcat/logs/access_log
- 服务与端口联动校验
- 服务状态:sudo systemctl status tomcat 或 sudo service tomcat status
- 端口监听:netstat -tulpen | grep 8080(默认 8080),确认进程与端口一致
- 日志轮转与保留
- 使用 logrotate 管理历史日志,避免单文件过大、便于长期留存与检索。
三 集中化日志平台搭建
- 方案选型与流程
- 采集:Filebeat/Logstash → 存储:Elasticsearch → 可视化与告警:Kibana(ELK);或采用 Graylog、Splunk 等一体化平台。
- Logstash 最小可用配置示例(按实际路径与格式调整)
- 输入:监控 catalina.out 与 access_log
- 过滤:用 grok 解析时间戳、日志级别、类名与消息;对访问日志解析 client_ip、method、url、status、response_time
- 输出:写入 Elasticsearch 按日索引
- Kibana 侧
- 创建索引模式(如 tomcat-logs-*),构建面板:错误趋势、5xx 比例、Top URL/客户端、响应时间 P95/P99、JVM GC 告警等,并设置阈值告警。
四 自动化巡检与自愈脚本
- 守护脚本示例(每分钟检查一次,异常则重启并记录)
- 逻辑:检查 catalina.out 最近 5 分钟 ERROR;若无 ERROR 且 8080 端口存在则健康;否则重启并记录时间
- 用法:赋予可执行权限,加入 crontab:/1 * * * * /opt/monitor/tomcat_health.sh
- 可扩展点
- 结合 Zabbix 自定义监控项(如统计最近 5 分钟 ERROR 数),配置触发器与告警动作;或接入 Hertzbeat/Prometheus 做指标与日志联动监控。
五 日志与 JVM 调优要点
- 日志级别与输出
- 调整 conf/logging.properties:如将 org.apache.catalina.level = FINE 获取更细日志;必要时开启 GC 日志 以分析停顿与内存压力(配合可视化面板观察 Full GC 频率与时长)。
- 日志轮转与归档
- 使用 cronolog 或 logrotate 按日/按大小切分,避免 catalina.out 过大影响检索与 I/O。
- 访问日志格式
- 在 server.xml 的 AccessLogValve 中启用包含 %D(响应时间,毫秒)的格式,便于定位慢请求与性能瓶颈。