MongoDB 日志详解:systemLog 配置、慢查询与分析实战

MongoDB 日志中文详解:systemLog 配置(destination/path/logAppend/logRotate)、4.4+ 结构化 JSON 日志格式、verbosity 日志详略、数据库 Profiler 慢查询(slowms)、logRotate 轮转,以及观测云 DataKit 采集告警落地方案。

最佳实践
MongoDB 日志详解:systemLog 配置、慢查询与分析实战技术指南封面

MongoDB 从 4.4 起把日志全面改为结构化 JSON 格式——每条日志都是带严重级别、组件、上下文的标准文档,天然适合平台化采集分析。本文讲解 systemLog 配置、日志结构解读、Profiler 慢查询诊断,以及观测云落地路径。

核心要点速览

  • MongoDB 4.4+ 日志默认就是 JSON:每条含 severity(F/E/W/I/D1-D5)、component(COMMAND/STORAGE/NETWORK 等)、msg、attr 属性体。
  • systemLog 段落管输出去向:文件/syslog/控制台,logAppend 追加、logRotate 轮转。
  • Profiler 是慢查询主武器profile 级别 + slowms 阈值,结果存 system.profile 集合。
  • 组件级 verbosity 精细调噪:STORAGE 太吵就单独调低,COMMAND 排障就单独调高。

1. systemLog 基础配置

# mongod.conf
systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true           # 重启追加而非覆盖
  logRotate: reopen         # 支持外部 logrotate 的 reopen 模式
  verbosity: 0              # 全局详略 0-5
  component:
    command:
      verbosity: 1          # COMMAND 组件单独调详细

logRotate: reopen 配合系统 logrotate(发 SIGUSR1 或执行 db.adminCommand({logRotate: 1}))实现安全轮转——MongoDB 收到信号后重新打开日志文件。

2. 读懂 JSON 日志结构

{
  "t": {"$date": "2026-08-25T14:55:22.123+08:00"},
  "s": "I",
  "c": "NETWORK",
  "id": 22943,
  "ctx": "listener",
  "msg": "Connection accepted",
  "attr": {"remote": "10.0.0.8:51234", "connectionCount": 42}
}
  • s(severity):F Fatal、E Error、W Warning、I Info、D1-D5 调试详略;
  • c(component):ACCESS(访问控制)、COMMAND、CONTROL、NETWORK、QUERY、REPL(复制)、SHARDING、STORAGE、WT(WiredTiger)等;
  • id:唯一消息 ID,可直接按 ID 检索某类事件;
  • attr:结构化属性体(慢查询的 durationMillis、planSummary、nreturned 都在这里)。

3. 慢查询与 Profiler

// 开启 profiling(级别 1 = 只记慢操作)
db.setProfilingLevel(1, { slowms: 100 })

// 查看分析结果
db.system.profile.find().sort({ ts: -1 }).limit(5).pretty()

system.profile 集合记录慢操作的执行计划摘要、扫描/返回行数、耗时。级别 2 记全部操作(仅短期排障),0 关闭。慢操作同样会出现在主日志(COMMAND 组件、msg 为 Slow query),两种视角互为补充。

4. 值得关注的关键日志模式

日志信号 含义
Slow query(attr.durationMillis 大) 慢操作,看 planSummary 是否 COLLSCAN
Connection accepted 频率异常 短连接风暴,检查连接池
REPL 组件的 Rollback / state transition 复制集角色切换、回滚
WT 组件的 cache is full WiredTiger 缓存压力,内存告急
Detected unclean shutdown 非正常关机后的恢复

观测云落地:MongoDB 日志采集与分析

  1. 采集:DataKit conf.d/log/logging.conflogfiles 指向 mongod.log,source: mongodbservice 标识实例;JSON 日志自动解析,severity/component/attr 直接成为可过滤字段。
  2. 标准化:severity(F/E/W → error/warning)映射标准 statust.$date 解析为 time
  3. 告警:监控器对 Fatal/Error、复制集角色切换、慢查询速率(每分钟 Slow query 条数)、连接风暴设规则,通知钉钉/企业微信/飞书。
  4. 分析:日志查看器按 component/attr.ns(命名空间)聚合慢查询 TopN;聚类分析归纳异常模式;耗时分布入仪表板。
  5. 成本控制:主日志标准索引;如开启级别 2 profiling 产生大量记录,走低频索引并限时开启。

常见问题(FAQ)

老版本 MongoDB(4.4 之前)的文本日志怎么解析?

4.2 及更早是纯文本格式(时间戳 级别 组件 [线程] 消息)。用 Pipeline 的 grok 规则解析,或优先升级版本——JSON 日志的运维效率提升是质的。

Profiler 开着有性能影响吗?

级别 1(只记慢操作)影响很小,生产可常开;级别 2(全量)会写 system.profile 集合,量大有开销,短期排障用。阈值 slowms 从 100ms 起步按业务调整。

mongos 和 mongod 日志要分开采吗?

要。分片集群中 mongos(路由)、config server、shard mongod 的日志各自独立,DataKit 配置中用不同 source 或自定义字段区分角色,排障时按角色过滤。

副本集选主期间日志怎么看?

REPL 组件会记录选举全过程(Starting an electionTransition to primary)。观测云中按 REPL 组件过滤时间线,配合告警规则"30 分钟内发生多次选举"发现不稳定集群。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台