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 都在这里)。

集中分析 mongod.log 时,先用一条真实日志验证字段。通过观测云 DataKit 日志采集读取文件后,配置 JSON 解析,将 s 映射为日志级别、t.$date 解析为事件时间,并保留 c、ctx 和需要查询的 attr 子字段。确认慢查询的耗时与命名空间可检索后,再按实例和时间窗口统计;Profiler 集合里的记录需要另行读取,不能当作 mongod.log 自动采到。

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 非正常关机后的恢复

常见问题(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 election、Transition to primary)。集中检索时按解析后的组件字段筛选 REPL,再核对各实例的角色变化时间;若要对频繁选举告警,需先明确统计事件及检测窗口。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台