温馨提示×

Linux下MongoDB日志如何管理

小樊
37
2025-11-14 21:47:26
栏目: 云计算

Linux下MongoDB日志管理

一 基础配置与查看

  • 配置文件位置:常见为 /etc/mongod.conf(新版本)或 /etc/mongodb.conf(旧版本)。
  • 常用 systemLog 配置示例:
    • 输出到文件:
      • systemLog:
        • destination: file
        • path: /var/log/mongodb/mongod.log
        • logAppend: true
    • 输出到系统日志(syslog):
      • systemLog:
        • destination: syslog
        • syslogFacility: daemon(示例)
  • 查看与实时监控:
    • 实时查看:tail -f /var/log/mongodb/mongod.log
    • 连接相关日志关键词:grep “connection accepted” /var/log/mongodb/mongod.log
  • 日志级别与组件:
    • 全局详细度:systemLog.verbosity(如 0 默认,1–5 逐步详细;生产建议保持默认)
    • 组件级别:component.query.verbosity 等,便于定位问题而不全局放大日志量

二 日志轮转方案

  • 内置轮转(推荐优先使用)
    • 行为:默认 rename,将当前日志重命名为 --
      T-- 时间戳后新建同名日志文件。
    • 触发方式:
      • 命令行:db.adminCommand({ logRotate: “server” })(仅服务器日志)或 { logRotate: 1 }(同时轮换服务器与审计日志)
      • 信号:kill -SIGUSR1 <mongod_pid>
  • 配合 Linux logrotate 的两种方式
    • reopen 模式(与 logrotate 协同):
      • 配置:systemLog.logRotate: reopen,并始终使用 logAppend: true
      • logrotate 示例(/etc/logrotate.d/mongodb):
        • /var/log/mongodb/mongod.log {
          • daily
          • rotate 7
          • compress
          • delaycompress
          • missingok
          • notifempty
          • create 640 mongodb mongodb
          • sharedscripts
          • postrotate
            • /usr/bin/pkill -USR1 mongod
          • endscript
        • }
    • copytruncate 模式(无需信号,简单粗暴):
      • 在 logrotate 中使用 copytruncate,直接复制并清空原文件,避免信号与重开文件句柄的问题。
  • 选择建议:优先使用内置 rename + SIGUSR1;若已有统一 logrotate 流程,采用 reopen 模式与之集成;无法管理进程信号时再用 copytruncate

三 慢查询与审计日志

  • 慢查询日志
    • 阈值:operationProfiling.slowOpThresholdMs(默认 100ms
    • 级别:operationProfiling.slowOpThresholdMs 与 profiling 级别配合,定位长耗时操作。
  • 审计日志(可选)
    • 启用示例:
      • security:
        • authorization: enabled
      • auditLog:
        • destination: file
        • format: JSON
        • path: /var/log/mongodb/audit.json
        • filter: ‘{ “severity”: { “$gte”: 1 } }’
    • 轮换:与服务器日志一致,使用 logRotate 命令或 SIGUSR1;需启用审计功能才可轮换审计日志。

四 日志分析与告警

  • 命令行快速筛选
    • 错误关键字:grep -i “error” /var/log/mongodb/mongod.log
    • 慢查询:grep “COMMAND” /var/log/mongodb/mongod.log | awk ‘$NF > 100 {print}’(示例阈值 100ms
  • 可视化与统计工具
    • mtools:pip3 install mtools
      • mloginfo --slow /var/log/mongodb/mongod.log
      • mplotqueries /var/log/mongodb/mongod.log --type scatter
  • 集中化与监控
    • 将日志接入 ELK(Elasticsearch + Logstash + Kibana)做检索、可视化与告警。
    • 磁盘空间监控:df -h 与阈值告警脚本,避免因日志占满导致实例异常。

五 生产实践清单

  • 权限与路径:日志目录与文件属主应为 mongodb:mongodb,权限如 640;路径使用绝对路径并预留磁盘。
  • 策略选择:默认使用内置 rename + SIGUSR1;统一运维平台下采用 reopen + logrotate;无法发信号时用 copytruncate
  • 保留周期:按合规与容量规划设置 rotate(如 7 天),并启用 compressdelaycompress
  • 级别控制:生产保持 verbosity 0,必要时临时提高并同步监控磁盘。
  • 分离 I/O:将日志置于独立分区(如 /log/mongodb),避免与数据文件争用。
  • 审计与合规:启用审计时同步规划审计日志的保留、保护与轮换策略。

0