如何监控CentOS Tomcat日志异常
小樊
34
2025-12-23 13:12:35
监控思路与日志定位
- 明确要监控的日志类型:访问日志(HTTP请求)、错误日志(异常堆栈)、应用日志(业务日志)、启动日志(启停过程)、GC日志(JVM垃圾回收)。
- 定位日志目录:Tomcat 日志通常在 $CATALINA_HOME/logs,常见文件有 catalina.out、localhost.log、localhost_access_log.txt、manager.log、host-manager.log**;若以 systemd 管理,也可用 journalctl -u tomcat.service 查看服务日志。
- 建议开启并按需优化访问日志格式(在 server.xml 的 AccessLogValve 中),便于后续分析性能与异常来源。
快速命令行监控
- 实时查看关键日志:
- 实时跟踪控制台输出:tail -f $CATALINA_HOME/logs/catalina.out
- 过滤错误关键字:tail -f $CATALINA_HOME/logs/catalina.out | grep -i ‘error|exception|fail’
- 查看访问日志中的异常状态码:tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt | awk ‘$9 >= 500’
- 按时间段排查:
- 提取某时段日志:sed -n ‘/2025-12-23 10:00:00/,/2025-12-23 10:10:00/p’ $CATALINA_HOME/logs/catalina.out
- 若使用 systemd:
- 实时查看服务日志:journalctl -u tomcat.service -f
- 提示:将 $CATALINA_HOME 替换为你的实际 Tomcat 安装路径。
集中化监控方案
- ELK/EFK 方案:
- 用 Filebeat 采集 catalina.out、localhost.log、localhost_access_log.txt**;
- Logstash 解析与丰富(如将访问日志按 grok 解析,提取 clientip、status、request、ua、响应时间 等);
- 写入 Elasticsearch,在 Kibana 建立索引模式与可视化仪表板,配置阈值告警(如 5xx 突增、ERROR 计数阈值)。
- 其他平台:
- Graylog 或 Splunk 采集与检索,同样可构建规则告警与报表。
- 落地要点:为不同日志设置合适的 索引生命周期管理(ILM) 与保留策略,避免磁盘被占满。
告警与自愈
- Zabbix 方案:
- 方式一:Zabbix Agent 采集日志文件(如 log[/path/catalina.out,ERROR]),设置触发器(如最近 5 分钟 ERROR ≥ N)与告警动作;
- 方式二:在 Elasticsearch 侧统计异常命中数,Zabbix 通过脚本/HTTP 采集该指标并告警。
- 轻量脚本自愈(示例思路):
- 每 1 分钟 检查 catalina.out 是否出现 ERROR/OutOfMemoryError;
- 或做 HTTP 健康检查(如 curl -I -m 10 -w %{http_code}),非 200 则执行重启并记录操作日志;
- 将脚本加入 crontab 并控制并发与重启上限,避免“重启风暴”。
- 注意:自动重启仅作兜底,务必保留现场日志并联动告警,便于根因分析。
日志治理与加固
- 日志轮转与归档:
- 使用 logrotate 管理 catalina.out 等文件大小与保留份数;
- 访问日志建议按日切割,便于检索与合规。
- 日志分割工具:
- 通过 cronolog 或 Log4j2 TimeBasedTriggeringPolicy 按日期/大小切分,避免单文件过大。
- 安全与合规:
- 限制日志文件访问权限,定期审计;
- 隐藏 Server/X-Powered-By 等版本信息,降低攻击面;
- 为访问日志开启 Referer/UA 等字段,便于识别异常来源与盗链。