Ubuntu中MongoDB如何进行日志管理
导读:Ubuntu 下 MongoDB 日志管理实践 一 定位与查看日志 默认路径与配置文件 日志文件:/var/log/mongodb/mongod.log 配置文件:/etc/mongod.conf(查看其中的 systemLog.pat...
Ubuntu 下 MongoDB 日志管理实践
一 定位与查看日志
- 默认路径与配置文件
- 日志文件:/var/log/mongodb/mongod.log
- 配置文件:/etc/mongod.conf(查看其中的 systemLog.path 可确认实际路径)
- 常用查看方式
- 实时查看:tail -f /var/log/mongodb/mongod.log
- 检索错误:grep -E ‘E|F’ /var/log/mongodb/mongod.log
- 权限核查:ls -l /var/log/mongodb/mongod.log(如无权限,调整属主/权限后再查看)
二 日志轮转与清理
-
推荐方式:使用 logrotate(系统自带、稳定可靠)
- 新建配置:sudo vim /etc/logrotate.d/mongodb
- 写入示例(按日轮转、保留 7 天、压缩、按大小触发、轮转后通知 mongod 重新打开日志):
/var/log/mongodb/mongod.log { daily rotate 7 compress missingok notifempty sharedscripts copytruncate dateext size 200M postrotate /bin/kill -SIGUSR1 $(cat /var/run/mongodb/mongod.pid 2> /dev/null) 2> /dev/null || true endscript }- 说明:copytruncate 适用于以文件方式记录日志的场景;若以 syslog 记录,请改为通知 syslog 刷新。
- 测试与生效
- 手动测试:sudo logrotate -d /etc/logrotate.d/mongodb(干跑)
- 强制执行:sudo logrotate -f /etc/logrotate.d/mongodb
- 日志轮转后,旧文件会被重命名并压缩,mongod 继续写入新文件。
-
备选方式:脚本切割 + cron(简单直接)
- 切割脚本示例(/usr/local/bin/mongo_log_rotate.sh):
#!/usr/bin/env bash LOG_DIR=/var/log/mongodb PID_FILE=/var/run/mongodb/mongod.pid KEEP_DAYS=7 # 发送 USR1 触发日志轮转 if [[ -f "$PID_FILE" ]]; then kill -SIGUSR1 "$(cat "$PID_FILE")" 2> /dev/null || true fi # 清理 N 天前旧日志 find "$LOG_DIR" -name "mongod.log.*" -mtime +"$KEEP_DAYS" -delete - 赋权并加入定时任务(每天 23:59 执行):
- chmod +x /usr/local/bin/mongo_log_rotate.sh
- echo “59 23 * * * root /usr/local/bin/mongo_log_rotate.sh” | sudo tee -a /etc/crontab
- 提示:脚本法同样依赖 mongod 对 SIGUSR1 的日志轮转支持。
- 切割脚本示例(/usr/local/bin/mongo_log_rotate.sh):
三 日志级别与组件控制
- 配置文件设置(持久化)
- 编辑 /etc/mongod.conf:
systemLog: destination: file path: /var/log/mongodb/mongod.log logAppend: true verbosity: 1 - 重启生效:sudo systemctl restart mongod
- 编辑 /etc/mongod.conf:
- 运行时动态调整(无需重启)
- 全局级别:db.setLogLevel(1)
- 组件级别:db.setLogLevel(1, “NETWORK”)
- 查看组件与级别:db.getLogComponents()
- 慢查询日志
- 设置阈值(单位毫秒):db.adminCommand({ setParameter: 1, slowMS: 100 } )
- 说明:提高日志级别或开启慢查询会增大日志体量,注意磁盘与 I/O 影响。
四 日志分析与可视化
- 命令行快速分析
- 过去 1 小时错误:grep -E ‘E|F’ /var/log/mongodb/mongod.log | awk ‘$1 > “2025-08-20T14:00”’
- 按小时统计错误量:cat mongod.log | grep -oP ‘\d{ 4} -\d{ 2} -\d{ 2} T\d{ 2} ’ | sort | uniq -c
- 工具链
- mtools:pip3 install mtools(如 mlogfilter、mplotqueries 做慢查询筛选与可视化)
- ELK/EFK:将 mongod.log 接入 Elasticsearch + Logstash/Kafka + Kibana,构建仪表盘与告警。
五 关键注意事项
- 避免日志无限增长:务必配置轮转(logrotate 或 SIGUSR1 脚本),并设置合理的保留天数与压缩策略。
- 轮转方式选择:使用 file 类型日志时,logrotate 配置 copytruncate 更通用;若采用 syslog,则通过 syslog 的轮转机制处理。
- 权限与属主:确保 /var/log/mongodb 与日志文件对 mongodb 用户可读写(常见为 mongodb:mongodb,权限 640)。
- 变更生效:修改 /etc/mongod.conf 后需重启;运行时调级用 db.setLogLevel 即可。
- 区分日志类型:mongod.log 为服务器运行日志;journal 是 WiredTiger 的写前日志(WAL),用于崩溃恢复,不用于审计或业务排查,勿与 mongod.log 混淆。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu中MongoDB如何进行日志管理
本文地址: https://pptw.com/jishu/786516.html
