一、基础命令行监控
查看Tomcat进程状态
通过ps命令结合grep过滤,快速确认Tomcat进程是否运行及PID(进程ID):
ps -ef | grep tomcat
若输出中包含org.apache.catalina.startup.Bootstrap(Tomcat启动类),则表示进程正在运行,输出的第二个字段即为PID。
查看Tomcat服务状态
若Tomcat通过systemd管理(Ubuntu 16.04及以上版本默认方式),使用以下命令查看服务状态:
sudo systemctl status tomcat
若服务正常运行,输出中会显示active (running);若未运行,可使用sudo systemctl start tomcat启动服务。
若通过传统service命令管理,可替换为:
sudo service tomcat status
实时查看运行日志
Tomcat的核心日志(如启动、请求、错误信息)默认存储在logs/catalina.out(路径可通过server.xml中的AccessLogValve配置调整)。使用tail -f命令实时跟踪日志更新:
tail -f /path/to/tomcat/logs/catalina.out
按Ctrl+C退出实时查看。如需同时监控多个日志文件(如localhost.log),可使用multitail工具(安装:sudo apt-get install multitail):
multitail /path/to/tomcat/logs/catalina.out /path/to/tomcat/logs/localhost.*.log
二、日志深度监控与分析
日志关键词过滤
使用grep命令快速定位错误、警告等关键信息,例如查找ERROR日志:
grep "ERROR" /path/to/tomcat/logs/catalina.out
结合awk进行统计(如按时间戳统计请求数):
awk '{print $1, $2}' /path/to/tomcat/logs/catalina.out | sort | uniq -c
日志轮转配置
防止日志文件过大占用磁盘空间,使用logrotate工具自动轮转、压缩旧日志。创建配置文件/etc/logrotate.d/tomcat:
/path/to/tomcat/logs/*.out {
size 50M # 单个日志文件超过50MB时轮转
rotate 7 # 保留最近7个轮转文件
compress # 压缩旧日志(gzip)
missingok # 若日志文件不存在,不报错
daily # 每天检查一次(与size配合,取先满足条件者)
}
手动测试配置:sudo logrotate -f /etc/logrotate.d/tomcat,并添加到crontab(每天0点执行):
0 0 * * * root /usr/sbin/logrotate /etc/logrotate.d/tomcat
高级日志分析工具
对于海量日志,可使用ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog实现可视化分析:
access_log、catalina.out),存储到Elasticsearch,通过Kibana创建仪表盘展示请求量、响应时间、错误率等指标。三、JMX远程监控 JMX(Java Management Extensions)可监控Tomcat的JVM内存、线程池、连接器状态等详细指标。配置步骤如下:
修改Tomcat配置
在conf/server.xml的<Server>标签内添加JMX监听器(开启远程访问):
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiServerPortPlatform="10001" # RMI服务器端口
rmiRegistryPortPlatform="10000" /> # RMI注册表端口
配置认证文件
在bin目录下创建jmxremote.password(权限设为600):
admin admin # 用户名:密码
创建jmxremote.access(权限设为600):
admin readwrite # 用户名:权限(readwrite/readonly)
修改启动脚本
编辑bin/catalina.sh,在JAVA_OPTS中添加JMX配置(替换your_server_ip为服务器IP):
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=your_server_ip
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"
(注:生产环境建议开启authenticate和ssl,配置SSL证书及用户权限)
连接监控工具
使用JConsole、VisualVM或Prometheus(配合jmx_exporter)连接:
sudo apt-get install visualvm,启动后添加远程主机(输入服务器IP),选择Tomcat实例即可查看CPU、内存、线程等指标。jmx_exporter(将JMX指标转换为Prometheus可采集的格式),在prometheus.yml中添加抓取目标:scrape_configs:
- job_name: 'tomcat'
static_configs:
- targets: ['your_server_ip:10001']
四、第三方监控工具
Zabbix
sudo apt-get install zabbix-java-gateway。/etc/zabbix/zabbix_server.conf):设置JavaGateway=(服务器IP)、JavaGatewayPort=10052。Prometheus+Grafana
sudo apt-get install prometheus)和Grafana(sudo apt-get install grafana)。jmx_exporter或Tomcat Exporter),在Grafana中导入Tomcat监控面板(如“Tomcat Overview”),实现可视化展示。hertzbeat
开源监控工具,支持Tomcat监控(CPU、内存、请求数、响应时间等),无需复杂配置:
wget https://github.com/hertzbeat/hertzbeat/releases/download/vx.x.x/hertzbeat-x.x.x-linux-amd64.tar.gz)。五、自定义脚本监控
通过Shell或Python脚本定期检查Tomcat状态,实现自动化监控与告警。示例Shell脚本(保存为check_tomcat.sh):
#!/bin/bash
TOMCAT_PID=$(ps -ef | grep tomcat | grep -v grep | awk '{print $2}')
if [ -z "$TOMCAT_PID" ]; then
echo "Tomcat is not running. Starting Tomcat..."
/path/to/tomcat/bin/startup.sh
echo "Tomcat started."
else
echo "Tomcat is running with PID: $TOMCAT_PID"
fi
赋予执行权限:chmod +x check_tomcat.sh,添加到crontab(每分钟检查一次):
* * * * * /path/to/check_tomcat.sh >> /var/log/tomcat_monitor.log 2>&1
以上方法覆盖了从基础到高级的Tomcat监控需求,可根据实际场景选择组合使用(如基础命令行用于快速排查,第三方工具用于长期稳定监控,自定义脚本用于自动化运维)。