温馨提示×

如何优化CentOS Tomcat日志存储空间

小樊
33
2025-12-11 17:28:33
栏目: 云计算

优化目标与总体思路

  • 控制单个日志文件大小与保留周期,避免 catalina.out 无限增长。
  • 采用“按天切割 + 压缩 + 保留有限份数”的组合策略,必要时对历史文件做二次清理。
  • 减少不必要的控制台输出与冗余日志,降低写入量。
  • 可选:将日志接入 rsyslog 做集中管理与长期归档,减轻本机磁盘压力。

方案一 Logrotate管理catalina.out

  • 安装与准备
    • 确认系统已安装 logrotatesudo yum install -y logrotate
  • 创建配置文件
    • 新建:sudo vi /etc/logrotate.d/tomcat,写入以下内容(按需调整路径与保留策略):
      /opt/tomcat/logs/catalina.out {
          copytruncate
          daily
          rotate 30
          size 100M
          compress
          delaycompress
          missingok
          notifempty
          create 640 tomcat adm
          dateext
          dateformat -%Y-%m-%d
      }
      
    • 关键参数说明:
      • copytruncate:复制后截断原文件,避免重启 Tomcat;若追求“原子切分”,可改用“rename + 信号通知”方式(见文末进阶)。
      • daily / size 100M:双重触发,任一条件满足即轮转。
      • rotate 30:保留最近 30 份历史。
      • compress / delaycompress:压缩节省空间,延迟压缩避免刚轮转文件立即压缩带来的 CPU 抖动。
      • create 640 tomcat adm:轮转后重建文件并设定权限与属主。
      • dateext / dateformat:以日期命名,便于识别与清理。
  • 运行机制与测试
    • 系统 crond 每日会执行 /etc/cron.daily/logrotate,读取 /etc/logrotate.conf 并包含 /etc/logrotate.d/*
    • 手动测试与强制执行:
      • 测试语法:sudo logrotate -d /etc/logrotate.d/tomcat(dry-run)
      • 强制执行:sudo logrotate -f /etc/logrotate.d/tomcat
  • 清理历史压缩包(可选)
    • 若需更激进的磁盘控制,可再配合 find 删除超过 N 天的 .gz 文件,例如保留 90 天:
      find /opt/tomcat/logs -name "catalina.out-*.gz" -mtime +90 -delete
      

以上做法为 CentOS 上通用、低侵入的日志存储优化方案,参数可按业务写入量灵活调整。

方案二 使用cronolog按日期自动切割stdout

  • 安装 cronolog
    • sudo yum install -y cronolog
  • 修改 Tomcat 启动脚本
    • 编辑 bin/catalina.sh,找到类似:
      org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
          | /usr/sbin/cronolog "$CATALINA_BASE"/logs/catalina.out-%Y-%m-%d.log >> /dev/null &
      
    • 重启 Tomcat 后,将在 logs/ 下生成按日期命名的文件(如:catalina.out-2025-12-11.log),天然避免单文件过大。
  • 清理旧日志
    • 结合 find 定期删除 N 天前文件,例如保留 30 天:
      find /opt/tomcat/logs -name "catalina.out-*.log" -mtime +30 -delete
      

该方案通过管道将标准输出交给 cronolog 按日期创建新文件,省去后续对 catalina.out 的轮转配置。

进阶与配套优化

  • 减少日志输出
    • conf/logging.properties 中将不必要的日志级别调高(如 WARNING/ERROR),或关闭控制台输出,降低磁盘写入速率。
  • 接入集中日志
    • 配置 rsyslog 接收 Tomcat 日志并写入本地或远程 Syslog,配合远端 logrotate 做长期留存与压缩归档,减轻应用服务器磁盘压力。
  • 原子切分与信号通知(进阶)
    • 若希望轮转“无丢日志”且避免 copytruncate 的潜在截断风险,可改用“rename + 信号”方式:
      • 轮转时用 rename()catalina.out 改为带日期的新名;
      • 向 Tomcat 进程发送 USR1 信号让其重新打开日志文件(需应用支持)。
    • 此方式需应用或启动脚本配合,实施前请在测试环境验证。

0