tail -f命令tail -f是Linux系统下最常用的实时监控日志工具,通过“follow”模式持续输出日志文件的新增内容。例如,监控Tomcat主日志文件(通常为catalina.out)的命令为:
tail -f /path/to/tomcat/logs/catalina.out
按Ctrl+C可停止监控。该方法适合快速查看实时日志,但无法处理日志轮转(如catalina.out被重命名后,需手动重新执行命令)。
tail -F命令(处理日志轮转)若Tomcat日志会定期轮转(如通过logrotate切割),tail -F(大写F)可自动跟踪新创建的同名日志文件。命令示例:
tail -F /path/to/tomcat/logs/catalina.out
该命令会在日志文件轮转后自动切换到新文件,无需手动干预。
less -F命令less的“follow”模式(-F选项)兼具实时查看和灵活导航功能。命令示例:
less -F /path/to/tomcat/logs/catalina.out
按Ctrl+C退出跟随模式,按F键重新进入;可通过上下箭头键滚动查看历史日志,适合需要偶尔回溯的场景。
multitail命令(多日志并行监控)multitail可同时监控多个日志文件,并支持分割视图(如分屏显示)。安装命令(Ubuntu/Debian为例):
sudo apt-get install multitail
监控catalina.out和localhost.log的命令:
multitail /path/to/tomcat/logs/catalina.out /path/to/tomcat/logs/localhost.*.log
该工具适合需要对比多个日志文件的场景,提升监控效率。
通过logrotate工具自动切割、压缩和删除旧日志,防止catalina.out过大占用磁盘空间。配置步骤:
logrotate(若未安装):sudo apt-get install logrotate(Ubuntu/Debian)或sudo yum install logrotate(CentOS/RHEL);/etc/logrotate.d/tomcat),内容示例:/path/to/tomcat/logs/*.out {
size 50M # 单个日志文件超过50MB时轮转
rotate 7 # 保留最近7个轮转文件
compress # 压缩旧日志(如catalina.out.1.gz)
missingok # 若日志文件不存在也不报错
copytruncate # 复制原日志后清空,避免Tomcat进程中断
}
sudo logrotate -f /etc/logrotate.d/tomcat(强制立即轮转);crontab -e,添加0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/tomcat(每天0点执行)。ELK(Elasticsearch+Logstash+Kibana)是开源的日志分析平台,适合大规模日志监控。配置流程:
filebeat.yml采集catalina.out、access_log等文件:filebeat.inputs:
- type: log
enabled: true
paths:
- /path/to/tomcat/logs/catalina.out
- /path/to/tomcat/logs/access_log.*
output.logstash: # 发送至Logstash
hosts: ["localhost:5044"]
logstash.conf解析Tomcat日志(如提取时间、状态码、请求路径等),并发送至Elasticsearch;filebeat-*),通过Dashboard展示日志趋势、错误统计、访问量等指标。Zabbix是企业级监控工具,可通过自定义脚本监控Tomcat日志中的关键词(如“ERROR”“OutOfMemoryError”),触发报警。配置步骤:
/usr/local/bin/check_tomcat_log.sh),检查日志中的错误数量:#!/bin/bash
ERROR_COUNT=$(grep -c "ERROR" /path/to/tomcat/logs/catalina.out)
if [ $ERROR_COUNT -gt 5 ]; then
echo "Tomcat日志错误数超过阈值:$ERROR_COUNT"
exit 1
else
echo "Tomcat日志正常"
exit 0
fi
Loki是Grafana生态的轻量级日志聚合工具,适合中小规模日志监控。配置流程:
promtail-config.yaml采集Tomcat日志:server:
http_listen_port: 9080
grpc_listen_port: 0
clients:
- url: http://localhost:3100/loki/api/v1/push
positions:
filename: /tmp/positions.yaml
scrape_configs:
- job_name: tomcat
static_configs:
- targets:
- localhost
labels:
job: tomcat
__path__: /path/to/tomcat/logs/*.log
{job="tomcat"} |= "ERROR")可视化错误日志。Tomcat的JMX(Java Management Extensions)接口可暴露运行时指标(如线程池状态、内存使用、请求处理时间),通过JMX客户端工具(如JConsole、VisualVM)或Prometheus+JMX Exporter监控。配置步骤:
catalina.sh(Linux)或catalina.bat(Windows),添加以下参数:export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
jconsole,选择远程进程(localhost:1099),查看Tomcat的线程、内存、类加载等指标;通过Shell/Python脚本定期检查Tomcat日志,实现自定义监控逻辑(如检测特定错误、自动重启服务)。示例Shell脚本(检测catalina.out中的“OutOfMemoryError”并重启Tomcat):
#!/bin/bash
LOG_FILE="/path/to/tomcat/logs/catalina.out"
ERROR_KEYWORD="OutOfMemoryError"
TOMCAT_PID=$(ps -ef | grep tomcat | grep -v grep | awk '{print $2}')
if grep -q "$ERROR_KEYWORD" "$LOG_FILE"; then
echo "$(date): Found $ERROR_KEYWORD in $LOG_FILE, restarting Tomcat..."
kill -9 $TOMCAT_PID
/path/to/tomcat/bin/startup.sh
fi
将脚本添加到crontab(如每5分钟执行一次):
*/5 * * * * /usr/local/bin/check_tomcat_error.sh >> /var/log/tomcat_monitor.log 2>&1。