You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logrotate缺失UTC 00:00-06:25日志问题求助

Logrotate管理Solr日志丢失UTC 00:00-06:25内容的排查与解决

我们在AWS EC2实例中使用logrotate工具管理Solr日志,当前的日志轮转脚本如下:

/opt/solr-6.5.0/server/logs/solr.log
{
        daily
        rotate 1
        missingok
        notifempty
        sharedscripts
        maxsize 500M
        copytruncate
        dateformat -%d %b %Y %H:%M:%S
        compress
        prerotate
                /usr/bin/find /opt/solr-6.5.0/server/logs/solr.log -mtime +0 -not -name '*.gz' 2>/dev/null -exec gzip {} \; || true
                /usr/bin/find /opt/solr-6.5.0/server/logs/solr.log -mtime +15 -delete 2>/dev/null || true
        endscript
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

问题描述

日志文件中缺失UTC时间00:00:00至06:25:00的内容,当前日志文件起始时间为06:25 UTC,希望日志能从00:00 UTC开始记录。已尝试添加sharedscripts、调整maxsize至500M、设置dateformat,均未解决问题。

原因分析

  1. prerotate脚本逻辑错误:find命令指定的路径是单个文件solr.log,无法匹配轮转后的带日期后缀的日志文件,导致旧日志处理不彻底,甚至可能丢失凌晨时段的日志。
  2. copytruncate的固有缺陷:该指令先复制日志文件再截断原文件,若复制与截断之间有日志写入,这部分日志会直接丢失,凌晨时段若有日志写入延迟,就会出现时间缺口。
  3. logrotate执行时间与UTC不匹配:logrotate默认随cron.daily执行,若系统时区不是UTC,轮转触发时间会偏离UTC 00:00,导致凌晨的日志被留在旧文件中未被正确轮转。
  4. 无效的rsyslog重载:若Solr是直接写入日志文件而非通过rsyslog转发,postrotate中的reload rsyslog操作毫无意义,甚至可能导致日志写入中断。

解决方案

1. 修复prerotate中的find命令

将find的目标路径改为日志目录,匹配所有solr相关日志文件:

prerotate
        /usr/bin/find /opt/solr-6.5.0/server/logs/ -name 'solr.log' -mtime +0 -not -name '*.gz' 2>/dev/null -exec gzip {} \; || true
        /usr/bin/find /opt/solr-6.5.0/server/logs/ -name 'solr.log*.gz' -mtime +15 -delete 2>/dev/null || true
endscript

2. 确保logrotate在UTC 00:00触发

编辑/etc/crontab,将cron.daily的执行时间设为UTC 00:00(若系统默认时区不是UTC,需指定CRON_TZ):

# 在/etc/crontab中添加或修改
CRON_TZ=UTC
0 0 * * * root run-parts /etc/cron.daily

3. 替换copytruncate为create+重启Solr

避免copytruncate的丢失风险,改用create创建新日志文件,然后重启Solr切换日志输出:

/opt/solr-6.5.0/server/logs/solr.log
{
        daily
        rotate 15  # 直接保留15天日志,无需prerotate删除逻辑
        missingok
        notifempty
        sharedscripts
        maxsize 500M
        create 644 solr solr  # 根据Solr运行的用户/组调整权限
        dateformat -%Y%m%d-%H%M%S  # 使用无空格的标准日期格式,避免文件路径问题
        compress
        postrotate
                # 若Solr用systemd管理
                systemctl restart solr || true
                # 若为脚本启动,替换为对应重启命令
                # /opt/solr-6.5.0/bin/solr restart -p 8983 || true
        endscript
}

4. 移除无效的rsyslog重载

若Solr直接写入日志文件,删除postrotate中的reload rsyslog行,避免不必要的干扰。


内容的提问来源于stack exchange,提问作者Shrottam Nayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:04:56