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
相关产品推荐
相关产品推荐

