如何禁用MongoDB 7.0仲裁节点的‘local.oplog.rs集合不存在’日志
我搭建了PRIMARY-SECONDARY-ARBITER架构的MongoDB Community Edition 7.0.4集群,仲裁节点日志中频繁出现如下无意义警告:
{"t":{"$date":"2024-01-16T11:23:07.001+01:00"},"s":"W", "c":"QUERY", "id":23799, "ctx":"ftdc","msg":"Aggregate command executor error","attr":{"error":{"code":26,"codeName":"NamespaceNotFound","errmsg":"Unable to retrieve storageStats in $collStats stage :: caused by :: Collection [local.oplog.rs] not found."},"stats":{},"cmd":{"aggregate":"oplog.rs","cursor":{},"pipeline":[{"$collStats":{"storageStats":{"waitForLock":false,"numericOnly":true}}}],"$db":"local"}}}
仲裁节点本身不存在local.oplog.rs集合,所以该警告无实际价值,且旧版本MongoDB不会出现此问题。调整全局日志verbosity无法针对性解决,需仅屏蔽该特定警告,同时保留其他日志输出。
解决方案
MongoDB 7.0+ 支持按日志ID精准过滤特定条目,操作分为两种方式:
1. 动态生效(无需重启节点)
连接到仲裁节点的mongosh,执行以下命令:
db.adminCommand({ setParameter: 1, logComponentVerbosity: { QUERY: { component: { 23799: { verbosity: -1 } } } } })
通过指定QUERY组件下日志ID 23799的verbosity为-1,直接屏蔽该条目的输出。
2. 永久生效(需修改配置文件重启)
修改仲裁节点的mongod.conf配置文件,添加或更新日志过滤规则:
logComponentVerbosity: QUERY: component: 23799: verbosity: -1
保存配置后重启仲裁节点,规则将永久生效。
注意事项
- 该方法仅适用于MongoDB 7.0及以上版本,旧版本不支持按日志ID单独过滤。
- 配置完成后观察日志,确认ID 23799的警告不再出现,同时其他日志条目正常输出即可验证生效。
内容的提问来源于stack exchange,提问作者Grzegorz Supryn

