在Debian系统中,Tomcat日志是监控应用运行状态、排查故障的关键依据。以下是具体监控方法,涵盖实时查看、日志管理、自动化分析与高级可视化等场景:
tail -f命令:最常用的实时监控工具,直接输出日志文件的最新内容(如Tomcat的主日志catalina.out)。
tail -f /var/log/tomcat9/catalina.out
按Ctrl+C退出。若需同时监控多个日志(如访问日志、应用日志),可使用:
tail -f /var/log/tomcat9/*.log
watch命令:定期执行命令并刷新输出,适合需要固定间隔查看的场景(如每秒刷新最后一次100行):
watch -n 1 "tail -n 100 /var/log/tomcat9/catalina.out"
-n 1表示1秒刷新一次,-d参数可高亮显示变化内容。
Tomcat日志长期运行会占用大量磁盘空间,需用logrotate工具自动压缩、备份旧日志。
配置步骤:
/etc/logrotate.d/tomcat9文件(针对Tomcat 9):sudo nano /etc/logrotate.d/tomcat9
/var/log/tomcat9/*.log {
daily # 每天轮转
missingok # 忽略缺失文件
rotate 7 # 保留7天日志
compress # 压缩旧日志(如.gz格式)
notifempty # 空日志不轮转
create 640 root adm # 新日志权限
}
sudo logrotate -vf /etc/logrotate.d/tomcat9
该配置会自动清理超过7天的旧日志,避免磁盘空间耗尽。
通过grep、awk等工具提取日志中的错误、警告或特定关键词,缩小排查范围:
grep -i "error\|exception" /var/log/tomcat9/catalina.out
grep -c "error" /var/log/tomcat9/catalina.out
grep "2025-10-18" /var/log/tomcat9/catalina.out | grep -i "error"
这些命令可快速定位应用崩溃、数据库连接失败等问题。
对于大规模日志,ELK Stack提供实时聚合、可视化与深度分析能力:
/etc/logstash/conf.d/tomcat.conf:input {
file {
path => "/var/log/tomcat9/catalina.out"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:logmessage}" } }
date { match => [ "timestamp", "ISO8601" ] }
}
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
http://localhost:5601,添加Elasticsearch索引(如tomcat-*),创建仪表盘展示错误趋势、访问量统计、响应时间分布等指标。通过Shell脚本定期检查日志中的异常(如5分钟内无新日志),并触发告警(如邮件、短信):
#!/bin/bash
LOG_FILE="/var/log/tomcat9/catalina.out"
LAST_LINE_FILE="/tmp/tomcat_last_line.txt"
ALERT_THRESHOLD=300 # 5分钟(秒)
# 获取当前最后一行行号
CURRENT_LINE=$(wc -l < "$LOG_FILE")
# 读取上次记录的行号
if [ -f "$LAST_LINE_FILE" ]; then
LAST_LINE=$(cat "$LAST_LINE_FILE")
else
LAST_LINE=0
fi
# 计算新增行数
NEW_LINES=$((CURRENT_LINE - LAST_LINE))
# 若新增行数为0且超过阈值,触发告警
if [ "$NEW_LINES" -eq 0 ] && [ "$(( $(date +%s) - $(stat -c %Y "$LOG_FILE") ))" -gt "$ALERT_THRESHOLD" ]; then
echo "Alert: Tomcat log has not been updated for $ALERT_THRESHOLD seconds!" | mail -s "Tomcat Log Alert" admin@example.com
fi
# 更新上次行号
echo "$CURRENT_LINE" > "$LAST_LINE_FILE"
将脚本保存为/usr/local/bin/monitor_tomcat_log.sh,添加执行权限并设置定时任务(每5分钟运行一次):
chmod +x /usr/local/bin/monitor_tomcat_log.sh
(crontab -l ; echo "*/5 * * * * /usr/local/bin/monitor_tomcat_log.sh") | crontab -
该脚本可扩展为监控特定错误关键词(如"OutOfMemoryError"),提升告警针对性。
若不想搭建复杂环境,可使用商业或开源工具实现一键监控:
jmx_exporter采集Tomcat的JVM指标(如内存使用、线程池状态),在Grafana中创建仪表盘展示;以上方法覆盖了从基础查看到高级分析的全流程,可根据实际需求选择组合使用。例如,小型项目可用tail -f+grep快速排查问题;大型项目建议用ELK Stack+Prometheus实现规模化监控。