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

MongoDB日志轮转配置后无日志写入问题求助

MongoDB日志轮转失效且无日志写入问题排查与解决

在Ubuntu服务器上部署MongoDB并配置logrotate实现日志轮转,但日志既无法触发轮转,也没有内容写入。已配置/etc/mongod.conf、/etc/logrotate.d/mongodb及logrotate.conf,尝试过强制启动轮转、设置cron任务,均未生效。

相关配置文件内容

/etc/mongod.conf

#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  logRotate: reopen
  path: /var/mongodb/log/*.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0


# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

security:
    authorization: enabled

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

/etc/logrotate.d/mongodb

/var/log/mongodb/mongod.log {
#    state /var/lib/logrotate/status-mongodb
    hourly
    rotate 96
    size 100M
    missingok
    create 0600 mongodb mongodb
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
         if /usr/sbin/pidof -s mongod > /dev/null ; then kill -USR1 $( /usr/sbin/pidof mongod ) ; fi
         /bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod.pid 2>/dev/null` 2> /dev/null || true
#        /bin/kill -SIGUSR1 `cat /var/lib/mongo/mongod.lock 2> /dev/null` 2> /dev/null || true
#        /bin/kill -SIGUSR1 $(cat /var/run/mongodb.pid)
#        systemctl restart mongod >/dev/null 2>&1 || true
    endscript
}

logrotate.conf

# see "man logrotate" for details

# global options do not affect preceding include directives

# rotate log files weekly
*/15

# use the adm group by default, since this is the owning group
# of /var/log/syslog.
su root adm

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
#dateext

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# system-specific logs may also be configured here.

排查与解决步骤

1. 修复MongoDB日志路径配置错误

MongoDB不支持用通配符*.log指定日志文件路径,必须写具体文件名。修改/etc/mongod.conf中的systemLog.path:

systemLog:
  path: /var/mongodb/log/mongod.log

同时确保日志目录存在且权限正确:

mkdir -p /var/mongodb/log
chown -R mongodb:mongodb /var/mongodb/log
chmod 755 /var/mongodb/log

修改后重启MongoDB:

systemctl restart mongod

2. 对齐logrotate的日志路径

当前logrotate监控的/var/log/mongodb/mongod.log与MongoDB实际日志路径不匹配,修改/etc/logrotate.d/mongodb的日志路径:

/var/mongodb/log/mongod.log {
#    state /var/lib/logrotate/status-mongodb
    hourly
    rotate 96
    size 100M
    missingok
    create 0600 mongodb mongodb
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
         if /usr/sbin/pidof -s mongod > /dev/null ; then kill -USR1 $( /usr/sbin/pidof mongod ) ; fi
         /bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod.pid 2>/dev/null` 2> /dev/null || true
    endscript
}

3. 修复logrotate.conf的全局轮转周期错误

logrotate.conf中的*/15是无效配置,若需每周轮转,改为:

weekly

若需15分钟级触发,logrotate本身不支持,需通过cron任务调用:

crontab -e

添加以下内容:

*/15 * * * * /usr/sbin/logrotate /etc/logrotate.conf

4. 验证logrotate配置并强制测试

先调试logrotate配置(仅检查不执行):

logrotate -d /etc/logrotate.d/mongodb

调试无错误后,强制执行轮转:

logrotate -f /etc/logrotate.d/mongodb

执行后检查日志目录是否生成轮转文件,同时验证MongoDB日志写入:

tail -f /var/mongodb/log/mongod.log

5. 检查MongoDB权限与进程状态

确认日志文件权限正确:

ls -l /var/mongodb/log/mongod.log

输出应显示属主属组为mongodb:mongodb。
检查MongoDB进程状态:

systemctl status mongod

若进程异常,先修复启动问题再排查日志轮转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:58:22