MongoDB在CentOS中的主配置文件为/etc/mongod.conf,所有日志相关设置均在此文件中完成。
在mongod.conf中通过systemLog section配置日志行为,关键参数如下:
file(文件)或stderr(标准错误,默认file);/var/log/mongodb/mongod.log(默认路径);true(重启后追加,默认true),避免日志覆盖;logrotate是Linux系统自带的日志轮转工具,可自动管理MongoDB日志的切割、压缩和清理。
配置步骤:
/etc/logrotate.d/mongodb文件:sudo nano /etc/logrotate.d/mongodb
/var/log/mongodb/mongod.log {
daily # 每天轮转一次
missingok # 日志文件丢失时不报错
rotate 7 # 保留7个轮转日志文件
compress # 压缩旧日志(gzip)
notifempty # 日志为空时不轮转
create 0640 mongodb adm # 新日志文件权限(属主:mongodb,属组:adm)
sharedscripts # 所有日志处理完再执行脚本
postrotate
/bin/kill -SIGUSR1 $(cat /var/run/mongodb/mongod.pid) 2>/dev/null || true
endscript
}
注:
postrotate脚本通过发送SIGUSR1信号通知MongoDB切换日志文件。
sudo logrotate -d /etc/logrotate.d/mongodb # 干运行(模拟执行)
sudo logrotate -f /etc/logrotate.d/mongodb # 强制立即执行
通过MongoDB shell手动执行轮转命令:
mongo --quiet --eval "db.adminCommand({ logRotate: 1 })"
此命令会重命名当前日志文件(附加时间戳),并创建新日志文件。
tail -f /var/log/mongodb/mongod.log
head -n 20 /var/log/mongodb/mongod.log
less /var/log/mongodb/mongod.log
grep "ERROR" /var/log/mongodb/mongod.log
awk '/ERROR/ {count++} END {print "Error count:", count}' /var/log/mongodb/mongod.log
sudo cat /var/log/mongodb/mongod.log | jq '.msg'
使用find命令删除指定天数前的日志文件(如30天前):
find /var/log/mongodb/ -name "*.log" -mtime +30 -type f -delete
若需清空当前日志文件但不删除,可使用:
cat /dev/null > /var/log/mongodb/mongod.log
将日志文件移动到归档目录(如/var/log/mongodb/archive/)并重命名:
archive_dir="/var/log/mongodb/archive"
log_file="/var/log/mongodb/mongod.log"
timestamp=$(date +%Y-%m-%d_%H-%M-%S)
sudo mkdir -p "$archive_dir"
sudo mv "$log_file" "$archive_dir/mongod_$timestamp.log"
/var/log/mongodb/目录属主为mongodb(默认用户),避免权限拒绝;du -sh /var/log/mongodb/),避免磁盘占满;chmod 600 /var/log/mongodb/mongod.log)。